2013-08-22 50 views
0

我想監視整個系統的FAN_OPEN_PERM | FAN_CLOSE_WRITE事件由多線程程序完成,並忽略一些目錄(比如/ home/mydir)。我在main()中使用了fanotify_init()和fanotify_mark():fanotify無法通過多線程程序監視整個系統的FAN_OPEN_PERM事件,並忽略目錄

//有什麼方法可以使用FAN_GLOBAL_LISTENER嗎?

FD = fanotify_init(FAN_CLOEXEC | FAN_NONBLOCK | FAN_CLASS_CONTENT | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS,O_RDONLY | O_LARGEFILE) ...

//標記 「/」(不作爲多線程程序工作)或「/家」(正常工作)

fanotify_mark(FD,FAN_MARK_ADD | FAN_MARK_MOUNT,FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD,AT_FDCWD, 「/」) ....

//現在,忽略目錄

fanotify_mark(fd,FAN_MARK_ADD | FAN_MARK_ONLYDIR | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY,FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD,AT_FDCWD,「/ home/mydir」)

在我的程序中,main()讀取事件並將其傳遞給多個線程進一步處理。

問題:1)在監視「/」的情況下系統掛起該多線程程序,但對「/ home」正常工作。 2)仍然我收到「/ home/mydir」的通知(標記爲「/ home」&忽略「/ home/mydir」)。

如何標記整個系統沒有任何多線程程序的問題?

如何使用忽略掩碼忽略整個目錄(遞歸)? (內核2.6.38-8-generic)

回答

0

閱讀the man page

當需要權限來打開文件時,FAN_OPEN_PERM標誌激發事件。如果你打開一個文件,比如說在/ tmp中,它什麼都不做。

而應該使用FAN_OPEN。

+0

使用'FAN_OPEN_PERM'您可以'允許'或'拒絕'權限來打開文件。使用'FAN_OPEN',你可以看看是否正在打開特定的文件(你不能阻止它的訪問)。 –