如何检查存储在变量中的给定文件描述符是否仍然有效?
作者:互联网
我有一个文件描述符存储在变量say 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是有效打开文件描述符的规范最便宜的方法.如果需要批量检查,使用零超时轮询并将events成员设置为0并在返回后检查POLLNVAL更有效.
话虽如此,“检查给定资源句柄是否仍然有效”的操作几乎总是根本不正确.在释放资源句柄(例如,关闭fd)之后,可以将其值重新分配给您分配的下一个此类资源.如果存在可能使用的任何剩余引用,则它们将错误地操作新资源而不是旧资源.因此,真正的答案可能是:如果您还不了解程序的逻辑,则会出现需要修复的主要基本逻辑错误.
标签:c-3,linux,gcc,file-descriptor 来源: https://codeday.me/bug/20190925/1817734.html