我有一个FD描述符,我可以通过调用read(fd, buffer,...)来读取它.现在,我想在实际进行调用之前判断是否有要读取的内容,因为调用正在阻塞.我该怎么做呢?
read(fd, buffer,...)
int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK);
上面的代码片段将为非阻塞访问配置这样的描述符.如果调用read时数据不可用,则系统调用将失败,返回值为-1,errno设置为EAGAIN.有关更多信息,请参阅fnctl手册页.
或者,您可以使用select和可配置的超时来判断和/或等待指定的时间间隔以获取更多数据.这种方法可能就是您想要的,而且效率会高得多.
Java核心技术面试精讲 -〔杨晓峰〕
10x程序员工作法 -〔郑晔〕
Swift核心技术与实战 -〔张杰〕
现代C++编程实战 -〔吴咏炜〕
OAuth 2.0实战课 -〔王新栋〕
WebAssembly入门课 -〔于航〕
说透区块链 -〔自游〕
Tony Bai · Go语言第一课 -〔Tony Bai〕
玩转Vue 3全家桶 -〔大圣〕
郭东白的架构课 -〔郭东白〕
快手 · 音视频技术入门课 -〔刘歧〕
给程序员的写作课 -〔高磊〕
无涯教程 - Python机器学习教程
无涯教程 - Matplotlib教程
无涯教程 - Python数据结构教程
无涯教程 - Java 泛型教程
无涯教程 - ES6教程
无涯教程 - NativeScript教程
无涯教程 - PHP7 数据结构和算法教程
无涯教程 - PHP8实践教程