我使用inotify编写了一个C程序来监视一些目录(' a') (在CentOS 6.5上运行)。
跑完后:
cp b / txt_file a /
我收到了2件事:
1)IN_MODIFY。
2)IN_CLOSE_WRITE。
再次复制同一文件后:
cp b / txt_file a /
我收到3个事件:
1)IN_MODIFY。
2)IN_MODIFY。
3)IN_CLOSE_WRITE。
额外的IN_MODIFY来自哪里?
我刚刚编写了一个示例程序来测试它:
int main ()
{
int fd, wd;
fd = inotify_init1 (IN_NONBLOCK);
printf("fd: %d %d\n", fd, errno);
wd =
inotify_add_watch (fd, "/home/geotool/a",
IN_MODIFY | IN_CREATE | IN_DELETE | IN_MOVED_TO |
IN_CLOSE_WRITE);
char buf[4096]
__attribute__ ((aligned (__alignof__ (struct inotify_event))));
const struct inotify_event *event;
int i;
ssize_t len;
char *ptr;
for (;;)
{
/* Read some events. */
len = read (fd, buf, sizeof buf);
for (ptr = buf; ptr < buf + len;
ptr += sizeof (struct inotify_event) + event->len)
{
event = (const struct inotify_event *) ptr;
if (event->mask & IN_ISDIR)
continue;
if (event->mask & IN_CREATE)
printf ("Created: %s\n", event->name);
else if (event->mask & IN_MODIFY)
printf ("Modified: %s\n", event->name);
else if (event->mask & IN_DELETE)
printf ("Deleted: %s\n", event->name);
else if (event->mask & IN_CLOSE_WRITE)
printf ("Closed write: %s\n", event->name);
else
printf("dunno %s\n", event->name);
}
}
return 0;
}
复制文件后我收到了多个IN_MODIFY事件(&#39; cp&#39;)。 经过一些搜索后,我意识到在复制大文件时,可能会生成多个IN_MODIFY事件。
答案 0 :(得分:0)
1)IN_MODIFY。 - 目录事件 2)IN_MODIFY。 - 文件事件 3)IN_CLOSE_WRITE。 - 文件事件。