一尘不染

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

linux

我有一个存储在变量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?


阅读 311

收藏
2020-06-02

共1个答案

一尘不染

fcntl(fd, F_GETFD)是检查fd是否有效的打开文件描述符的最便宜的规范方法。如果需要大量检查,则使用poll零超时并将events成员设置为0并POLLNVALrevents返回后进行检入更为有效。

话虽如此,“检查给定资源句柄是否仍然有效”操作几乎总是根本上是不正确的。释放资源句柄后(例如fd为closed),可以将其值重新分配给您分配的下一个此类资源。如果还有其他可用的引用,它们将错误地在新资源上而不是旧资源上运行。因此,真正的答案可能是:如果您尚不了解程序的逻辑,则有一些基本的基本逻辑错误需要修复。

2020-06-02