无法写入内存映射文件
Cannot write to memory mapped file
我正在尝试将字节向量 Vec<u8>
写入内存映射文件,但我很困惑为什么它不写入文件。我简化了代码以清楚地显示我如何写入内存映射文件的方法。
fn main() {
let v : Vec<u8> = vec![0,0,0,1,0,0,0,2];
let n = v.len();
let f = OpenOptions::new()
.read(true)
.write(true)
.truncate(true)
.create(true)
.open("test.dat")
.unwrap();
f.set_len(n as u64);
let fd = f.as_raw_fd();
let mmap = MemoryMap::new(n, &[MapReadable, MapWritable, MapFd(fd)]).unwrap();
let mut data_ptr = mmap.data();
unsafe { ptr::copy_memory(data_ptr, v.as_ptr(), n); }
}
它看起来像是最后一行,但不知道为什么它不起作用,也不知道如何修复它。 :(
好的,我发现问题出在哪里了。它默认通过 MAP_PRIVATE 所以这就是为什么它没有写入它所以我确保我将它添加到我的 'mmap_options'
MapOption::MapNonStandardFlags(libc::consts::os::posix88::MAP_SHARED)
我正在尝试将字节向量 Vec<u8>
写入内存映射文件,但我很困惑为什么它不写入文件。我简化了代码以清楚地显示我如何写入内存映射文件的方法。
fn main() {
let v : Vec<u8> = vec![0,0,0,1,0,0,0,2];
let n = v.len();
let f = OpenOptions::new()
.read(true)
.write(true)
.truncate(true)
.create(true)
.open("test.dat")
.unwrap();
f.set_len(n as u64);
let fd = f.as_raw_fd();
let mmap = MemoryMap::new(n, &[MapReadable, MapWritable, MapFd(fd)]).unwrap();
let mut data_ptr = mmap.data();
unsafe { ptr::copy_memory(data_ptr, v.as_ptr(), n); }
}
它看起来像是最后一行,但不知道为什么它不起作用,也不知道如何修复它。 :(
好的,我发现问题出在哪里了。它默认通过 MAP_PRIVATE 所以这就是为什么它没有写入它所以我确保我将它添加到我的 'mmap_options'
MapOption::MapNonStandardFlags(libc::consts::os::posix88::MAP_SHARED)