学习完使用标准io库函数,进一步深入linux的内核实现系统的调用,本节主要学习文件io的相关函数。
标准IO与文件IO的区别
标准io是库函数,是系统调用的封装。
文件io是系统调用,是linux内核中的函数。
标准io有缓存,文件io无缓存
文件流指针、文件描述符
文件IO
1、文件的打开与关闭(open/close)
操作步骤为:
打开文件->操作文件 ->关闭文件
联系:在标准io中打开文件使用的是fopen函数:fopen(“str.txt”“w”);
打开文件:
open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件并且获得文件描述符
参数:
pathname:要打开的文件名
flags:标志位
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_APPEND 追加
O_ASYNC 异步IO
O_CREAT 文件不存在创建 //使用到该标识符需要带参数3mode,来限定穿件文件的权限。
O_TRUNC 文件存在截断(清0)
返回值:
成功返回文件描述符(很小的非负整数)
失败返回-1新生成的文件描述符总是为尚未被使用的最小的非负整数
0: stdin
1: stdout
2: stderr
关闭文件:
close
int close(int fd);
功能:
将fd对应的文件描述符关闭
2、读写函数( read/write )
1.write
ssize_t write(int fd, const void *buf, size_t count);
功能:
向fd对应的文件中写入buf指向的count个字节
参数:
fd:文件描述符
buf:写入数据空间首地址
count:写入的字节数
返回值:
成功返回实际写入字节数
失败返回-12.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:想要读取数据字节数
返回值:
成功返回实际读到的字节数
失败返回-1
读到文件末尾返回0
知识补充:关于linux文件权限的说明
rwxrwxrwx
每组rwx分别表示创建人员的权限,同组人员的权限,其他人员的权限
作业:
1.利用read和write实现文件内容的拷贝(将src.jpg中的内容拷贝到dst.jpg文件中)
作业分析:函数写的过于死板,缺乏扩展性。
更改:
2.1028:人口普查
https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805293282607104?type=7&page=0