我需要使用/ 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);
答案 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来测试是否有数据立即可用而无需等待。