gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:00:46 28 4
gpt4 key购买 nike

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

基本上我们知道,/proc/PID/fd 目录包含由 PID 使用的文件的符号链接(symbolic link)。

通过在 while 循环中 readdir() 对该目录进行 readlink() 处理每个元素,我可以获得当前由 PID 打开的所有文件的文件名,并将它们打印到 stdout。但这并没有完全解决我原来的任务 - 我需要仅将 PID 的打开文件描述符表中的更改事件打印到 STDOUT。此外,我不仅需要捕获新文件打开的时间,还需要捕获它的 FD 关闭的时间。

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

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

您能否提出解决我的任务的机制?附:抱歉我的英语不好。

最佳答案

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

关于c - 使用 inotify 跟踪特定 PID 的 in_open 和 in_close 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com