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 • Rust 包仓库 54/week @ 2024-04-22 • Rust 包仓库 58/week @ 2024-04-29 • Rust 包仓库 15/week @ 2024-05-06 • Rust 包仓库 177/week @ 2024-05-13 • Rust 包仓库 56/week @ 2024-05-20 • Rust 包仓库 19/week @ 2024-05-27 • Rust 包仓库 28/week @ 2024-06-03 • Rust 包仓库 14/week @ 2024-06-10 • Rust 包仓库 22/week @ 2024-06-17 • Rust 包仓库 75/week @ 2024-06-24 • Rust 包仓库 3/week @ 2024-07-01 • Rust 包仓库 89/week @ 2024-07-08 • Rust 包仓库 69/week @ 2024-07-15 • Rust 包仓库 24/week @ 2024-07-22 • Rust 包仓库 25/week @ 2024-07-29 • Rust 包仓库 40/week @ 2024-08-05 • Rust 包仓库

每月下载量 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