gpt4 book ai didi

c - 为什么在 UNIX 中只分配最低的可用文件描述符?

转载 作者:IT王子 更新时间:2023-10-29 01:06:13 25 4
gpt4 key购买 nike

在一次群聊中我对这个问题很感兴趣-

为什么 UNIX 标准要求保证只为进程分配最低的可用文件描述符?

我唯一能想到的答案是可扩展性。由于我们总是选择最少可用的描述符,因此描述符位图的已使用部分大部分是密集的,因此数组的增长速度较慢。

我只是想知道是否还有其他我不知道的原因。

另外,如果我们知道给定的描述符比另一个大/小,我们是否有一些场景可以得出逻辑结论(我们可以在程序中使用的结论)。我的理解虽然不允许使用这种技术,因为它不能保证描述符的年龄

最佳答案

原因有很多,但最终的原因是“因为一直以来都是这样做的”。

  1. 很容易跟踪文件描述符列表以找到第一个未使用的描述符。
  2. 它是确定的。这在 dup2() 之前很重要通话可用。

传统上,进程的文件描述符表是固定大小的,而且非常小(第 7 版 Unix 中为 20,IIRC)。

确定性机制对于 shell 中的 I/O 重定向至关重要。例如:

cat file1 file2 > file3

shell 需要将标准输出重定向到 file3 .因此,它可以使用:

close(1);  // Standard output
if (open("file3", O_WRONLY|O_CREAT, 0666) != 1)
…error creating file…

它会知道因为标准输入已经打开(文件描述符 0),open()将返回文件描述符 1。

如今,您无法从文件描述符值中推断出任何信息。我可以写:

int fd1 = open(filename, flags, mode);
int fd2 = dup2(fd1, 1024);
close(fd1);

事实上 fd2 (应该)包含 1024 不会告诉您与文件描述符 3(下一个 open() 调用可能会返回)相比,它的打开顺序。

关于c - 为什么在 UNIX 中只分配最低的可用文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557357/

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