此为牛客网Linux C++课程1.19课程笔记。
1. 文件描述符表
如图,我们知道每个进程都有其虚拟地址空间(0~4G),其中3 ~ 4G部分为内核区。进程的进程控制块保存就在内核区,而PCB中维护一个打开文件描述符表,每个进程都有这样一张表,表在实现上是一个指针数组,数组中每个元素都是一个指向file类型的指针,也就指向一个打开的文件。
而文件描述符就是该文件描述符表的的索引值,也就是序号,每当打开一个新文件,则占用一个文件描述符,而且是空闲的最小的一个文件描述符。
文件描述符表的前三项是固定的,分别是标准输入、标准输出和标准错误,对应的文件是当前终端。
2. 如何通过文件描述符找到文件
首先用文件描述符找到文件描述符表的文件指针,用这个文件指针去系统维护的打开文件表中找i-node,通过i-node最后找到硬盘中文件的最终位置,具体可参考:
https://blog.csdn.net/qq_28114615/article/details/94590598
http://www.itqiankun.com/article/file-fd