我想監視整個系統的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)
使用'FAN_OPEN_PERM'您可以'允許'或'拒絕'權限來打開文件。使用'FAN_OPEN',你可以看看是否正在打開特定的文件(你不能阻止它的訪問)。 –