Tôi đang cố gắng tạo một tệp ánh xạ bộ nhớ bằng cách sử dụng std::os::MemoryMap
. Cách tiếp cận hiện tại trông như sau:Làm cách nào để tạo và ghi vào các tệp ánh xạ bộ nhớ?
use std::os;
use std::ptr;
use std::old_io as io;
use std::os::unix::prelude::AsRawFd;
use std::os::MapOption;
let path = Path::new("test.mmap");
let f = match io::File::open_mode(&path, io::Open, io::ReadWrite) {
Ok(f) => f,
Err(err) => panic!("Could not open file: {}", err),
};
let mmap_opts = &[
MapOption::MapReadable,
MapOption::MapWritable,
MapOption::MapFd(f.as_raw_fd())
];
let mmap = match os::MemoryMap::new(1024*1024, mmap_opts) {
Ok(mmap) => {
println!("Successfully created the mmap: {}", mmap.len());
mmap
}
Err(err) => panic!("Could not read the mmap: {}", err),
};
unsafe {
let data = mmap.data();
if data.is_null() {
panic!("Could not access data from memory mapped file")
}
let src = "Hello!";
ptr::copy_memory(data, src.as_ptr(), src.as_bytes().len());
}
Chương trình này không thành công với
Process didn't exit successfully: `target/mmap` (status=4)
khi gọi ptr::copy_memory
hoặc bất kỳ hoạt động khác trên dữ liệu.
- Lý do tôi không thể ghi (hoặc đọc) dữ liệu từ MemoryMap là gì?
- Cách sử dụng MemoryMap đúng cách là gì?
Ý anh là gì bởi "thất bại khi gọi ..."? Có lỗi trình biên dịch, lỗi thời gian chạy, thông báo lỗi, v.v ... không? – delnan
Bạn có muốn lưu các sửa đổi về tệp không? – Shepmaster
@delnan, đã cập nhật câu hỏi với thông báo lỗi – mkhq