我正在使用以下代码来监控整个文件系统:
fanotify_mark(fd,
FAN_MARK_ADD | FAN_MARK_MOUNT,
FAN_OPEN | FAN_EVENT_ON_CHILD,
AT_FDCWD, "/"
)
但是我需要编写一些测试,所以,我希望监视器只是一个特定的目录,让我们说“/ tmp / test_dir”。问题是当我以这种方式更改代码时:
fanotify_mark(fd,
FAN_MARK_ADD,
FAN_OPEN | FAN_EVENT_ON_CHILD,
AT_FDCWD, "/tmp/test_dir"
)
fanotify只监视“/ tmp / test_dir”上的事件,忽略更深层文件夹中发生的任何事情。
例如:如果我打开“/tmp/test_dir/aa/bb/cc/test_file.txt”,则fanotify检测不到任何内容。
我错过了一些旗帜?
答案 0 :(得分:5)
问题解决了。
fanotify不是递归的。它只在处理已安装的目录时才有效。我做了以下测试:
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文件设置启动事件。
答案 1 :(得分:1)
使用fanotify,监视指定路径的整个挂载点(使用FAN_MARK_MOUNT),或监视目录(不是其子目录,而不指定FAN_MARK_MOUNT)中的文件。您可以为子目录设置单独的监视器来实现此目的。见https://stackoverflow.com/a/20965660/2706918