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

标签 c file io mmap

我正在尝试编写一个程序,该程序使用 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/

相关文章:

C 编程 - 操作字符串数组时出现段错误

c - 如何覆盖C中的断言宏?

c++ - Teensy/Arduino 库编译错误

python - Python 中 Windows 路径中的双反斜杠错误

python - Unicode (UTF-8) 在 Python 中读取和写入文件

将列表与其他列表进行比较,然后将匹配结果存储在新列表中

java - 尝试安装保存在其类路径上的包的 Jar 文件显示 "Cannot Find The File Specified"

c - 如何使用C程序检测文件中的特定字符串

javascript - 使用JavaScript,我可以上传一个word文件并使用.replace然后另存为新文档吗

java - Java中如何使用FileInputStream