我正在使用cratememmap对一个文件进行mmap。映射是这样完成的:
let mut mmap_var = memmap::MmapOptions::new().len(8589934592)
.map_mut(file).unwrap();
一切都很顺利,直到我达到u8的mmap_var[4096]
和u64的mmap_var[511]
中包含的值。
当我尝试更进一步时,我得到一个:信号:7,SIGBUS:访问未定义的内存。
我不明白为什么,因为当我读取mmaped数组的长度时,它与我设置的值相对应。
我想访问整个地图区域。
编辑
我知道问题出在文件大小上,因为它是一个常规文件。
我现在的问题是,主要目标是mmap一个长度为零的角色设备文件。
指令是:
memmap2::MmapOptions::new().len(65000)
.map_mut(&file);
结果是:
Os {
code: 19,
kind: Uncategorized,
message: "No such device",}
我搞定了!
当您尝试对一个常规文件进行mmap时,长度应为文件大小的最大值,以避免SIGBUS对未定义的内存区域进行访问。
关于设备文件,情况有所不同,因为即使它们的大小为零,也应该将它们视为属于设备的内存区域。
因此,设备文件的长度为零并不是一个问题。但是要小心将长度设置为小于设备内存区域大小的值。
EDIT关于上一个错误,它只是由于底层设备不支持mmap。因此,您应该为该设备的文件操作提供一个mmap处理程序。