我想使用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>
我正在使用线程,但我不认为这是问题所在。也许我正在使用错误的旗帜,或者我根本没有使用正确的旗帜。
答案 0 :(得分:1)
我遇到这个问题,当我们使用FAN_EVENT_ON_CHILD时,fanotify监视指定目录/文件的整个挂载点。当您仅监视目录时,使用FAN_ONDIR,fanotify仅监视该目录中的文件而不监视子目录。
因此,您必须监视整个安装点或没有其子目录的目录。请注意,您可以在监视整个安装点时跳过某些文件/目录。我希望这会对你有所帮助:)。