我试图通过映射一个1 MiB文件,对应于RAM大小来建模一个基本的CPU。我想读/写这个文件。目前我收到一个SIGBUS错误ram[2] = 1
,我收集的是试图在文件范围之外的mmap。我读过,也许我需要用零填充文件作为占位符,但我有点困惑,为什么我必须这样做,因为我认为mmap会自动为我分配一个内存块,将分配给我当我第一次触摸它时(正如我试图在我的测试中做的那样)。我错过了什么?mmap SIGBUS错误并初始化文件
int16_t ramD;
if ((ramD = open("ramMap.txt", O_RDWR | O_CREAT, 0666)) == -1)
{
errx(EX_OSERR, "RAM could not be initialized");
}
uint8_t* ram = mmap(0, ram_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, ramD, 0);
ram[2] = 1;
printf("%i", ram[2]);
'ram_bytes'的值是什么? – myaut
你没有检查'mmap'是否成功! –
@DavidSchwartz没关系,映射成功时会生成sigbus。 –