0

我想使用 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;
}

如果 pathname("some-relative-path") 是相对的,并且我们已将 fds 设置为AT_FDCWD ,那么我已从fanotify 的手册页中读取,然后我们要求标记该相对路径。

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

4

1 回答 1

1

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

因此,您必须监视整个挂载点或没有子目录的目录。请注意,您可以在监视整个挂载点时跳过一些文件/目录。我希望这能帮到您 :)

于 2014-01-07T06:54:53.857 回答