截至标题。 程序将等待第一个事件,然后进入无限循环 - 为什么它不是一次只处理一个事件?
#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;
}
答案 0 :(得分:0)
首先,inotify报告的事件的大小不是inotify_event,因为还会报告其他名称。使用带有FIONREAD的ioctl来获取可供读取的字节数。
int avail;
ioctl(id, FIONREAD, &avail);
其次,您使用了阻塞I / O.如果您改为使用inotify_init1(O_NONBLOCK)初始化inotify,则read()将立即返回并在没有可用数据的情况下将errno设置为EAGAIN。当然,如果您首先使用FIONREAD检查是否有可用的数据,这是可选的。