fanotify:我做错了什么?

时间:2013-11-11 14:45:22

标签: fanotify

我想使用fanotify监控单个目录,但我得到的是监控整个文件系统。这是代码:

fa_fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT, O_RDONLY | O_LARGEFILE | O_CLOEXEC);

static uint64_t event_mask = 
(FAN_ACCESS |         /* File accessed */
FAN_MODIFY |         /* File modified */
FAN_CLOSE_WRITE |    /* Writable file closed */
FAN_OPEN |           /* File was opened */
FAN_EVENT_ON_CHILD); /* We want to be reported of events in   files of the directory */

filesystem::path path("some-relative-path");
if (!filesystem::exists(path)){
    filesystem::create_directory(path);
}

if (fanotify_mark(fa_fd,
    FAN_MARK_ADD,
    event_mask,
    AT_FDCWD,
    "some-relative-path") >= 0)
{
    return NO_ERROR;
}

我已经从fanotify's man page读取了如果路径名(“some-relative-path”)是相对的,我们将fds设置为 AT_FDCWD ,那么我们要求标记相对路径。< / p>

我正在使用线程,但我不认为这是问题所在。也许我正在使用错误的旗帜,或者我根本没有使用正确的旗帜。

1 个答案:

答案 0 :(得分:1)

我遇到这个问题,当我们使用FAN_EVENT_ON_CHILD时,fanotify监视指定目录/文件的整个挂载点。当您仅监视目录时,使用FAN_ONDIR,fanotify仅监视该目录中的文件而不监视子目录。

因此,您必须监视整个安装点或没有其子目录的目录。请注意,您可以在监视整个安装点时跳过某些文件/目录。我希望这会对你有所帮助:)。