gpt4 book ai didi

linux - 如何将 read() 设置为非阻塞模式

转载 作者:太空狗 更新时间:2023-10-29 11:32:33 25 4
gpt4 key购买 nike

我目前在这样调用 read() 时遇到问题:

unsigned char byData[1024] = {0};
ssize_t len = read(fd, byData, sizeof(byData));

其中 fd 是文件描述符。

read() 正在阻塞,这不是我想要的。有没有一种简单的方法可以将读取设置为非阻塞或超时?该代码与 inotify 一起使用。

感谢您的帮助。

最佳答案

你不能让这样的系统调用成为非阻塞的;相反,您可以使它们在非阻塞上工作的文件描述符

fcntl(fd, F_SETFL, O_NONBLOCK) 

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

如果您需要添加 O_NONBLOCK 并保留之前设置的标志。

这样 read 就不会阻塞。如果要设置超时,请使用 selectpoll

fd_set fds; 
FD_ZERO(&fds);
FD_SET(fd, &fds);

struct timeval t = {/*seconds*/, /*microseconds*/};
select(fd + 1, &fds, NULL, NULL, &t);

错误处理和后续工作(select 将覆盖 fdst)留给您。

关于linux - 如何将 read() 设置为非阻塞模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24913486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com