阅读/ proc / pid / maps中的分段错误

时间:2015-11-11 12:18:53

标签: c segmentation-fault

我正在尝试逐行阅读maps,但我收到错误核心segmentation fault错误...有人可以就我的代码给我一些建议吗?我正在使用3.13.0-32-generic

int main()
{
    char buf[512];
    FILE *f;
    sprintf(buf, "/proc/%d/maps", getpid());
    f = fopen(buf, "rt");
    while (fgets(buf, 512, f)) {
        unsigned int from, to, pgoff, major, minor;
        unsigned long ino;
        char flags[4];
        int ret = sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to, flags[0],flags[1],flags[2],flags[3], &pgoff, &major, &minor,ino);
            if (ret != 10)
            break;
    }
}

2 个答案:

答案 0 :(得分:3)

您需要将指针传递给flags数组的成员,而不是直接传递它们,这同样适用于ino参数:

sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to,
    &flags[0], &flags[1], &flags[2], &flags[3],
    &pgoff, &major, &minor, &ino);

或者,一次扫描所有字符:

sscanf(buf, "%x-%x %4c %x %x:%x %lu ", &from, &to,
    flags, &pgoff, &major, &minor, &ino);

注意&之前缺少的flags,因为数组在传递给函数时会自动转换为指向其第一个元素的指针。

答案 1 :(得分:1)

在scanf调用中替换

flags[x]

通过

&flags[x]
{p>同样适用于ino