gpt4 book ai didi

linux - Linux中存储打开文件数的数据结构

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:46 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

关于linux - Linux中存储打开文件数的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35541636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com