3

我阅读cat /proc/[pid]/maps了有关其地址空间的信息。所以我想写一个程序来打印它自己的地址空间。

我的程序是这样的;

  pid_t pid;
  int fd;
  char *buf;

  pid = getpid();

  fd = open("/proc/????/maps", O_RDONLY);

我正在获取 PID,但它无法帮助我打开文件。如何将 pid 从转换pid_t为字符串并将其添加到open调用中?

或者有没有其他方法可以打开文件?

4

2 回答 2

9

所有现代 procfs 系统都"/proc/self/"为正在运行的进程实现。只是

fd = open("/proc/self/maps", O_RDONLY);

如果您仍然希望自己创建路径字符串,那么您必须使用sprintf

char filename[128];
sprintf(filename, "/proc/%d/maps", getpid());
fd = open(filename, O_RDONLY);
于 2013-10-24T14:12:59.117 回答
-1

如果您只想打印映射信息以供查看,一种简单的方法:

您可以使用系统库调用来执行cat /proc/[pid]/maps

一个简单的C代码如下:

char command[256];
sprintf(command, "cat /proc/%d/maps", getpid());
system(command);

您可以参考我的Gist中的一个示例。

于 2017-03-09T22:07:35.153 回答