我想通过一个多线程程序监视整个系统的主目录|mydir事件,并忽略一些目录(比如/ FAN_OPEN_PERM / FAN_CLOSE_WRITE )。我在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-通用)
发布于 2013-10-23 04:46:01
阅读the man page。
当需要特权才能打开文件时,FAN_OPEN_PERM标志会触发一个事件。如果你打开一个文件,比方说在/tmp中,它什么也不做。
相反,您应该使用FAN_OPEN。
https://stackoverflow.com/questions/18378280
复制相似问题