read()在使用inotify监视event0时挂起

时间:2015-03-25 05:44:25

标签: inotify

我需要使用/ dev / input / event0来监视关键事件。我使用了inotify_add_watch(),但read()调用hangs.But如果我cat / dev / input / event0我可以看到一些事件。请让我知道有什么问题。我的代码片段是

/ 创建INOTIFY实例 /         fd = inotify_init();

    /*checking for error*/
    if ( fd < 0 ) {
            perror( "inotify_init" );
    }
    /*adding the /dev/input/event0 to watch list.*/
    wd = inotify_add_watch(fd, "/dev/input/event0", IN_ALL_EVENTS);
    if (wd < 0){
            perror("inotify_add_watch");
            exit(-1);
    }
    for (;;) {
    length = read(fd, buffer,EVENT_BUF_LEN);
    printf("length = %d",length);
            if (length == 0)
                    perror("read() from inotify fd returned 0!");

            if (length < 0)
                    perror("read");
     printf("Read %ld bytes from inotify fd\n", (long) numRead);

1 个答案:

答案 0 :(得分:0)

你没有解释为什么你认为你需要使用inotify。 我假设您只是想以编程方式测试事件是否准备就绪。

您可以执行以下操作:

int fd = open("/dev/input/event0", O_RDONLY|O_NONBLOCK);
struct pollfd pfd; // see man 2 poll
pfd.fd = fd;
pfd.events = POLLIN;
if (poll(&pfd, 1, &ts, 1000 /* milliseconds */) > 0) {
   // reading from fd now will not block
}

这将等待最多1秒(1000毫秒)的事件准备好读取。您可以将超时更改为您需要的任何内容。您也可以使用0来测试是否有数据立即可用而无需等待。