我有一个FD描述符,我可以通过调用read(fd, buffer,...)来读取它.现在,我想在实际进行调用之前判断是否有要读取的内容,因为调用正在阻塞.我该怎么做呢?

推荐答案

int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);

上面的代码片段将为非阻塞访问配置这样的描述符.如果调用read时数据不可用,则系统调用将失败,返回值为-1,errno设置为EAGAIN.有关更多信息,请参阅fnctl手册页.

或者,您可以使用select和可配置的超时来判断和/或等待指定的时间间隔以获取更多数据.这种方法可能就是您想要的,而且效率会高得多.

C++相关问答推荐

生成C代码时自动复制/生成' tmwtypes.h '依赖项

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

设计处理各种数据类型的方法和数据 struct

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

C是否用0填充多维数组的其余部分?

进程已完成,退出代码为138 Clion

N的值设置为0或1(未定义的行为),而我正在try 学习realloc和Malloc的用法

理解C版宏(看起来像未声明的变量?)

判断X宏的空性

函数的限制限定指针参数允许优化调用方函数吗?

什么是.c.h文件?

Square不与Raylib一起移动

为 struct 中的数组动态分配内存时出错

将数组插入数组

是否定义了此函数的行为?

循环中的静态变量与块中的变量和循环

如何在C宏定义中包含双引号?

将size_t分配给off_t会产生符号转换错误

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?

运行以下 C 程序时出现分段错误