c语言 - 使用 inotify 跟踪特定 PID 的in_open和in_close事件



我正在用ANSI C编写一个程序,该程序将PID作为参数,并且每次给定PID打开或关闭任何文件时,都需要在标准输出上打印有关文件名的信息。

基本上我们知道,/proc/PID/fd 目录包含指向 PID 使用的文件的符号链接。

通过在 while 循环中重新添加该目录并读取链接()'处理每个元素 - 我可以获取当前由 PID 打开的所有文件的文件名并将它们打印到 stdout。但这并不能完全解决我最初的任务 - 我只需要将 PID 的打开文件描述符表中的更改事件打印到 STDOUT。此外,我不仅需要捕获新文件何时打开,还需要捕获何时关闭FD。

因此,我需要一些机制来捕获用户空间中给定PID的文件访问事件。

我还尝试使用 inotify() 机制来捕获 IN_OPEN/IN_CLOSE,但这仅适用于 regural 目录,不适用于/proc (procfs)!当我为/proc/PID/fd 目录添加inotify_watch时 - 它根本没有捕获任何事件(很可能是由于 PROCFS 的性质)

你能建议解决我的任务的机制吗?附言对不起我的英语不好。

如果你需要Linux特定的解决方案,你可以使用fanotify。例如,检查此处 - http://git.infradead.org/users/eparis/fanotify-example.git。您可以订阅全局通知,然后仅过滤您感兴趣的 pid 的通知。

最新更新