内核用于I/O的数据结构
一个进程除了指令、数据之外还会有一些信息用于记录进程的状态(这是程序所没有的)。在这些记录中就有一个表称之为文件描述表,而文件描述符就是这张文件描述表的索引。
下面是一张文件描述符表的示意图,除了文件描述符表之外还画出了其它与之相关的信息:
文件描述表
文件描述表是进程记录表项中的一部分,文件描述表的每一条记录又有文件描述符标志和文件指针构成。
文件描述符标志记录着文件描述符的状态,此篇笔记不做记录。而文件指针指向另一张称为文件表项的表。
文件表项
文件表项的组成如最前面的图所示。
- 文件状态标志:记录着文件描述符所对应的文件的状态,如只读、只写、读写等等。
- 当前文件偏移量:即将要进行读写操作的位置,具体查看lseek的系统调用。
- v节点指针:v节点指针又指向另一张称为v节点表项的表。
v节点表项
每一个打开了的文件(或者说有对应文件描述符的文件)都会有一个v节点结构。称为v节点的结构包含了文件类型以及对此文件进行各种操作函数的指针。最后v节点结构还包含了一个索引节点称之为i节点。
i节点包含了文件的所有者、文件长度、指向文件实际数据块在磁盘上所在位置的指针等。