内核使用3种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程的影响。
(1) 每个进程在进程表中都有一个纪录项,纪录项中包含一张打开文件描述符表,每个文件描述符各占一项,与每个文件描述符相关的是
a. 文件描述符标志
b. 指向一个文件表项的指针
(2) 内核为所有打开文件维护一张文件表项,每个文件表项包含:
a. 文件状态(读 写 同步 非阻塞等)
b. 当前文件偏移量
c. 指向改文件V节点(i节点)的指针
(3) 没打开一个文件或设备,都有一个V节点结构,V节点包含了文件类型和对此文件进行操作函数的指针,对于大多数文件,v节点还包含了文件的i节点索引节点,这些信息是在打开文件时从磁盘读入内存的,所以,文件的所有文件信息都是随时可用的。i节点包含了文件的所有者,文件长度,指向文件实际数据块在磁盘上位置的指针等。
以上总结大部分来自 《APUE》
用图来表示如下:
讲的比较好的博客: