文件描述符的指代是什么?

Kev*_*eid 5 file-descriptors terminology open-files

我的理解是文件描述符是一个整数,它是内核每个进程映射到open()ed 文件、管道、套接字等对象的关键。

“打开文件/套接字/管道/...”,文件描述符的指涉对象,是否有一个适当的、简短的和特定的名称?

将它们称为“文件”会导致与存储在文件系统中的未打开文件混淆。简单地引用文件描述符并不能充分描述语义(例如在进程之间复制整数是无用的)。

查阅The Open Group Base Specifications和我自己系统的联机帮助页,我得出这样的结论:文件描述符的所指对象是一个对象,当它具体是一个打开的文件时,它就是一个打开的文件。有比object更具体的术语吗?

cam*_*amh 8

真的没有更具体的术语。在传统的 Unix 中,文件描述符引用文件表中的条目,其中的条目称为文件,有时也称为打开文件。这是在特定的上下文中,因此虽然显然术语文件非常通用,但在文件表的上下文中,它特指打开的文件。

磁盘上的文件通常称为inode,尽管从技术上讲 inode 是文件的元数据部分。但是由于inode 和数据块之间是一对一的关系,所以对inode 的引用隐含地指的是它所指向的数据。更现代的文件系统可能支持诸如写时复制之类的功能,其中可以共享数据块,因此这并非普遍适用,但适用于传统 Unix。然而,考虑到术语filesystem,将其内容视为files是一个不小的飞跃。

当打开磁盘上的文件时,inode 也会作为核心 inode读入内存,并在inode table 中维护,但这是比您要求的更进一步的间接级别。

这导致术语上的冲突:磁盘上的文件(由 inode 引用)和打开的文件(由文件表中的条目引用)。

我建议“打开文件”或“文件表条目”都是对您要描述的内容的充分描述。

我找到的一个相当简洁的参考资料是:http : //www.hicom.net/~shchuang/Unix/unix4.html。形式 (Bach nn ) 的引用是对Maurice J. Bach所著的The Design Of The Unix Operating System一书引用。