C 轮询/选择无法使用libfuse接收错误

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

等待选择/轮询的应用程序如何使用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_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;
    }
}