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