我需要一个程序来列出Linux中进程访问/打开的所有文件。 它应该像这样工作,
o / p:进程正在访问的文件的完整路径。
不想使用' lsof '实用程序或任何其他实用程序。
有没有以编程方式实现此目的?
答案 0 :(得分:2)
如果您只想通过pid 1234进程通过打开文件描述符访问的文件,请列出/proc/1234/fd/
目录(大多数条目是符号链接)。您还可以通过/proc/1234/fdinfo/
尝试
ls -l /proc/self/fd/
了解这些文件包含的内容。
以编程方式,您可以在readdir(3)之后使用opendir(3)在这些目录上(以及readlink(2),至少对/proc/1234/fd/
....中的条目)。另请参阅proc(5)
请注意/proc/
是特定于Linux的。其他一些Unix拥有它(例如Solaris),具有非常不同的内容,属性和语义。
如果您还关心过去某些过程中已打开和关闭的文件,则要困难得多。另请参阅inotify(7)和ptrace(2) ...
要将文件路径转换为“规范”绝对路径,请使用realpath(3)。