我試圖通過映射一個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。 –