我有一个存储在变量var中的文件描述符。如何在以后的阶段检查该描述符是否有效?
fdvar1= open(.....); fdvar2 = fdvar1; // Please ignore the bad design .... // lots of loops , conditionals and threads. It can call close(fdvar2) also. .... if(CheckValid(fdvar1)) // How can I do this check ? write(fdvar1, ....);
现在,我想检查var1(仍保留打开的描述符)是否仍然有效。是否有任何API?
fcntl(fd, F_GETFD)是检查fd是否有效的打开文件描述符的最便宜的规范方法。如果需要大量检查,则使用poll零超时并将events成员设置为0并POLLNVAL在revents返回后进行检入更为有效。
fcntl(fd, F_GETFD)
fd
poll
events
POLLNVAL
revents
话虽如此,“检查给定资源句柄是否仍然有效”操作几乎总是根本上是不正确的。释放资源句柄后(例如fd为closed),可以将其值重新分配给您分配的下一个此类资源。如果还有其他可用的引用,它们将错误地在新资源上而不是旧资源上运行。因此,真正的答案可能是:如果您尚不了解程序的逻辑,则有一些基本的基本逻辑错误需要修复。
close