我正在用ANSI C编写一个程序,它将PID作为参数,并且每当给定PID打开或关闭任何文件时,需要在每次有关文件名的stdout信息上打印。
基本上我们知道,/ proc / PID / fd目录包含PID使用的文件的符号链接。
通过readdir()在while循环中读取该目录并读取每个元素的readlink() - 我可以获取所有文件的文件名,当前由PID打开并将它们打印到stdout。 但这并没有完全解决我原来的任务 - 我只需要打印到STDOUT只有PID的打开文件描述符表中的更改事件。而且,我不仅需要捕获新文件的打开时间,还需要捕获FD关闭的时间。
因此,我需要一些机制来捕获用户空间中给定PID的文件访问事件。
我也尝试使用inotify()机制来捕获IN_OPEN / IN_CLOSE,但这只适用于regural目录,而不适用于/ proc(procfs)!当我为/ proc / PID / fd目录添加inotify_watch时 - 它根本不捕获任何事件(很可能是由于PROCFS的性质)
请你建议解决我的任务的机制? 附:抱歉我的英语不好。
答案 0 :(得分:0)
如果您需要特定于Linux的解决方案,可以使用fanotify。点击此处查看 - http://git.infradead.org/users/eparis/fanotify-example.git。您可以订阅全局通知,然后仅过滤那些您感兴趣的pid的通知。