5 releases (3 breaking)

0.4.0 Apr 27, 2022
0.3.0 Apr 26, 2022
0.2.1 Aug 16, 2021
0.2.0 Aug 31, 2020
0.1.0 Aug 31, 2020

#326 in Unix APIs

Download history 295/week @ 2024-02-26 142/week @ 2024-03-04 132/week @ 2024-03-11 72/week @ 2024-03-18 79/week @ 2024-03-25 130/week @ 2024-04-01 77/week @ 2024-04-08 83/week @ 2024-04-15 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

123 downloads per month
Used in 3 crates

Apache-2.0

23KB
440 lines

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

mmarinus

The mmarinus crate wraps the underlying system mmap() call in safe semantics.

For example:

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]);

You can also remap an existing mapping:

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]);

Alternatively, you can just change the permissions:

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]);

Mapping a whole file into memory is easy:

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

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

License: Apache-2.0

Dependencies

~43KB