[英]Linux named fifo non-blocking read select returns bogus read_fds
[英]Non blocking read never returns
我正在尝试进行非阻塞读取,但是该函数永不返回。 有人可以建议吗? 这是我设置非阻塞fd的代码。
from_ap = open(FFS_GBEMU_OUT, O_RDWR|O_NONBLOCK);
if (from_ap < 0)
return from_ap;
我也尝试过类似的结果
from_ap = open(FFS_GBEMU_OUT, O_RDWR);
int status = fcntl(from_ap, F_SETFL, fcntl(from_ap, F_GETFL, 0) | O_NONBLOCK);
if (status == -1){
perror("calling fcntl");
这是我调用读取函数的地方:
rsize = read(from_ap, cport_rbuf, ES1_MSG_SIZE);
if (rsize < 0) {
printf("error %zd receiving from AP\n", rsize);
return NULL;
}
我也尝试过类似的结果:
fd_set readset;
struct timeval tv;
FD_ZERO(&readset);
FD_SET(from_ap, &readset);
tv.tv_sec = 0;
tv.tv_usec = 100;
result = select(from_ap+1, &readset, NULL, NULL, &tv);
if (result > 0 && FD_ISSET(from_ap, &readset)){
printf("there was something to read\n");
rsize=read(from_ap,cport_rbuf,ES1_MSG_SIZE);
}
收到的最后一条消息是“有一些东西要阅读”,并且代码没有进一步进行。 我做错了什么? 这不是一个多线程程序,因此没有人可以更改标志,但是无论如何,我还是在阅读之前通过打印回标志来确认它们。
设备是否支持O_NONBLOCK? 这似乎是来自GitHub的gbsim代码。 在gbsim上阅读,驱动程序很可能不支持非阻塞调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.