C中的文件描述符分配
创建套接字或者在C中打开/创建文件时,分配给套接字/文件的文件描述符是否保证是可用的最低值描述符?在这方面,C规范对文件描述符分配有何看法?
解决方案
回答
我认为我们不会在C规范中找到它,更可能是OS规范。我在Linux上的经验是,它始终是最低的。
回答
我将用另一个问题来反驳为什么这很重要?我们不应该将文件描述符与任何东西进行比较(除非检查stdin / stdout / stderr)或者对其进行数学运算。只要它适合int(并保证适用),这就是我们真正需要知道的全部。
回答
史蒂夫M是对的; C没有套接字的概念,它的文件I / O函数使用[指向] FILE对象的指针,而不是描述符。
回答
它不能保证是最低的,并且依赖于实现(1)。但是,通常,分配打开文件描述符的例程使用的方法可以使我们第一次打开。可能是在释放了几个较低的字节之后,立即为我们提供了比我们预期的更高的描述符。
但是,我能想到的唯一原因是选择功能,如果将其传递给我们需要检查的最高文件描述符,则会加快选择速度。
(1)请注意,遵循IEEE标准的那些实现确实保证了文件的最低未使用描述符,但这可能不适用于套接字。并非每个实现都遵循open()的IEEE标准,因此,如果我们正在编写可移植软件,则最好不要依赖它。
回答
@aib的open(),close(),lseek(),read(),write()都使用文件描述符。我几乎从未将流用于I / O。
@Kyle很重要,因为select()这样的语句。知道最高的描述符可以提高性能。
回答
C规范说它取决于实现。如果我们正在查看Unix的实现,则open(2)的手册页显示:"成功调用返回的文件描述符将是当前未为该进程打开的编号最小的文件描述符。"
如果我们尝试将特定文件添加到特定描述符,这将有所帮助。假设我们要将stderr重定向到/ dev / null。就像是
close(2); open(" / dev / null",O_WRONLY);
应该这样做。当然,我们应该捕获open返回的fd并确保其为2.