C 轮询/选择无法使用libfuse接收错误
等待选择/轮询的应用程序如何使用libfuse接收错误。 我修改了libfuse示例中提供的fsel.c和fselclient.c代码,以解释我所面临的问题 c:函数fsel_poll() fselclient.c:应用程序C 轮询/选择无法使用libfuse接收错误,c,fuse,C,Fuse,等待选择/轮询的应用程序如何使用libfuse接收错误。 我修改了libfuse示例中提供的fsel.c和fselclient.c代码,以解释我所面临的问题 c:函数fsel_poll() fselclient.c:应用程序 while (1) { static char buf[4096]; fd_set rfds; fd_set wfds; fd_set efds; int rc; FD_ZERO(&rfds); FD_ZER
while (1) {
static char buf[4096];
fd_set rfds;
fd_set wfds;
fd_set efds;
int rc;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_ZERO(&efds);
FD_SET(fds, &rfds);
FD_SET(fds, &wfds);
FD_SET(fds, &efds);
rc = select(nfds, &rfds, &wfds, &efds, NULL);
printf(" rc value in select %d errno %d \r\n", rc, errno);
if (rc < 0) {
printf("Select error \r\n");
perror("select");
return 1;
}
}
while(1){
静态字符buf[4096];
fd_集rfds;
fd_集wfds;
fd_集efds;
int rc;
FD_ZERO(和RFD);
FD_零(和wfds);
FD_零(&efds);
FD_集(fds和RFD);
FD_集(fds和wfds);
FD_集(fds和efds);
rc=select(nfds、&rfds、&wfds、&efds,NULL);
printf(“选择%d errno%d\r\n中的rc值”,rc,errno);
if(rc<0){
printf(“选择错误\r\n”);
佩罗(“选择”);
返回1;
}
}
通过上面的代码修改,我看到select unblocks Withrfds和wfds setWithrc as 2,但实际上它应该是-1,因为我总是在fuse轮询处理函数中返回错误(ENONT)
是否有人使用fuse遇到过此问题,如果是,如何返回select/poll错误
提前感谢您的帮助。您没有将
wfds
或efds
归零,这意味着它们的内容将是不确定的,并且会给您带来未定义的行为。@JoachimPileborg:感谢您的回复。即使使用FD_ZERO(&wfds)和FD_ZERO(&efds),我也面临同样的问题。
while (1) {
static char buf[4096];
fd_set rfds;
fd_set wfds;
fd_set efds;
int rc;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_ZERO(&efds);
FD_SET(fds, &rfds);
FD_SET(fds, &wfds);
FD_SET(fds, &efds);
rc = select(nfds, &rfds, &wfds, &efds, NULL);
printf(" rc value in select %d errno %d \r\n", rc, errno);
if (rc < 0) {
printf("Select error \r\n");
perror("select");
return 1;
}
}