[−][src]Crate mmarinus
The mmarinus
crate wraps the underlying system mmap()
call in safe semantics.
For example:
use mmarinus::{Kind, Map, perms}; let mut zero = std::fs::File::open("/dev/zero").unwrap(); let map = Map::map(32) .near(128 * 1024 * 1024) .from(&mut zero, 0) .known::<perms::Read>(Kind::Private) .unwrap(); assert_eq!(&*map, &[0; 32]);
You can also remap an existing mapping:
use mmarinus::{Kind, Map, perms}; let mut zero = std::fs::File::open("/dev/zero").unwrap(); let mut map = Map::map(32) .anywhere() .from(&mut zero, 0) .known::<perms::Read>(Kind::Private) .unwrap(); assert_eq!(&*map, &[0; 32]); let mut map = map.remap() .from(&mut zero, 0) .known::<perms::ReadWrite>(Kind::Private) .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::{Kind, Map, perms}; let mut zero = std::fs::File::open("/dev/zero").unwrap(); let mut map = Map::map(32) .at(128 * 1024 * 1024) .from(&mut zero, 0) .known::<perms::Read>(Kind::Private) .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::{Kind, perms}; let map = Kind::Private.load::<perms::Read, _>("/etc/os-release").unwrap();
Modules
perms | Permissions for a mapping |
Structs
Builder | A builder used to construct a new memory mapping |
Error | The error condition |
Map | A smart pointer to a mapped region of memory |
Enums
Kind | The type of mapping to create |