系统文件I/O接口

系统文件I/O接口

文件IO是指对文件进行数据输入与数据输出,我们程序的本质就是对输入的数据进行处理然后输出,可是数据是在文件中的,在linux下一切皆文件,所以程序就是要实现对文件的读写操作
可是我们程序不能直接去操作文件,这个时候就需要系统提供调用接口来供我们使用从而根据系统接口处理读写数据。
我们在C语言中学习的几个库函数fopen,fclose,fseek等底层也是调用系统接口实现,例如fopen调用open函数,因为库函数就是系统函数的一层封装,他们是上下级调用关系

文件描述符

在系统调用中我们需要提供一个媒介来传递文件信息与程序,我们一般用一个整数来作为这个媒介,每当我们成功打开一个文件的时候就会返回一个文件描述符来供read等使用,这个整数一般是调用open或者creat函数返回的。这个数字是进程pcb中files_structs这个结构体中文件描述信息的结构体数组的下标
刚刚说了了文件描述符是一个整数,在linux下一般是0到1023之间。我们创建一个进程直接打开三个文件,分别是标准输入标准输出标准错误,在库函数中有三个文件流指针指向这三个文件,分别是stdin,stdout,stderr。
在文件操作符中0对应的是标准输入文件,1对应的是标准输出文件,2对应的是标准错误文件,所以我们不用打开文件可以直接用文件操作符使用,不过由于平台的移植性与辨识度等原因,我们一般用STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO这三个宏来表示这三个文件的文件描述符。
介绍完了io的基础与文件操作符等,我们接下来看看系统调用接口的函数。

open函数

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_CREAT 若文件已经存在直接打开,不存在就创建
O_EXCL 文件存在就报错
O_TRUNC 若文件存在就截断0
O_APPEND 追加
mode:若文件不存在需要创建的时候 用于创建制定的文件权限例如 777 664等
返回值:
成功: 非负整数(文件描述符)后续操作通过文件操作符完成
失败: -1

read函数

read是在文件描述符上执行读操作的函数
ssize_t read(int fd, void *buf, size_t count);
参数解释:
fd是文件描述符,由open函数产生
buf表示要放置的缓冲区位置
count表示要读取的字节数
返回值:
成功返回读取到的字节数,失败返回-1

write函数

ssize_t write(int fd, const void *buf, size_t count)
write是在一个文件操作符上进行写操作的函数
参数介绍:
fd是文件描述符
buf是缓冲区起始位置
count是字节数
返回值成功返回字节数失败返回-1.

猜你喜欢

转载自blog.csdn.net/qq9116136/article/details/81912846