Linux系统编程---文件I/O(open、read、write、lseek、close)
文件描述符
定义:对内核而言,文件描述符相当于一个文件的标识,它是一个非负整数,当打开(open)一个现有文件或者创建(creat)一个新文件时,内核会向进程返回一个文件描述符
在unix中(文件描述符 0–标准输入 1–标准输出 2–标准错误)
open
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int open(const char *pathname, int flag, mode_t mode)
参数1:打开或者创建文件的名字
参数2:选项参数,可选择多个参数用 | 构成
其中: O_RDONLY 只读打开 O_WRONLY只写打开 O_RDWR读写打开只能选择一个
下面是可选择的
O_APPEND 每次都追加在文件的尾端
O_CREAT 若文件不存在,则创建它,使用此项,需要指定第三个参数mode,用于设定新文件的权限
O_EXCL 若指定了O_CREAT,而文件存在则会报错,用于测试一个文件是否存在,不存在则创建
O_TRUNC 如果此文件存在,而且为只写或读写成功打开,则将其长度截为0
参数3:…表示余下参数的数量和类型根据具体调用会有所不同,通常创建新文件时才使用表示权限
read
#include <unistd.h>
size_t read(int fd,void *buf,size_t nbytes)
描述:从文件描述符相关联的文件里读入nbytes个字节的数据,把它们放到数据区buf中,并返回读入的字节数
参数1:文件描述符
参数2:存放从文件中读取的数据的存储区
参数3:读出的字节数
返回值
0 未读入任何数据,已达文件尾
-1 表示出错
其它 读出的字节数
write
#include <unistd.h>
size_t write(int fd,const void *buf,size_t nbytes)
描述:把缓冲区buf前nbytes个字节写入文件描述符fd相关联的文件中,返回实际写入的字节数
参数1:文件描述符
参数2:写入文件的缓冲区指针
参数3:读出的字节数
返回值
0 未写入任何数据
-1 表示出错
其它 写入的字节数
lseek
#include <unistd.h>
off_t lseek(int fd,off_t offset,int whnece)
描述:移动文件指针到指定位置
参数1:文件描述符
参数2:偏移量,具体与第三个参数有关
参数3:SEEK_SET 文件头 SEEK_CUR 当前位置 SEEK_END 文件尾
close
#include <unistd.h>
int close(int fd)
描述:关闭一个打开的文件
参数1:文件描述符
返回值
小于0 关闭失败
其它 关闭成功
下面根据上述写一个综合案例
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
int fd,size;
char* buf = "hello,I'm wxp,this is my job!";
char buf_r[20];
int len = strlen(buf);//数组长度
printf("len = %d\n",len);
/*调用open创建wxp.c*/
if((fd = open("./wxp.c",O_CREAT|O_TRUNC|O_RDWR,0666)) < 0)
{
printf("open fail\n");
exit(1);
}
else
{
printf("open file: wxp.c fd = %d\n",fd);
}
/*write写入*/
if((size = write(fd,buf,len)) < 0)
{
printf("write fail\n");
exit(1);
}
else
{
printf("write: %s\n",buf);
printf("write size = %d\n",size);
}
/*lseek函数移动文件指针位置到文件开头*/
lseek(fd,0,SEEK_SET);
if((size = read(fd,buf_r,15)) < 0)
{
printf("read fail\n");
exit(1);
}
else
{
buf_r[15] = '\0';
printf("read from wxp.c the content is %s\n",buf_r);
printf("read size = %d\n",size);
}
if(close(fd) < 0)
{
printf("close fail\n");
exit(1);
}
else
{
printf("close wxp.c\n");
}
return 0;
}
Linux系统编程---文件I/O(open、read、write、lseek、close)的更多相关文章
- Linux系统编程--文件IO操作
Linux思想即,Linux系统下一切皆文件. 一.对文件操作的几个函数 1.打开文件open函数 int open(const char *path, int oflags); int open(c ...
- Linux系统编程@文件操作(一)
只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...
- linux系统编程--文件IO
系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
- Linux C 程序 文件操作(Linux系统编程)(14)
文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...
- linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...
- linux系统编程之文件与io(五)
上一节中已经学习了文件描述符的复制,复制方法有三种,其中最后一种fcntl还并未使用到,关于这个函数,不光只有复制文件描述符的功能,还有其它一些用法,本节就对其进行一一剖析: fcntl常用操作: 这 ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- linux系统编程之错误处理
在linux系统编程中,当系统调用出现错误时,有一个整型变量会被设置,这个整型变量就是errno,这个变量的定义在/usr/include/errno.h文件中 #ifndef _ERRNO_H /* ...
随机推荐
- [NOIP2006] 提高组 洛谷P1065 作业调度方案
题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...
- POJ 3518 (后缀自动机)
POJ 3518 Boring Problem : 给一个串S,询问串S有多个子串出现至少两次且位置不重叠. Solution : 对S串建立后缀自动机,再建立后缀树,dfs一遍统计处每个结点的子树中 ...
- 饭卡-HDU2546(01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory L ...
- vsftpd.conf案例
1. 匿名服务器的连接(独立的服务器) 在/etc/vsftpd/vsftpd.conf配置文件中添加如下几项:Anonymous_enable=yes (允许匿名登陆)Dirmessage_enab ...
- 【智能路由器】让MT7620固件openwrt支持USB
[智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 首先确定硬件有USB,这个得检查板子是否引出了usb口,一 ...
- Python开发【第*篇】【Socket网络编程】
1.Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...
- iOS中.pch文件怎样使用
pch 能够用来存储共享信息,比方设备屏幕的宽度,高度.版本等等 公用信息 Xcode 老版本号会自己主动为我们创建pch文件,新版本号開始不自己主动创建了.假设须要使用能够自己手动创建 waterm ...
- c#控件重绘的问题
1.当Panel有背景图像的时候,往Panel添加控件(带图像),画面会非常闪烁,所以,Panel尽量不要带背景图像 2.带背景图像可以参考designer.cs里面的写法... 添加Control之 ...
- python partial
1 很好记忆 partial的第一个参数是函数,后面都是该函数的参数. 2 特殊的地方 partial第一个参数是函数名,但是第二个参数是另外一个函数名. 比如partial(filter, func ...
- Python extensions for Windows
Python extensions for Windows pywin32 214 Python extensions for Windows Maintainer: Mark Hammond Hom ...