C - 使用mmap时出现总线错误

时间:2014-04-07 23:37:47

标签: c file io mmap

我正在尝试编写一个程序,它使用C中的mmap函数来读取文件,将文件的内容映射到内存,并且(现在)输出文件中的第一个字符。我已经编写了下面的代码,直到最后一行,我尝试打印字符。此时,程序输出Bus error (core dumped)

这个程序可能出现什么问题?我跟着this tutorial,我似乎没有做任何导致它无法正常工作的事情。作为参考,我正在阅读的文件包含一行:"快速的棕色狐狸跳过懒狗"。我想在开发其他功能之前确保我的程序是正确的,所以我希望输出是第一个字符," T"。

/* open file */
file = open(fileName, O_RDONLY);

/* check if file exists */
if (file == -1) {
    printf("File not found\n");
    return 1;
}

/* get page size */
pageSize = getpagesize();

/* map file to memory */
data = mmap((caddr_t)0, pageSize, PROT_READ, MAP_SHARED, file, pageSize);

/* check if map was successful */
if (data == (caddr_t)(-1)) {
    printf("mmap error\n");
    return 1;
}

printf("%c\n", data[0]);

1 个答案:

答案 0 :(得分:2)

您正在使用offset pageSize,这意味着您正在尝试从文件的第二页开始映射。由于您的文件很小,这不在文件的末尾,而且会出现总线错误。

offset更改为0,它应该可以正常运行。