我正在尝试编写一个程序,该程序使用 C 语言中的 mmap
函数来读取文件,将文件的内容映射到内存,并(暂时)输出文件中的第一个字符。我已经编写了下面的代码,一切都很好,直到最后一行,我尝试打印该字符。此时,程序输出总线错误(核心转储)
。
这个程序可能出了什么问题?我关注了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]);
最佳答案
您使用的偏移量
为pageSize
,这意味着您尝试从文件的第二页开始映射。由于您的文件很小,因此这超出了文件末尾,您会收到总线错误。
将 offset
更改为 0
,它应该按您的预期工作。
关于C - 使用 mmap 时出现总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22925023/