管道/FIFO 的字节偏移

管道/FIFO 的字节偏移

为什么管道/FIFO 的字节偏移量保存在 inode 中而不是像常规文件那样保存在文件表中?

我在第 113 页读到了这一行Unix操作系统的设计(1986) 莫里斯·巴赫。

在 inode 中维护字节偏移量可以方便地通过 FIFO 访问管道数据,并且与在文件表中维护偏移量的常规文件不同。

答案1

请注意,该书描述了 30 年前的 AT&T Unix 系统内部结构。您不能假设现代 Unix 和类 Unix 系统中的操作都是相同的。

在任何情况下,无论内部如何实现管道,而对于常规文件或其他可查找文件,字节偏移量都是属于打开文件描述(我想这就是你的书所说的文件表条目)。也就是说,独立打开同一文件的两个进程将在文件中各自拥有自己的偏移量。一个进程从文件中读取数据不会影响另一进程的偏移量。

对于管道,在管道上打开的所有进程的所有文件描述符共享相同的偏移量。或者换句话说,偏移量属于管道。因此,将其存储在 inode 中而不是将其复制到所有打开的文件描述中是有意义的。

相关内容