前面讲了库的IO接口,这节讲系统调用IO接口
原文链接:https://blog.csdn.net/DX_Jone/article/details/97388969
open
int open (const char* path,int flags,mode_t mode)
- path 文件名
- flags 选项标志
其中分为必选参数和可选参数;
1.必选参数:
O_RDONLY(以只读方式打开文件) RD
O_WRONLY(以只写方式打开文件) WR
O_RDWR(以读写方式打开文件) RD
只能选择其一,不能全部使用;
2.可选参数:
O_CREAT(若文件存在则打开,否则创建新文件)
O_EXCL (与O_CREAT同时使用,若文件存在则报错;不存在则创建)
O_TRUNC(打开文件的同时清空文件)
O_APPEND(写数据的时候总是写到文件末尾)
- 返回值 成功:返回文件描述符 失败: 返回 - 1;
read和write
read接口: ssize_t read(int fd, void *buf, size_t count);
功能:从fd文件中读取count长度的数据,放到buf中;
参数:
- fd:文件描述符;
- buf:读出数据的缓冲区,文件读取后的存储位置;
- count:读取的字节数(是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移)
返回值:成功:返回实际读取到的字节数; 失败:-1;
write接口: ssize_t write(int fd, const void *buf, size_t count);
参数:
- fd:文件描述符;
- buf:写入数据
- count:是每次写入的字节数;
返回值:成功:返回实际写入的字节数; 失败:-1;
lseek:跳转读写位置
off_t lseek(int fd, off_t offset, int whence);
功能:跳转到fd文件的读写位置到指定处,和fseek一样只是文件流指针变为文件描述符
关于库和系统调用的关系
对于 fopen,fclose,fread,fwrite,fget 都是C标准库当中的函数,我们称之为库函数(lib);
而open,close,read,write,lseek都属于系统提供的接口,称之为系统调用接口;
库函数是对系统调用接口的一种封装;管理者并不需要直接与被管理者交互进行管理,而是通过对被管理者进行描述,并且将描述信息得当组织起来进行管理。