3

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

4

3 回答 3

6

根据lseek 文档,文件位置与文件描述符指向的打开文件相关联,即由open交给您的东西。由于和之类的功能dupfork多个描述符可以指向单个描述,但它是保存位置光标的描述。

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

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

于 2012-12-21T19:34:36.707 回答
1

它不是“inode”,而是内核中的 FILEHANDLE。

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

于 2012-12-21T19:35:26.913 回答
0

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

  • 每个进程的文件描述符表
  • 系统范围的打开文件描述符表
  • 文件系统 i 节点表。

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

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

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

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

参考 - 第 94 页,Michael Kerrisk 的 Linux 编程接口

于 2012-12-24T13:57:51.150 回答