我想监视整个系统的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-通用)
答案 0 :(得分:0)