C语言 非阻塞读永远不会返回



我试图做一个非阻塞读取,但函数永远不会返回。有人能提点建议吗?下面是我设置非阻塞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");

这里是我调用read函数的地方:

rsize = read(from_ap, cport_rbuf, ES1_MSG_SIZE);
if (rsize < 0) {
    printf("error %zd receiving from APn", 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 readn");
    rsize=read(from_ap,cport_rbuf,ES1_MSG_SIZE);
}

收到的最后一条消息是"有东西要读",并且代码没有进一步进展。我做错了什么?这不是一个多线程程序,所以没有人可以改变标志,但我无论如何都在阅读之前通过打印回标志来确认它们。

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

相关内容

  • 没有找到相关文章

最新更新