open函数:
作用:打开或者新建一个文件
原型: int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
参数:
pathname:路径
flags:1-> O_RONLY 只读打开 2 -> O_WONLY只写打开 3-> O_RDWR 可读可写打开
这三个是必选一个。
O_APPEND 表示追加 O_CREAT 文件不存在则创建 这两个是可选
mode:表示该文件的访问权限
O_EXCL->如果同时指定O_CREAT,并且文件已存在,则出错返回。
O_TRUNC->如果文件存在,将其长度截断为0字节
函数返回值:
成功:返回一个最小且未被占用的文件描述符
失败:返回-1,并设置errno值
close函数:
作用:关闭文件
函数原型:int close(int fd)
fd 文件描述符
函数返回值:
成功返回0
失败返回-1
read函数:
作用:从打开的设备或文件中读取数据
函数原型:ssize_t read(int fd,void*buf,size_t count)
fd->文件描述符 buf->读上来的数据保存在缓冲区buf中 count->buf缓冲区存放发最大字节数
函数返回值:
>0:读取到的字节数
=0:文件读取完毕
-1:出错,并设置errno
注意:
read 函数读普通文件,在读完文件后,若再次read,则read函数会立刻返回,表明read函数读普通文件是非阻塞的。
read函数读设备文件,socket,pipe文件都是阻塞的。
write函数:
作用:向打开的设备或文件写数据
函数原型:ssize_t write(int fd,const void*buf,size_t count)
fd->文件描述符 buf->缓冲区,要写入文件或者设备的数据 count->buf中数据的实际长度
函数返回值:
成功:返回写入的字节数
失败:返回-1,并设置errno
lseek函数:
常用操作:
lseek(fd,0,SEEK_SET) 文件指针移动到头部
int len=lseek(fd,0,SEEK_CUR) 获取文件指针当前位置
int len =lseek(fd,0,SEEK_END) 获取文件长度
操作如下:
注意:再读文件之前要把文件关掉,因为在写文件的时候文件指针已经移动到末尾了
或者使用lseek(fd,0,SEEK_SET);
如果不想把文件名写死,可以改为:
这样就可以生成test文件: