2014-07-18 50 views
0

我在繁忙的目录(文件不断生成)上使用inotify。我希望赶上所有人的IN_CLOSE_WRITE事件。在繁忙的目录中使用inotify

所以我尝试了这样的事情。

fd = inotify_init(); 
inotify_add_watch(fd, DIR_PATH, IN_CLOSE_WRITE); 
while(1) { 
    len = read(fd, buff, INOTIFY_EVENT_SIZE); 
    if (len < 0) { 
     PRINT_ERROR("Read failed. Keep watching.\n"); 
     continue; 
    } 
    /* Process the event */ 
} 

此方法无法捕获在处理第一次读取事件时生成的事件。我希望它能够工作。

我该如何处理?请让我知道,如果你看到缺少的东西。

+1

它是如何失败的?哪些事件没有被捕获?你是怎么注意到这一点的? –

+0

事件将排队等候,直至达到限制。该限制可以在'/ proc/sys/fs/inotify/max_queued_events'中设置。 – hek2mgl

+0

@BasileStarynkevitch我正在等待IN_CLOSE_WRITE,但是我的目录中的文件实际上是从一个不同的地方移动过来的。所以事件没有被抓住。我改变了事件名称,它运作良好。 –

回答

0

我在等待IN_CLOSE_WRITE,但是我的目录中的文件实际上是从一个差异位置移动过来的。所以事件没有被抓住。我将事件桅杆更改为IN_MOVE,并且运行良好。