打开文件表的结构如何?

打开文件表的结构如何?

我开始阅读《Linux 系统编程》第二版,我对文件表(即“每个进程的打开文件列表”)感到好奇。文件表是否像 SQL db 中的表一样,使用 fds 作为主键?如果是这样,这是否意味着条目重复,还是将其拆分为单独的表并进行规范化?

或者因为我们正在处理直接的 C/汇编,所以它的工作方式是否完全不同?如果是的话,使用什么数据结构?

该子系统在源代码中的何处定义?我这样做的大部分原因是为了更好地理解 C 和 Linux。如果我知道在哪里可以找到它,那会给我一个更好的主意。

答案1

由于这是 C,“表”可能是“结构数组”的缩写。

您可能想阅读《理解Linux内核》或者《Linux内核开发》

或者采取困难的方式并阅读源代码;好的起点可能是:
include/linux/fdtable.h
include/linux/fs.h

答案2

每个进程打开文件的列表 表示每个进程表示为task_struct对象有一个成员指向files_struct打开文件信息的对象,以及files_struct保留fdtable 其中有 :

  • 打开文件描述符的数组(在open_fds成员中)
  • 内部数组struct file对象(在fds成员中)保存有关低级块的有用信息,例如struct inode

为了更好地理解fdtable,您可以阅读fdget()或同一 C 文件中的其他类似函数,在给定的文件描述符(用户应用程序中的整数)struct file中查找正确的对象,许多文件 I/O 系统调用调用(例如、、 或 )fdtablefdget()fchown()preadv()ftruncate()

所有链接都是6.0版本的内核代码

相关内容