[TOC]
文件描述符
每个进程控制块都有一个文件描述符表,可以把它看作一个数组,里面存储指向以打开文件地址的指针,这个数组的下角标就是文件描述符。每次open都会把新打开的文件地址存储到表中的某个空行,并返回下角标作为文件描述符。
其中0~2为特殊的文件描述符,分别为标准输入,标准输出,标准错误输出,这三个文件描述符在进程初始时自动打开,其中标准输出就是printf输出的对象
关于I/O的系统调用函数
open()
#include <sys/types.h> |
相比fopen()处于系统的更低层,可以对文件进行更基础的操作,但是也失去了一些库函数的帮助
参数分别是被打开文件路径、进行的操作、创建文件时的使用权限(可省略)
它的返回值为文件描述符
dup2()
#include <unistd.h> |
该函数可以使newfd指向oldfd指向的文件
dup()
大专栏 沉下心学操作系统(4)关于文件lass="code">#include <unistd.h> |
该函数会选择最小的空闲文件描述符让它指向oldfd,并返回新的指向该文件的描述符
read()、write()
#include <unistd.h> |
参数分别为文件描述符,写入/读入的内容,写入/读入的最大长度。若调用成功返回实际读写的长度,否则返回-1
lseek()
#include <sys/types.h> |
参数分别为文件描述符,移动的长度,移动目标的起点。whence有3个常用值,SEEK_SET,SEEK_END,SEEK_CUR,分别代表开头,结尾和当前位置
fsync()
int fsync(int fd); |
由于向磁盘写入数据很花时间,因此内核为了提高效率会推迟写入数据。而fsync()可以同步内存中所有已修改的文件写入到储存设备
close()
int close(int fd); |
用于关掉文件,fd为文件描述符