fanotify无法通过多线程程序监视整个系统的FAN_OPEN_PERM事件,并忽略目录

时间:2013-08-22 10:44:19

标签: fanotify

我想监视整个系统的FAN_OPEN_PERM | FAN_CLOSE_WRITE事件由一个多线程程序,并忽略一些目录(比如/ home / mydir)。我在main()中使用了fanotify_init()和fanotify_mark()作为:

//有没有办法使用FAN_GLOBAL_LISTENER?

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

//标记“/”(不能用作多线程程序)或“/ home”(工作正常)

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”)。

如何在没有任何多线程程序问题的情况下标记整个系统?

如何使用ignore mask忽略整个目录(递归)? (内核2.6.38-8-通用)

1 个答案:

答案 0 :(得分:0)

阅读the man page

当需要特权来打开文件时,FAN_OPEN_PERM标志会触发事件。如果您打开一个文件,请在/ tmp中说,它什么都不做。

相反,你应该使用FAN_OPEN。