0

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

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

通过在while循环中读取该目录并读取每个元素,我可以获得所有文件的文件名,当前由PID打开并将它们打印到标准输出。但这并不能完全解决我最初的任务——我只需要将打开的文件描述符表中 PID 的更改事件打印到 STDOUT。此外,我不仅需要捕捉新文件何时打开,还需要捕捉它的 FD 何时关闭。

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

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

您能否建议解决我的任务的机制?PS 对不起我的英语不好。

4

1 回答 1

0

如果您需要特定于 Linux 的解决方案,您可以使用 fanotify。在这里查看例如 - http://git.infradead.org/users/eparis/fanotify-example.git。您可以订阅全局通知,然后只过滤那些您感兴趣的 pid。

于 2012-04-21T14:28:32.080 回答