fanotify recursivity确实有效吗?

时间:2013-10-22 21:10:56

标签: fanotify

我正在使用以下代码来监控整个文件系统:

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检测不到任何内容。

我错过了一些旗帜?

2 个答案:

答案 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