【问题标题】:Data structure to store number of open files in LinuxLinux中存储打开文件数的数据结构
【发布时间】:2016-06-03 04:05:51
【问题描述】:

我正在尝试了解 Linux 数据结构及其管理打开文件的方式。据我了解,每个task_struct 都指向files_struct,其中包含所有打开文件描述符的列表。每个这样的条目都是指向struct file 的指针。该结构具有操作任何特定文件所需的所有信息。

struct file 的成员f_count 是否表示同一文件的打开实例数?如果是这样,内核会为每个打开的文件实例创建一个file struct 吗?

示例:/users/soverflow/test.txt 如果进程 P1、P1 和 P3 打开同一个文件“/users/soverflow/test.txt”,内核是创建对应于 P1、P2 和 P3 的“三个”file struct 还是只创建一个file struct 和所有进程指向相同的结构?

如果所有进程都指向同一个结构,它们如何知道当前文件位置?

【问题讨论】:

    标签: linux linux-kernel filesystems kernel linux-device-driver


    【解决方案1】:

    file 结构跟踪打开文件的单个实例。在您描述的场景中,每个进程都将获得自己的结构副本。结构的f_count 成员用于跟踪引用同一文件实例的多个文件描述符。而f_pos 用于跟踪每个实例的当前文件位置。

    f_count 可以增加dup(2) 以及fork(2)dup 创建另一个唯一的文件描述符,它引用完全相同的打开文件实例。同样,当您的进程调用fork 时,父进程和子进程都引用了相同的文件实例。引用同一结构file 的多个文件描述符共享它跟踪的文件位置。

    示例:
    如果您的进程在同一个文件上调用open(2) 两次,它将获得两个文件描述符,每个文件描述符都引用结构file 的一个单独实例(每个f_count 设置为1)。但是如果它调用一次open,然后使用返回的文件描述符调用dup,它仍然会有两个文件描述符,但现在每个都引用同一个结构filef_count 设置为2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多