非阻塞读取永远不会返回

时间:2015-05-29 23:38:36

标签: c linux nonblocking file-descriptor ubuntu-15.04

我正在尝试进行非阻塞读取,但函数永远不会返回。有人可以建议吗?这是我设置非阻塞fd的代码。

glTranslate

我也尝试了类似的结果

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;
}

收到的最后一条消息是“有东西要读”,代码没有进一步发展。我做错了什么?这不是一个多线程程序,因此没有人可以更改标志,但我还是在阅读之前打印了标志,确认了它们。

1 个答案:

答案 0 :(得分:1)

设备是否支持O_NONBLOCK?这似乎是来自GitHub的gbsim代码。阅读gbsim,驱动程序完全有可能不支持非阻塞调用。