踏入了阶段四
在 Linux 系统下,用于对文件操作的库函数叫做 文件 I/O
主要包括 open()/close()/read()/write() /lseek()相应的系统调用(准确说法是对系统调用的封装的库函数)
文件描述符
文件描述符(file descriptor)是一个非负整数
每个程序运行后,操作系统会默认打开三个文件 标准输入 标准输出 标准错误输出,文件描述符分别为 0 , 1 , 2
open函数
int open(const char *pathname, int flags, mode_t mode);
open函数的返回值就是打开该文件的fd
flags : 打开标志
O_RDONLY:只读方式打开文件
O_WRONLY:可写方式打开文件
O_RDWR:读写方式打开文件
O_CREAT:如果该文件不存在就创建一个新的文件
O_EXCL:如果使用O_CRATE时文件存在,open()报错
O_TRUNC:如果文件已经存在
O_APPEND: 以添加的方式打开文件
注意:比如我要以只写的方式打开文件,如果不存在则创建,如果文件存在则截短
mode :
指定创建新的文件的默认权限
像上文说到如果成功的话返回fd
errno 是 Linux 操作系统中用于存储错误编码的全局变量但是用编码来看不方便
错误信息打印主要使用 perror() 函数
1 | void perror(const char *s) |
close 函数
1 | int close(int fd); |
作用: close 函数用于关闭文件
成功 : 返回 0
失败 : 返回 -1
打开后用完记得要关闭.
read函数
ssize_t read(int fd, void *buf, size_t count);
参数buf是指定的缓冲区char buf[64]
返回值:
成功 : 返回实际读取的字节数
失败 : -1,并将错误编码设置到 errno 中
write函数
ssize_t write(int fd, const void *buf, size_t count);
返回值:
成功 : 返回实际读取的字节数
失败 : -1,并将错误编码设置到 errno 中
写入的话记得不要多写
lseek函数
当我们在open一个文件后write写入
读写操作通常开始于 cfo
off_t lseek(int fd, off_t offset, int whence);
返回值:
成功: 返回 0
失败 : 返回 -1,并设置 errno
函数参数
fd : 文件描述符
offset :偏移量,可以为正数或者负数
whence :偏移相对位置
SEEK_CUR : 相对于文件当前偏移
SEEK_SET : 相对于文件开始位置
SEEK_END : 相对于文件尾偏移
如果要把写入的东西读取出来要
lseek(fd,0,SEEK_SET);
练习 : 使用 Linux 文件 io 接口实现 文件复制
1 |
|