5 个版本 (3 个破坏性更新)

0.4.0 2022年4月27日
0.3.0 2022年4月26日
0.2.1 2021年8月16日
0.2.0 2020年8月31日
0.1.0 2020年8月31日

#332 in Unix API

Download history 54/week @ 2024-04-22 58/week @ 2024-04-29 15/week @ 2024-05-06 177/week @ 2024-05-13 56/week @ 2024-05-20 19/week @ 2024-05-27 28/week @ 2024-06-03 14/week @ 2024-06-10 22/week @ 2024-06-17 75/week @ 2024-06-24 3/week @ 2024-07-01 89/week @ 2024-07-08 69/week @ 2024-07-15 24/week @ 2024-07-22 25/week @ 2024-07-29 40/week @ 2024-08-05

每月下载量 223
用于 3 crate

Apache-2.0 许可

23KB
440

Workflow Status Average time to resolve an issue Percentage of issues still open Maintenance

mmarinus

mmarinus crate 使用安全语义封装了底层系统的 mmap() 调用。

例如

use mmarinus::{Map, perms};

let mut zero = std::fs::File::open("/dev/zero").unwrap();

let map = Map::bytes(32)
    .near(128 * 1024 * 1024)
    .from(&mut zero, 0)
    .with(perms::Read)
    .unwrap();

assert_eq!(&*map, &[0; 32]);

您还可以重新映射现有映射

use mmarinus::{Map, perms};

let mut zero = std::fs::File::open("/dev/zero").unwrap();

let mut map = Map::bytes(32)
    .anywhere()
    .from(&mut zero, 0)
    .with(perms::Read)
    .unwrap();

assert_eq!(&*map, &[0; 32]);

let mut map = map.remap()
    .from(&mut zero, 0)
    .with(perms::ReadWrite)
    .unwrap();

assert_eq!(&*map, &[0; 32]);
for i in map.iter_mut() {
    *i = 255;
}
assert_eq!(&*map, &[255; 32]);

或者,您只需更改权限

use mmarinus::{Map, perms};

let mut zero = std::fs::File::open("/dev/zero").unwrap();

let mut map = Map::bytes(32)
    .at(128 * 1024 * 1024)
    .from(&mut zero, 0)
    .with(perms::Read)
    .unwrap();

assert_eq!(&*map, &[0; 32]);

let mut map = map.reprotect(perms::ReadWrite).unwrap();

assert_eq!(&*map, &[0; 32]);
for i in map.iter_mut() {
    *i = 255;
}
assert_eq!(&*map, &[255; 32]);

将整个文件映射到内存中很容易

use mmarinus::{Map, Private, perms};

let map = Map::load("/etc/os-release", Private, perms::Read).unwrap();

许可证:Apache-2.0

依赖项

~43KB