当我在Linux中执行两个C程序时,可以使用fileno()
打印它们的本地/私有文件描述符。这意味着,当我并排运行两个独立程序并在每个程序中打印fileno()
时,打开的第一个文件将打印3个,打开的第二个文件将打印4个,依此类推。
因此,通过使用fileno()
,无法知道哪些输入文件在它们之间共享。
有什么方法可以打印两个C程序之间共享的输入文件名?
答案 0 :(得分:2)
使用
readlink /proc/<pid>/fd/* | sort -u > /tmp/process-<pid>.out
创建一个文件,其中包含由PID为<pid>
的进程打开的所有文件的列表。
然后使用comm
(1)查找公用文件,如下所示:
comm -12 /tmp/process-<pid1>.out /tmp/process-<pid2>.out
请注意,这将列出这些程序共享的所有个文件。
如果您知道程序使用的特定文件描述符例如3,4,5,9,11,12,然后将第一个命令替换为:
readlink /proc/<pid>/fd/{3,4,5,9,11,12} | sort -u > /tmp/process-<pid>.out
如果您不知道文件描述符,并且想要假定所有可供读取的文件描述符(包括stdin)都是输入文件,则必须通过阅读{{1 }},将显示包含该信息的/proc/<pid>/fdinfo/<file-descriptor>
字段。