C程序打印自己的地址空间?

时间:2013-10-24 14:12:01

标签: c linux proc systems-programming

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

我的节目就是这个;

  pid_t pid;
  int fd;
  char *buf;

  pid = getpid();

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

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

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

2 个答案:

答案 0 :(得分:8)

所有现代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);

答案 1 :(得分:0)

如果您只想打印地图信息以供审核,可以采用一种简单的方法:

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

一个简单的C代码如下:

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

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