Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在我的 c++ 程序中,我在执行fork(). 分叉后,程序复制自身并运行。子进程将共享所有打开的文件句柄。
fork()
我的问题是,'有没有办法知道打开的各种文件是什么?这样我就可以关闭这些文件句柄并使用不同的文件重新打开。
注意:我使用的是linux机器。
通过签出/proc/<pid>/fd/*(或者/proc/self/fd如果您想要当前进程),可以查看在 linux 上的给定进程中打开了哪些文件。每个文件都有一个以对应fd命名的sym链接,链接指向打开的文件,你可以使用readlink(). 您可以使用调用dup2()将新文件的 fd 复制到该 fd 上来重定向任何特定的 fd。
/proc/<pid>/fd/*
/proc/self/fd
readlink()
dup2()
也就是说,由于您控制所有流程,因此仅在内部进行跟踪可能更有意义。这也更便携。