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

时间:2015-12-08 06:32:14

标签: c fuse

应用程序等待select / poll如何使用libfuse接收错误。 我修改了libfuse示例中提供的fsel.c和fselclient.c代码,以解释我所面临的问题。

fsel.c:function fsel_poll()。

static int fsel_poll(const char *path, struct fuse_file_info *fi,
         struct fuse_pollhandle *ph, unsigned *reventsp)
{
    printf("on fuse poll called \r\n");
    return -ENOENT; // return error on poll
}

fselclient.c:application

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

通过上面的代码修改,我看到选择 rfds和wfds设置取消阻止, rc为2 ,但实际上应为-1 因为我总是在保险丝轮询处理函数中返回错误( ENOENT )。

有没有人遇到过这个问题的保险丝,如果是,我如何在select / poll上返回错误?

提前感谢您的帮助。

0 个答案:

没有答案