无法写入内存映射文件

时间:2015-03-16 12:47:44

标签: rust

我正在尝试将字节向量Vec<u8>写入内存映射文件,但我感到难以理解为什么它不写入文件。我已经简化了代码,以清楚地显示我如何写入内存mmapped文件的方法。

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); }
}

看起来它是最后一行,但不知道为什么它不起作用,也不知道如何解决它。 :(

1 个答案:

答案 0 :(得分:2)

好的我发现了问题所在。默认情况下它会传递MAP_PRIVATE,这就是它没有写入它的原因所以我确保将其添加到我的'mmap_options'

MapOption::MapNonStandardFlags(libc::consts::os::posix88::MAP_SHARED)