1. 概念
系统中(posix)定义的一组用于输入输出的函数接口,属于低级IO。
2. 特点
1. 没有缓冲机制,每次调用都 会引起系统调用
2. 围绕 文件描述符 进行操作,文件描述符是非负整数,依次分配
3. 文件IO默认打开 三个文件描述符:0(标准输入),1(标准输 出),2(标准错误)
4. 可以操作除目录文件外的任意类型文件
3. 函数
open close read write lseek
1. 打开文件 open
int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名
flags:打开文件的方式
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:创建
O_TRUNC:清空
O_APPEND:追加
返回值:成功:文件描述符
失败:-1
当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定 创建文件的权限(这并非 实际创建后的 文件权限,而需要下面操作)
创建出来的文件的实际权限为:指定权限值 & (~umask) //umask为文件权限掩码
1.1. 创建文件的关系 · 文件IO和标准IO
标准IO | 文件IO |
r | 只读O_RDONLY |
r+ | 可读可写,文件不存在报错O_RDWR |
w | 只写O_WRONLY|O_CREAT|O_TRUNC, 0666 |
w+ | 可读可写,文件不存在创建,存在清空O_RDWR|O_CREAT|O_TRUNC, 0666 |
a | 只写,不存在创建、存在追加 O_WRONLY|O_CREAT|O_APPEND, 0666 |
a+ | 可读可写,不存在创建、存在追加 O_RDWR|O_CREAT|O_APPEND, 0666 |
2. 关闭文件 fclose
int close(int fd);
功能:关闭文件
参数:fd:文件描述符
3. 读操作 read
ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取 指定个 字节的数据
参数:fd 文件描述符
buf 存放位置
count 期望的 字节 个数
返回值:
成功:实际读到的个数
返回-1:表示出错,并设置errno号
返回0:表示读到文件结尾
4. 写操作 write
ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个 字节 的数据。
参数:
fd 文件描述符
buf 要写的内容
count 期望值
返回值:
成功:实际写入数据的个数
失败: -1
5. 定位操作 lseek
off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:
fd:文件描述符
offset:偏移量
正数:向文件结尾位置移动
负数:向文件开始位置
whence:相对位置
SEEK_SET 开始位置
SEEK_CUR 当前位置
SEEK_END 结尾位置
返回值:
成功:文件的当前位置
失败:-1
// lseek 定位到EOF位置,即最大下标+1,即有效字符个数
off_t len = lseek(src, 0, SEEK_END);