我使用如下代码来监视整个文件系统:
fanotify_mark(fd,
FAN_MARK_ADD | FAN_MARK_MOUNT,
FAN_OPEN | FAN_EVENT_ON_CHILD,
AT_FDCWD, "/"
)但是我需要编写一些测试,所以,我希望监视器只是一个特定的dir,比如说"/tmp/test_dir“。问题是,当我以这种方式更改代码时:
fanotify_mark(fd,
FAN_MARK_ADD,
FAN_OPEN | FAN_EVENT_ON_CHILD,
AT_FDCWD, "/tmp/test_dir"
)扇只监视"/tmp/test_dir“上的事件,忽略在更深的文件夹中发生的任何事情。
例如:如果我打开"/tmp/test_dir/aa/bb/cc/test_file.txt“,fanotify就不会检测到任何东西。
我漏掉了什么旗子?
发布于 2013-10-23 13:29:31
问题解决了。
扇形不是递归的。它只在处理挂载目录时才这样工作。我做了以下测试:
mkdir /tmp/parent
mkdir -p /tmp/other/aa/bb/cc/dd
touch /tmp/other/aa/bb/cc/dd/test.txt
mount --bind /tmp/other /tmp/parent然后在代码中:
fanotify_mark(fd,
FAN_MARK_ADD | FAN_MARK_MOUNT,
FAN_OPEN | FAN_EVENT_ON_CHILD,
AT_FDCWD, "/tmp/parent"
)一切都结束了。现在,扇test.txt文件激发事件。
发布于 2014-01-07 13:46:53
使用fanotify,要么监视指定路径的整个挂载点(使用FAN_MARK_MOUNT),要么监视目录中的文件(不是它的子目录,而不指定FAN_MARK_MOUNT)。您可以为子目录设置单独的监视器来实现这一点。请参阅https://stackoverflow.com/a/20965660/2706918
https://stackoverflow.com/questions/19528432
复制相似问题