2014-07-18 83 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,並且運行良好。