#mmap #memmap2 #utility

mmap-wrapper

memmap2 crate的简单包装,用于将mmap支持的指针转换为结构体

1 个不稳定版本

0.9.9 2024年8月2日

#245内存管理

Download history 75/week @ 2024-07-29 15/week @ 2024-08-05

90 每月下载量

MIT 许可证

8KB

mmap包装器

memmap2 crate的简单包装,用于将mmap支持的指针转换为结构体。

示例

C中mmap的常见用法是将mmap支持的指针转换为结构体,例如

MyStruct* mmap_backed_mystruct;
int fd;

fd = open(path, O_RDWR | O_CREAT, 0644);
ftruncate(fd, sizeof(MyStruct));

mmap_backed_mystruct = (MyStruct*)mmap(0, sizeof(MyStruct), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

这是一个对此用例很有帮助的包装器

 use mmap_wrapper::MmapWrapper;

 // structs musthave a well defined layout,
 // generally want them to be transparent or repr(C)
 #[repr(C)]  
 struct MyStruct {
    thing1: i32,
    thing2: f64,
 }

 let f = std::fs::File::options()
     .read(true)
     .write(true)
     .create(true)
     .truncate(false)
     .open("/tmp/mystruct-mmap-test.bin")
     .unwrap();
  
 let _ = f.set_len(std::mem::size_of::<MyStruct>() as u64);

 let m = unsafe {
     memmap2::Mmap::map(&f).unwrap()
 };

 let m_wrapper = MmapWrapper::<MyStruct>::new(m);
 let mmap_backed_mystruct = unsafe {
    m_wrapper.get_inner()
 };

依赖项

~165KB