pub struct SharedMemory { /* private fields */ }Expand description
Shared memory segment for zero-copy IPC
Implementations§
Sourcepub fn create(name: &str, size: usize) -> Result<Self, IpcError>
pub fn create(name: &str, size: usize) -> Result<Self, IpcError>
Create a new shared memory segment.
Sizes the object with ftruncate and then reserves its backing store, so
a segment larger than the store can hold fails here — as the kernel’s
ENOSPC — instead of raising SIGBUS in whichever process first writes
an unbacked page. reserve_backing_store covers the Unix targets that
cannot make that reservation.
Sourcepub fn open(name: &str, size: usize) -> Result<Self, IpcError>
pub fn open(name: &str, size: usize) -> Result<Self, IpcError>
Open an existing shared memory segment.
Fails with IpcError::InvalidArgument if the segment is smaller than
size. mmap accepts a length past the end of the object, but the pages
beyond it are not backed: reading them raises SIGBUS, so an unchecked
mapping would hand out an as_slice that faults instead of reading.
Sourcepub unsafe fn as_slice(&self) -> &[u8] ⓘ
pub unsafe fn as_slice(&self) -> &[u8] ⓘ
Get a slice of the shared memory.
§Safety
For as long as the returned slice lives, no other handle to this segment
– in this process or another – may write it. A second handle maps the
same pages through an address the borrow checker cannot connect to this
one, so the exclusion is the caller’s to arrange (see the module docs).
Use SharedQueue when another party is an active
writer.