C中的文件描述符分配

时间:2008-09-09 11:18:59

标签: c file-descriptor

在C中创建套接字或打开/创建文件时,分配给套接字/文件的文件描述符是否保证是可用的最低值描述符?如果有的话,C规范在这方面对文件描述符分配有什么看法?

6 个答案:

答案 0 :(得分:5)

不能保证最低,并且依赖于实现(1)。但是,一般情况下,分配打开文件描述符的例程使用的方法是第一次打开。可能是在几个较低的自由之后立即释放,留下比你想象的更高的描述符。

我能想到的唯一理由就是选择函数,如果你传递了需要检查的最高文件描述符,它就会加速。

(1)请注意,遵循IEEE标准的那些实现确保文件的最低未使用描述符,但这可能不适用于套接字。并非每个实现都遵循open()的IEEE标准,因此如果您正在编写可移植软件,最好不要依赖它。

答案 1 :(得分:4)

我认为你不会在C规范中找到它,更可能是你的操作系统规范。我在Linux方面的经验是它总是最低的。

答案 2 :(得分:2)

我会用另一个问题来解决这个问题 - 为什么这很重要?您不应该将文件描述符与任何内容进行比较(除非检查stdin / stdout / stderr)或使用它进行数学运算。只要它适合int(并保证),你就是真正需要知道的。

答案 3 :(得分:0)

史蒂夫M是对的; C没有套接字的概念,它的文件I / O函数使用[指向一个] FILE对象的指针,而不是描述符。

答案 4 :(得分:0)

@aib open(),close(),lseek(),read(),write()都使用文件描述符。我几乎没有使用流来进行I / O.

@Kyle因为像select()这样的语句很重要。了解最高描述符可以提高性能。

答案 5 :(得分:0)

C规范说它依赖于实现。如果您正在查看Unix实现,open(2)的手册页说“成功调用返回的文件描述符将是当前未为该进程打开的编号最小的文件描述符。”

如果您尝试将特定文件附加到特定描述符,这会有所帮助。假设您要将stderr重定向到/ dev / null。像

这样的东西

靠近(2); open(“/ dev / null”,O_WRONLY);

应该这样做。当然,你应该捕获open返回的fd并确保它是2。