Crate typed_shmem[][src]

typed_shmem

Provides the ShMem and ShMemCfg types for creating a shared memory region.

In order of a type T to be compatible with the shared memory implementation here present it must be T: zerocopy::AsBytes + zerocopy::FromBytes + Default.

Since there is no synchronization when reading/mutating the shared data, the programmer has to be responsible of how to do so in order to not corrupt said data.

Example

Owner process

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(())
}

Any other process

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(())
}

Panics

If the platform on which this crate is compiled does not comply with cfg(unix) nor with cfg(windows), the program will panic.

Modules

common
error

Structs

ShMem

Contains the platform-specific implementation details for shared memory. The memory itself it is accessed via the ShMemOps trait.

ShMemCfg

Configures and initilizes a shared memory region. By default, the segment name is randomly created and this instance is not the owner of the memory object.