我对lseek中使用的文件位置的概念感到困惑。 这个文件的位置是维护在inode级还是一个简单的variables,对于在同一个文件上工作的不同进程可能有不同的值?
根据lseek文档 ,文件位置与文件描述符所指向的打开文件相关联,即通过打开提交给您的文件。 由于像dup
和fork
这样的函数,多个描述符可以指向单个描述 ,但是它是保存位置游标的描述。
想一想:如果它与inode相关联,那么你将无法以合理的方式访问文件的多个进程,因为所有通过一个进程访问该文件都会影响其他进程。
因此,单个进程可以跟踪许多不同的文件位置,因为它具有给定文件的文件描述符。
这不是一个'inode',而是内核的FILEHANDLE。
Inode是磁盘上* nix特定文件系统的文件描述的一部分。 例如,FAT32没有inode,但是受到Linux的支持。
要知道文件描述符和打开文件之间的关系,我们需要检查三个数据结构。
对于每个进程,内核维护一个打开的文件描述符表。 此表中的每个条目都记录有关单个文件描述符的信息
内核维护一个包含所有打开文件描述符的系统表。 打开的文件描述存储与打开的文件有关的所有信息,包括:
参考文献 – Michael Kerrisk的“Linux编程接口”