我正在尝试编写一个程序,它使用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]);
答案 0 :(得分:2)
您正在使用offset
pageSize
,这意味着您正在尝试从文件的第二页开始映射。由于您的文件很小,这不在文件的末尾,而且会出现总线错误。
将offset
更改为0
,它应该可以正常运行。