版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ferlan/article/details/83188098
open: 打开文件
#include<fcntl.h>
int open(const char *pathname,int flags,mode_t mode);
解释:
pathname:要打开的文件名称
flags:标志选项
必选项:(相互冲突,只能3选1)
O_RDONLY 只读
O_WRONLY只写
O_RDWR 读写
非必选项:
O_CREAT 若文件存在再打开,不存在就创建(需要指定新创建文件的权限,比如(0664))
O_EXCL 与O_CREAT同用时,若文件存在则报错
O_TRUNC 若文件存在则将文件长度截断为0(即将文件内容清空)
O_APPEND 追加 (不添加则默认每次写入为覆盖写入)
mode(如果源文件存在则不需要该参数):若文件不存在需要创建的时候,用于指定闯将的文件权限返回值:
返回值: 成功:非负整数(文件描述符),后续操作都通过描述符完成
失败:-1
这里要对open的第二个参数进行说明,必选项3个必选1个,非必选项可要可不要,如果要添加非必选项,中间用按位或‘ | ’,且当源文件不存在,你使用O_CREATE时,要添加第三个参数MODE,用于设置新文件的权限值,比如0664。
当然可以使用umask来修改创建文件的权限掩码,但代码中的umask仅对当前进程有用。
open("test.txt,O_RDONLY|O_CREATE,0664")
write:写入数据
功能:从buff中向fd所代表的文件写入count个字节的数据。
ssize_t write(int fd, const void *buf, size_t count);
解释:
fd:文件描述符
buf:写入数据的字符串
count:要求写入数据的长度(字节)
返回值:
成功: 返回真正写入的数据长度
失败: 返回-1
在写入时,count指定了想要实际写入的长度,比如很长的一个字符串,count设置为1,则只写入1个字符。
read :读取数据
功能:从fd所代表的文件中读取count字节长度的数据放到buf中。
ssize_t read(int fd, void *buf, size_t count);
解释:fd:文件描述符
buf:读出的数据放进buf
count:想要读取的数据长度
返回值:
成功:实际读入的数据长度
失败:返回-1
倘若读取数据的位置在文件末尾,则读不到任何数据,返回值为0
lseek:改变文件读写位置
off_t lseek(int fd, off_t offset, int whence);
解释:fd:文件描述符
offset:偏移量
whence:起始偏移位置
可选项:
SEEK_SET:起始位置
SEEK_CUR:当前位置
SEEK_END:末尾位置
比如:lseek(fd,0,SEEK_SET);
解释:跳转fd所代表的文件读写位置至起始位置的0偏移量处