我对 lseek 中使用的文件位置的概念感到困惑。这个文件位置是保持在 inode 级别还是一个简单的变量,对于在同一个文件上工作的不同进程可能具有不同的值?
问问题
487 次
3 回答
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 回答