c++ - 如何知道自己进程打开的各种文件是什么

标签 c++ c linux fork

在我的 C++ 程序中,我在执行 fork() 的位置打开了各种文件。 fork 后程序会 self 复制并运行。子进程将共享所有打开的文件句柄。

我的问题是,'有没有办法知道打开的各种文件是什么?这样我就可以关闭这些文件句柄并使用不同的文件重新打开。”

注意:我使用的是linux机器。

最佳答案

可以通过查看 /proc/<pid>/fd/* 查看在 Linux 上的给定进程中打开了哪些文件(或者 /proc/self/fd 如果你想要当前进程)。每个文件都有一个以对应的fd命名的符号链接(symbolic link),链接指向打开的文件,可以通过readlink()找到。 .您可以使用对 dup2() 的调用来重定向任何特定的 fd将新文件的 fd 复制到那个 fd 上。

也就是说,由于您控制所有流程,因此仅在内部进行跟踪可能更有意义。这也更便携。

关于c++ - 如何知道自己进程打开的各种文件是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843766/

相关文章:

c++ - 在 C++11 中实现一个简单的通用线程池

c++ - RapidJSON 循环遍历字符串数组?

c# - 单声道 Linux Shell 命令

Linux AVR-IDE开发、vim集成

c++ - 在并发环境中访问 MMIO 的软件模式

c++ - 在 Xcode 中将源附加到二进制 dylib

c - 聚集功能

c - 为什么在链表初始化中使用指向函数的指针?

c - 如何给出附加到 shmat() 共享内存段中的起始地址?

c++ - Linux - 哪些资源需要提升权限的 C/C++ 编程?