0

我想监控整个系统的 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”)。

如何用多线程程序标记整个系统没有任何问题?

如何使用忽略掩码忽略整个目录(递归)?(内核 2.6.38-8-generic)

4

1 回答 1

-1

阅读手册页

当需要权限打开文件时,FAN_OPEN_PERM 标志会触发一个事件。如果你打开一个文件,比如说在 /tmp 中,它什么也不做。

相反,您应该使用 FAN_OPEN。

于 2013-10-22T20:46:01.393 回答