linux文件描述符和打开文件之间的关系

要理解文件描述符和打开文件之间的关系,了解内核维护的一下三个数据结构是很有必要的:

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

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

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

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

linux文件描述符和打开文件之间的关系

总结:1.同一个进程两次调用open打开同一个文件或者两个进程打开同一个文件,它们的fd会指向不同的文件句柄,i-node指针会指向同一个i-node,因为它们打开的是同一个文件。它们不会共用文件偏移量等句柄信息。

2.如果一个进程fork出另一个进程,两个进程的fd会指向相同的文件句柄,它们会共享文件偏移量等句柄信息。

3.同一个进程中的两个不同的fd可能指向同一个句柄,有可能是使用dup()复制一个fd。