1

如题。程序将等待第一个事件,然后进入无限循环——为什么不一次只处理一个事件?

#include <stdio.h>
#include <stdlib.h>
#include <sys/inotify.h>
#include <unistd.h>

int main (int argc, char **argv)
{
    int id, wd;
    int a;
    struct inotify_event e;

    id = inotify_init ();
    wd = inotify_add_watch (id, "/home/andrea/Downloads", IN_CREATE);
    puts ("waiting...");
    while (read (id, &e, sizeof (struct inotify_event)))
      {
          printf ("created %s\n", e.name);
          puts ("waiting...");
      }
return 0;
}
4

1 回答 1

0

首先,由 inotify 报告的事件的大小不是 inotify_event,因为还报告了一个附加名称。将 ioctl 与 FIONREAD 一起使用以获取可供读取的字节数。

int avail;
ioctl(id, FIONREAD, &avail);

其次,您使用了阻塞 I/O。如果您改为使用 inotify_init1(O_NONBLOCK) 来初始化 inotify,如果没有可用数据,read() 将立即返回并将 errno 设置为 EAGAIN。当然,如果您首先使用 FIONREAD 检查是否有可用数据,则这是可选的。

于 2015-12-09T17:29:53.423 回答