3 releases (breaking)
0.3.0 | Mar 28, 2021 |
---|---|
0.2.1 | Jan 23, 2021 |
0.2.0 |
|
0.1.0 | Oct 20, 2020 |
#744 in Operating systems
18KB
370 lines
typed_shmem
Exposes shared memory on *nix and Windows using mapped files. This work is heavily inspired on the shared_memory crate, but instead of being just a copy cat, typed_shmem provides a typed mapping into the shared memory region.
Usage
First, a process must create the shared region:
use typed_shmem as sh;
use typed_shmem::error::ShMemErr;
use typed_shmem::common::ShMemOps;
fn main() -> Result<(), ShMemErr> {
let mut mem = sh::ShMemCfg::<u32>::default()
.set_owner()
.on_file("test_program")
.build()?;
//Writing
unsafe { *mem.get_t_mut() = 10; }
//Reading
let val = unsafe { mem.get_t() };
assert_eq!(*val, 10);
loop {} //Used to keep the process alive, thus the allocated shared memory too.
Ok(())
Then, any other process can join the same region:
use typed_shmem as sh;
use typed_shmem::error::ShMemErr;
use typed_shmem::common::ShMemOps;
fn main() -> Result<(), ShMemErr> {
let mut mem = sh::ShMemCfg::<u32>::default()
.on_file("test_program")
.build()?;
let val = unsafe { mem.get_t() };
assert_eq!(*val, 10);
Ok(())
}
To-Do (no specific order)
- Implement custom error instead of
Box<dyn Error>
ing everything. - Implement optional sharing/syncronization mechanisims.
- Check and rewrite the unsafe blocks (bugs there for sure).
- Create tests (using
fork()
in *nix (not sure)?; windows?). - More to come...
Contributions
All contributions to this project will be under Apache-2.0 license.
Dependencies
~4.5MB
~88K SLoC