打开文件表、文件描述符、打开的文件句柄以及i-node之间的关系

概念:
1.进程级的文件描述表,(open file description)就是我们常常在代码中使用的int fd变量,由open函数返回。

2.系统级的打开文件表,这是内核对所有打开文件维护的一个描述表格,将表格中的每一项称为打开文件句柄。它存储了

一个打开文件的所有相关信息,例如当前文件的偏移量,访问模式,状态等等。

3.i-node信息,文件系统中的每个文件都有自己的i-node信息,它包含文件类型,访问权限,文件属性等等。

下面用一个表格表示他们内容
打开文件表、文件描述符、打开的文件句柄以及i-node之间的关系_第1张图片
下面描述他们三者之间的关系
打开文件表、文件描述符、打开的文件句柄以及i-node之间的关系_第2张图片
在进程A中,文件描述符1和30都指向了同一个打开的文件句柄(#23),这可能是该进程多次对文件执行打开操作?
(测试:同进程,前后两次对同文件同样打开,设置不同偏移量—>写入结果不同,有可能是打开文件句柄不同)

进程A中的文件描述符2和进程B的文件描述符2都指向了同一个打开的文件句柄(#73),这种情况有几种可能,
1.进程A和进程B可能是父子进程关系;
2.进程A和进程B打开了同一个文件,且文件描述符相同(低概率事件=_=)
3.A、B中某个进程通过UNIX域套接字将一个打开的文件描述符传递给另一个进程。

进程A的描述符0和进程B的描述符3分别指向不同的打开文件句柄,但这些句柄均指向i-node表的相同条目(#1936),换言之,指向同一个文件。发生这种情况是因为每个进程各自对同一个文件发起了打开请求。同一个进程两次打开同一个文件,也会发生类似情况。

所以通过以上总结,可以得出以下结论:
1.每个文件描述符会与每个文件相对应
2.不同的文件描述符也有可能指向同一个文件
3.相同的文件可以被不同进程打开。同一个进程可以多次打开同一个文件。

你可能感兴趣的:(Linux内核)