The mmarinus
crate wraps the underlying system mmap()
call in safe semantics.
For example:
```rust use std::num::NonZeroUsize; use mmarinus::{Kind, Builder, perms};
let mut zero = std::fs::File::open("/dev/zero").unwrap();
let map = Builder::map(4096)
.near(128 * 1024 * 1024)
.from(&mut zero, 0)
.known::
assert_eq!(&*map, &[0; 4096]); ```
You can also remap an existing mapping:
```rust use std::num::NonZeroUsize; use mmarinus::{Kind, Builder, perms};
let mut zero = std::fs::File::open("/dev/zero").unwrap();
let mut map = Builder::map(4096)
.anywhere()
.from(&mut zero, 0)
.known::
assert_eq!(&*map, &[0; 4096]);
let mut map = map.remap()
.from(&mut zero, 0)
.known::
asserteq!(&*map, &[0; 4096]); for i in map.itermut() { i = 255; } assert_eq!(&map, &[255; 4096]); ```
Alternatively, you can just change the permissions:
```rust use std::num::NonZeroUsize; use mmarinus::{Kind, Builder, perms};
let mut zero = std::fs::File::open("/dev/zero").unwrap();
let mut map = Builder::map(4096)
.at(128 * 1024 * 1024)
.from(&mut zero, 0)
.known::
assert_eq!(&*map, &[0; 4096]);
let mut map = map.reprotect::
asserteq!(&*map, &[0; 4096]); for i in map.itermut() { i = 255; } assert_eq!(&map, &[255; 4096]); ```
Mapping a whole file into memory is easy:
```rust use std::num::NonZeroUsize; use mmarinus::{Kind, Builder, perms};
let map = Kind::Private.load::
License: Apache-2.0