其他分享
首页 > 其他分享> > 如何检查存储在变量中的给定文件描述符是否仍然有效?

如何检查存储在变量中的给定文件描述符是否仍然有效?

作者:互联网

我有一个文件描述符存储在变量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