所有打开的文件通过文件描述符引用(非负整数)
当运行一个新程序时,系统为其打开三个文件描述符,stdin(0)、stdout(1)、stderr(2)。
函数
在unix中提供了
int open(path, flag) # 返回一个文件描述符
# python
os.open(file, flags[, mode])
int close(fd)
# python
os.close(fd)
off_t lseek(int fd, off_t offset, int whence)
# python
os.lseek(fd, pos, how)
ssize_t read(int fd, void* buf, ssize_t nbytes)
# python
os.read(fd, n)
os.write(fd, str)
缓冲区
unix文件
每个进程的文件描述符表
表中的每一项为:文件描述符+指向文件表项目的指针
内核为所有打开的文件的维持一张文件表
表中的每一项为:文件状态+文件偏移量+指向该文件v节点的指针
v节点
每个打开的文件都有一个v节点,包含了:文件类型+各种函数+i节点,i节点中包含了文件的所有者、文件长度、指向磁盘上所在位置的指针等。
v节点的目的是对多文件系统提供支持,它是与文件系统无关的
两个进程
两个进程打开同一个文件,它们各自有一个文件描述符表,内核为它们各自维持一张文件表,这些文件表项目中的v节点指针指向同一个v节点(打开的同一个文件)
这样,每个进程有它自己的文件偏移量