在我的c ++程序中,我打开了各种文件fork()
。分叉后,程序重复自身并运行。子进程将共享所有打开的文件句柄。
我的问题是,'有没有办法知道哪些文件是开放的?这样我就可以关闭那些文件句柄并用另一个文件重新打开。'
注意:我正在使用linux机器。
答案 0 :(得分:3)
通过查看/proc/<pid>/fd/*
(或/proc/self/fd
,如果您想要当前进程),可以查看在Linux上给定进程中打开的文件。每个文件都有一个以相应fd命名的sym链接,链接指向打开的文件,您可以使用readlink()
找到该文件。您可以使用dup2()
调用重定向任何特定的fd,将新文件的fd复制到该fd。
也就是说,由于您控制了所有进程,因此在内部跟踪可能更有意义。这也便于携带。