unix/linux 是否维护所有空闲文件描述符的列表?

unix/linux 是否维护所有空闲文件描述符的列表?

我正在阅读 Robert Love 的《Linux 系统编程》,并试图理解文件描述符的概念。

他提到

文件描述符从 0 开始,一直到比该最大值小 1。默认情况下,最大值为 1,024

例如,我分别使用文件描述符 500 和 501 打开两个文件。

现在,如果文件描述符为 500 的文件被关闭,是否意味着下一个要分配的 fd 将是 502? 500能重复使用吗?如果是这样,它怎么能做到这一点,内核是否维护所有关闭的文件描述符?

答案1

Linux 与任何类 Unix 系统一样,使用由内核维护的文件分配器表。 open 创建一个描述符,重用最低的关闭文件描述符或创建一个新条目。 close 设置该条目在表中关闭。

答案2

Linux 手册页open(2)指出

成功调用返回的文件描述符将是当前未为进程打开的最小编号的文件描述符。

因此,如果您只打开 500 和 501,则您得到的下一个是 0。通常,您当然会有 0 ( stdin)、1 ( stdout) 和 2 ( stderr) 指向一些合理的内容,或者/dev/null如果您是守护进程。

相关内容