C库IO函数
1、常见的C库IO函数有:
fopen、fclose、fread、fwrite、fgets、fputs、fscanf、fprintf、fseek、fgetc、fputc、flush等。
2、原理
其中,与linux系统函数不同的是:
- linux系统函数没有这个缓冲区,它的缓冲区是由用户提供的。
系统IO函数
1、read 函数
- 调用时把文件
fd
中的数据读取到count
大小的缓冲区buffer
中,返回实际读取到的字节数ssize_t
- 返回
0
代表文件读完了;返回-1
代表读文件失败,设置errno
2、write 函数
- 调用时把
count
大小的缓冲区buffer
中的数据写到文件fd
中,返回实际写入的字节数ssize_t
文件相关函数
1、open 函数
int fd = open("File.txt", O_RDWR);
,打开文件(读写权限)int fd = open("newFile.txt", O_RDWR | O_CREAT, 0777);
,创建新文件O_EXCL
和O_CREAT
一起使用,可以判断文件是否存在,文件存在,则返回-1
O_TRUNC
,将文件截断为0
其中,O_CREAT给定的权限 和 本地的掩码(
$umask
查看)取反
作 与运算 得到的才是文件的实际权限
$ umask 掩码值
,修改掩码
- 配合返回错误码errno的代码通常为:
if (fd == -1) { perror(“open file”); exit(1); }
2、lseek 函数
int ret = lseek(fd, 0, SEEK_END);
,获取文件的长度int ret = lseek(fd, 2000, SEEK_END);
,从end进行文件拓展,需要额外写点东西进去(空洞)才能完成拓展- 设置文件的位置指针
3、stat/fstat 函数
int ret = stat("path", &st);
,其中这里的st是结构体stat
。获取文件信息(大小、硬链接数、文件类型、inode等)
4、access 函数
- 测试指定文件是否拥有某种权限(R_OK、W_OK、X_OK、F_OK)
5、truncate 函数
- 文件拓展相应的长度(不用额外的写操作)
6、unlink 函数
- 创建临时文件,在不使用时自动删除(open --> unlink --> write–>close)
7、dup和dup2 函数
- dup2 关掉 后一个参数指定的文件,把前一个参数覆盖到后一个文件。此时两个fd都与第一个参数指定的文件相关联
8、fcntl 函数
- 改变已经打开的文件的属性(获取
F_GETFL
或设置F_SETFL
)
int flag = fcntl(fd, F_GETFL, 0);
flag |= O_APPEND;
fcntl(fd, F_SETFL, flag);