如何知道两个C程序之间共享哪些输入文件?

时间:2019-06-30 20:05:31

标签: c linux file-descriptor

当我在Linux中执行两个C程序时,可以使用fileno()打印它们的本地/私有文件描述符。这意味着,当我并排运行两个独立程序并在每个程序中打印fileno()时,打开的第一个文件将打印3个,打开的第二个文件将打印4个,依此类推。

因此,通过使用fileno(),无法知道哪些输入文件在它们之间共享。

有什么方法可以打印两个C程序之间共享的输入文件名?

1 个答案:

答案 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>字段。