每个inode文件的位置?

我对lseek中使用的文件位置的概念感到困惑。 这个文件的位置是维护在inode级还是一个简单的variables,对于在同一个文件上工作的不同进程可能有不同的值?

根据lseek文档 ,文件位置与文件描述符所指向的打开文件相关联,即通过打开提交给您的文件。 由于像dupfork这样的函数,多个描述符可以指向单个描述 ,但是它是保存位置游标的描述。

想一想:如果它与inode相关联,那么你将无法以合理的方式访问文件的多个进程,因为所有通过一个进程访问该文件都会影响其他进程。

因此,单个进程可以跟踪许多不同的文件位置,因为它具有给定文件的文件描述符。

这不是一个'inode',而是内核的FILEHANDLE。

Inode是磁盘上* nix特定文件系统的文件描述的一部分。 例如,FAT32没有inode,但是受到Linux的支持。

要知道文件描述符和打开文件之间的关系,我们需要检查三个数据结构。

  • 每进程文件描述符表
  • 打开文件描述符的系统宽表
  • 文件系统i-node表。

对于每个进程,内核维护一个打开的文件描述符表。 此表中的每个条目都记录有关单个文件描述符的信息

  • 一组控制文件描述符操作的标志。
  • 对打开的文件描述的引用

内核维护一个包含所有打开文件描述符的系统表。 打开的文件描述存储与打开的文件有关的所有信息,包括:

  • 当前的文件偏移量(由read()和write()更新,或者使用lseek()明确修改)
  • 打开文件时指定的状态标志。
  • 文件访问模式(只读,只写或读写,在open()中指定)
  • 设置与信号驱动的I / O有关
  • 对此文件的i节点对象的引用。

参考文献 – Michael Kerrisk的“Linux编程接口”