【问题标题】:fanotify recursivity does really works?fanotify 递归真的有效吗?
【发布时间】:2013-10-22 21:10:55
【问题描述】:

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

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 什么也没检测到。

我错过了一些标志?

【问题讨论】:

    标签: fanotify


    【解决方案1】:

    问题解决了。

    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 文件 fanotify 启动事件。

    【讨论】:

    • 当添加带有FAN_MARK_MOUNT 的标记并且路径是目录而不是挂载点时,fanotify 将为您确定挂载点。在这种情况下,fanotify 将对/tmp 挂载点执行递归监控。此外,在使用FAN_MARK_MOUNT 时不应指定FAN_EVENT_ON_CHILD,只能指定目录。
    【解决方案2】:

    使用 fanotify,可以监控指定路径的整个挂载点(使用 FAN_MARK_MOUNT),或者监控目录中的文件(不是其子目录,无需指定 FAN_MARK_MOUNT)。您可以为子目录设置单独的监视器来实现此目的。见https://stackoverflow.com/a/20965660/2706918

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多