Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道C中下一个可用的文件描述符?_C_File Descriptor - Fatal编程技术网

如何知道C中下一个可用的文件描述符?

如何知道C中下一个可用的文件描述符?,c,file-descriptor,C,File Descriptor,在C中调用类似于open的函数将返回下一个可用的文件描述符并用完它。有没有办法简单地询问我的系统下一个免费的fd实际上是什么?i、 当你问“下一个”是什么时,另一个组件(库、线程等)可能会立即抓住它并使用它,因此它将不再是免费的 关于下一个未使用描述符的信息完全没有价值,因此不可用。这是错误的。文件描述符表是私有的,每个进程(2)。只有进程内的操作才能影响下一个返回的文件描述符。(2) -一些聪明的操作系统,如plan9和Simulator,允许两个进程共享一个fd表,而不是按照UNIX std

在C中调用类似于
open
的函数将返回下一个可用的文件描述符并用完它。有没有办法简单地询问我的系统下一个免费的
fd
实际上是什么?i、 当你问“下一个”是什么时,另一个组件(库、线程等)可能会立即抓住它并使用它,因此它将不再是免费的


关于下一个未使用描述符的信息完全没有价值,因此不可用。

这是错误的。文件描述符表是私有的,每个进程(2)。只有进程内的操作才能影响下一个返回的文件描述符。(2) -一些聪明的操作系统,如plan9和Simulator,允许两个进程共享一个fd表,而不是按照UNIX std@mevets提供克隆的fd表。是的,但是库可以在您不知道的情况下使用文件描述符,例如进行DNS查找;当然还有其他的,所以它不是应用程序100%控制的。它们是每个进程的,这当然是正确的。您可以如何利用这些信息?XY问题。你(可能)不想知道下一个FD,你只是认为你知道。。。您认为可以使用下一个FD来解决的实际问题是什么?我仍然不知道这有多有用,但是您可以通过从0运行到某个最大值并调用幂等运算(可能是
ftell(FD,0,SEEK_CUR)
)来模拟这一点,并查看错误代码,告诉您文件描述符是否正在使用。这是一个非常弱的方法,它完全会引起竞争条件,但如果必须这样做,这可能很接近。我仍然不清楚为什么需要提前知道
open
将提供什么样的fd。当您准备好使用它时,您可以通过调用
open
或其他几个函数中的一个来发现。@SteveFriedl-使用查询器操作
fstat()
fcntl()
是发现文件描述符是否打开的好方法。