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
每月下载量 223
用于 3 crate
23KB
440 行
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