赞
踩
学会文件或目录读写操作常用函数。
open函数:可以打开或创建一个文件(需包含头文件 unistd.h)。
如下:
int open(char *pathname,int flage)
int open(char *pathname,int flage,mode_t mode)
参数
pathname:欲打开文件的路径名。
flage:文件打开方式。(需包含头文件 fcntl.h)
mode:参数3使用前提,参数2指定了O_CREAT。(取值8进制数,用来描述文件的访问权限。 rwx 0664)
返回值
成功:打开文件所得对应的文件描述符
失败:-1 设置errno
flage | 作用 | flage | 作用 |
---|---|---|---|
O_RDONLY | 以只读方式打开文件 | O_WRONLY | 以只写方式打开文件 |
O_RDWR | 以可读写方式打开文件 | O_CREAT | 欲打开文件不存在,则创建文件 |
O_APPEND | 当读写文件时从文件尾开始移动 | O_TRUNC | 若文件存在,长度被截为0,属性不变 |
O_APPEND | 当读写文件时从文件尾开始移动 | O_TRUNC | 以不可阻断的方式打开文件 |
close函数:关闭一个已经打开的文件
int close(int fd)
参数
fd:打开文件所得到对应的文件描述符
错误处理函数:与errno相关,输出打开文件错误信息。
printf("xxx error: %d\n",errno);
char *strerror(int errnum);
printf("xxx error: %s\n",strerror(errno));
viod perror(const char *s);
perror("open error");
read函数:从打开的设备或文件中读取数据,读取的数据保存在缓冲区中,这个读写位置记在内核中,使用C标准的I/O库时的读写位置是用户空间的I/O缓冲区中的位置。
ssize_t read(int fd,void *buf,size_t count);
参数
fd:打开文件所得到对应的文件描述符
buf:存数据的缓冲区
buf:缓冲区大小
返回值
0:读到文件末尾。
成功:>0读到的字节数。
失败:-1 设置 errno。
-1,并且errno = RAGIN 或 EWOULDBLOCK,说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。
write函数:从打开的设备或文件中读取数据,读取的数据保存在缓冲区中,这个读写位置记在内核中,使用C标准的I/O库时的读写位置是用户空间的I/O缓冲区中的位置。
ssize_t read(int fd,void *buf,size_t count);
参数
fd:打开文件所得到对应的文件描述符
buf:存数据的缓冲区
count:数据大小
返回值
成功:写入的字节数。
失败:-1 设置 errno。
fcntl函数:根据文件描述符来操作文件的特性。
int fcntl(int fd,int cmd);
参数
fd:打开文件所得到对应的文件描述符
cmd参数:F_GETFL(获取文件状态) F_SETFL(设置文件状态)
返回值
成功:返回特定命令的返回值。
失败:-1 设置 errno。
lseek函数:移动文件的读写位置。
off_t lseek(int fd,off_t offset,int whence);
参数
fd:打开文件所得到对应的文件描述符
offset:偏移量
whence:起始偏移位 SEEK_SET/SEEK_CUR/SEEK_END
返回值
成功:较起始偏移位置。
失败:-1 设置 errno。
应用场景
int ret = truncate(const char *pathname,off_t length);
stat/lstat函数:通过文件名获取文件信息,并保存在buf所指的结构体stat中(stat符号穿透,lstat不会)。
获取文件大小:buf.st_size
获取文件类型和权限:buf.st_mode
int stat(const char *path,struct stat *buf);
参数
path:文件路径
buf:(传出参数)存放文件属性。
返回值
成功:0。
失败:-1 设置 errno。
dup/dup2函数:复制一个现存的文件描述符。
int dup(int oldfd);
int dup2(int oldfd,int newfd);
参数
oldfd:已有文件描述符
newfd:新文件描述符。
返回值
成功:新文件描述符。
失败:-1 设置 errno。
文件描述符:
阻塞、非阻塞:是设备文件、网络文件的属性。
传入参数
传出参数
传入传出参数
目录操作函数
DIR *opendir(char *name);
int closedir(DIR *dp);
struct dirent *readdir(DIR *dp);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。