我有一个文件描述符存储在一个变量中,比如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(仍然保存打开的描述符)是否仍然有效.

推荐答案

fcntl(fd, F_GETFD)是判断fd是否是有效的打开文件描述符的最便宜的方法.如果你需要批量判断很多,使用poll,超时时间为零,events成员设置为0,在返回后判断revents中的POLLNVAL更有效.

尽管如此,"判断给定的资源句柄是否仍然有效"的操作几乎总是从根本上不正确的.释放资源句柄(例如fd为closed)后,其值可能会重新分配给您分配的下一个此类资源.如果有任何剩余的引用可能被使用,它们将错误地操作新资源,而不是旧资源.因此,真正的答案可能是:如果你还不知道你的程序的逻辑,你有重大的基本逻辑错误需要修复.

C++相关问答推荐

为什么PLT表中没有push指令?

intellisense不工作,甚至已经下载了c/c++扩展

C指针地址和转换

从内联程序集调用Rust函数和调用约定

MISRA C:2012 11.3违规强制转换(FLOAT*)到(uint32_t*)

非常大的数组的大小

C中函数类型的前向声明

为什么该函数不将参数值保存到数据 struct 中?

整型文字后缀在左移中的用途

Square不与Raylib一起移动

用C++从外部ELF符号读取值

C中的FREE函数正在触发断点

C语言中神秘的(我认为)缓冲区溢出

计算SIZE_MAX元素的长数组的大小

区分MySQL C界面中的文本和BLOB字段

Matlab/Octave对conv2函数使用哪种方法?

变量值不正确的问题

'printf("%s", user_input)' 危险吗?

将数组中的所有元素初始化为 struct 中的相同值

int 与 size_t 与 long