问题标签 [fanotify]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何为 Linux 的新 `fanotify` 文件系统监控功能编程?
fanotify
,建在上面fsnotify
,应该是换inotify
哪个换dnotify
的。是否有一些好的编程示例或现有实用程序可fanotify
用于监视文件系统中的更改?提供了多少细节fanotify
?
linux - 如何判断 fanotify 事件指的是哪条路径
我想知道在我的系统上以什么顺序打开了哪些文件,以便从磁盘中预取它们。似乎fanotify应该非常适合监控整个系统的开放事件。但据我所知,该fanotify_event_metadata
结构没有包含路径的字段。那么如何判断给定事件指的是哪条路径呢?或者是 fanotify 查找路径名的错误方法,我是否必须使用 inotify 为整个树递归注册手表?
fanotify - fanotify 无法通过多线程程序监视整个系统的 FAN_OPEN_PERM 事件,并忽略目录
我想监控整个系统的 FAN_OPEN_PERM | FAN_CLOSE_WRITE 事件由多线程程序执行,并忽略某些目录(例如 /home/mydir)。我在 main() 中使用了 fanotify_init() 和 fanotify_mark() 作为:
//有没有办法使用FAN_GLOBAL_LISTENER?
fd = fanotify_init(FAN_CLOEXEC| FAN_NONBLOCK | FAN_CLASS_CONTENT | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS, O_RDONLY | O_LARGEFILE) ...
//标记“/”(不能作为多线程程序工作)或“/home”(工作正常)
fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/") ....
//现在,忽略目录
fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/home/mydir")
在我的程序中, main() 读取事件并将其传递给多个线程以进一步处理。
问题: 1) 在监控“/”的情况下,这个多线程程序的系统挂起,但对“/home”工作正常。2)我仍然收到“/home/mydir”的通知(标记为“/home”并忽略“/home/mydir”)。
如何用多线程程序标记整个系统没有任何问题?
如何使用忽略掩码忽略整个目录(递归)?(内核 2.6.38-8-generic)
fanotify - fanotify 递归真的有效吗?
我正在使用如下代码来监控整个文件系统:
但是我需要编写一些测试,所以,我只想监控一个特定的目录,比如说“/tmp/test_dir”。问题是当我以这种方式更改代码时:
fanotify 只监视“/tmp/test_dir”上的事件,而忽略更深的文件夹中发生的任何事情。
例如:如果我打开“/tmp/test_dir/aa/bb/cc/test_file.txt” fanotify 什么也没检测到。
我错过了一些标志?
fanotify - fanotify:我做错了什么?
我想使用 fanotify 监控单个目录,但我得到的是监控整个文件系统。这是代码:
如果 pathname("some-relative-path") 是相对的,并且我们已将 fds 设置为AT_FDCWD ,那么我已从fanotify 的手册页中读取,然后我们要求标记该相对路径。
我正在使用线程,但我认为这不是问题所在。也许我使用了错误的某些标志,或者我根本没有使用正确的标志。
c++ - 访问文件和打开文件有什么区别
我有这个疑问:¿之间的区别是:打开文件和访问文件?
我正在使用 fanotify,我只对 FAN_ACCESS 事件感兴趣。我启动我的程序,当我尝试编辑某个文件时,程序会执行它必须做的事情。
说,我写了一些测试,一些测试用例使用这样的代码:
但令人惊讶的是,我的程序没有检测到这种访问。我从 nano 访问相同的文件(即使没有重新启动上述程序)并且一切都可以再次工作。
这就是为什么我认为访问和打开文件之间必须有一些区别。
该程序始终由 root 用户执行。
我将标志设置如下:
linux - 如何检测文件已被删除
我正在编写一个程序来监视文件系统。但是我无法检测到文件何时被删除。我尝试使用 FAN_MARK_ONLYDIR 标志进行监视,希望 fanotify 在删除受监视目录中的文件时引发一些事件,但没有结果。
甚至可以使用 fanotify 做到这一点?有什么可以帮助我做到这一点?
c - fanotify:监控一个特定的文件夹——而不是整个文件系统
我使用 fanotify 手册页的示例来获取发生文件访问的所有路径。但我只希望从一个特定文件夹(例如 /tmp/myfolder)监视文件访问。
为此,我添加了我的特定文件夹“/tmp/myfolder”:
事件掩码:
即使我使用 FAN_ONDIR 只从这个特殊目录中获取文件访问,我也曾经从整个文件系统中获取所有文件句柄。我用 sudo ./program 启动我的编译程序。
c++ - 如果我使用正在运行的守护程序重新启动或关闭系统,该守护程序使用 fanotify 控制对文件的访问
我让我的守护进程使用 fanotify API 来控制对文件的访问。这是工作线程:
它工作正常。如果我在重新启动或关闭之前停止守护进程,一切正常。但是,如果我试图在守护进程运行的情况下重新启动系统或关机,系统就会冻结。
我认为系统可能会在重新启动/关闭时将 SIGSTOP 发送到它的守护进程,对吗?如果是这样,守护进程不允许访问任何文件并锁定系统?
请帮忙。
我正在使用带有内核 3.11.0 的 Ubuntu 12.04 64 位。
c++ - 如何使用 FAN_DENY?(附注)
我已经阅读了我想知道的 Fanotify 和 flag FAN_DENY 的手册页。
我没有找到任何使用 FAN_DENY 的示例。
手册页:http ://www.xypron.de/projects/fanotify-manpages/man7/fanotify.7.html