iceoryx_posh 2.0.5
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
iox::roudi::PosixShmMemoryProvider Class Reference

Creates the shared memory based on a provided configuration. More...

#include <iceoryx_posh/roudi/memory/posix_shm_memory_provider.hpp>

Inheritance diagram for iox::roudi::PosixShmMemoryProvider:
Inheritance graph
[legend]
Collaboration diagram for iox::roudi::PosixShmMemoryProvider:
Collaboration graph
[legend]

Public Member Functions

 PosixShmMemoryProvider (const ShmName_t &shmName, const posix::AccessMode accessMode, const posix::OpenMode openMode) noexcept
 Constructs a PosixShmMemoryProvider which can be used to request memory via MemoryBlocks.
 
 PosixShmMemoryProvider (PosixShmMemoryProvider &&)=delete
 
PosixShmMemoryProvideroperator= (PosixShmMemoryProvider &&)=delete
 
 PosixShmMemoryProvider (const PosixShmMemoryProvider &)=delete
 
PosixShmMemoryProvideroperator= (const PosixShmMemoryProvider &)=delete
 
- Public Member Functions inherited from iox::roudi::MemoryProvider
 MemoryProvider (const MemoryProvider &)=delete
 
 MemoryProvider (MemoryProvider &&)=delete
 
MemoryProvideroperator= (const MemoryProvider &)=delete
 
MemoryProvideroperator= (MemoryProvider &&)=delete
 
cxx::expected< MemoryProviderErroraddMemoryBlock (cxx::not_null< MemoryBlock * > memoryBlock) noexcept
 This function add a MemoryBlock to the list of memory requester.
 
cxx::expected< MemoryProviderErrorcreate () noexcept
 With this call the memory requested by the MemoryBlocks need to be created. The function should be called from a MemoryManager which handles one or more MemoryProvider.
 
void announceMemoryAvailable () noexcept
 This function announces the availability of the memory to the MemoryBlocks. The function should be called from a MemoryManager which handles one or more MemoryProvider.
 
cxx::expected< MemoryProviderErrordestroy () noexcept
 This function destroys the previously allocated memory. Before the destruction, all MemoryBlocks are requested to handle this appropriately, e.g. call the destructor of the underlying type. The function should be called from a MemoryManager which handles one or more MemoryProvider.
 
cxx::optional< void * > baseAddress () const noexcept
 This function provides the base address of the created memory.
 
uint64_t size () const noexcept
 This function provides the size of the created memory.
 
cxx::optional< uint64_t > segmentId () const noexcept
 This function provides the segment id of the relocatable memory segment which is owned by the MemoryProvider.
 
bool isAvailable () const noexcept
 This function can be used to check if the requested memory is already available.
 
bool isAvailableAnnounced () const noexcept
 This function can be used to check if the availability of the memory was announced to the MemoryBlocks.
 

Protected Member Functions

cxx::expected< void *, MemoryProviderErrorcreateMemory (const uint64_t size, const uint64_t alignment) noexcept
 This function needs to be implemented to provide the actual memory, e.g. in case of POSIX SHM, shm_open and mmap would need to be called in the implementation of this function.
 
cxx::expected< MemoryProviderErrordestroyMemory () noexcept
 This function needs to be implemented to free the actual memory, e.g. in case of POSIX SHM, shm_unlink and munmap would need to be called in the implementation of this function.
 

Additional Inherited Members

- Static Protected Member Functions inherited from iox::roudi::MemoryProvider
static const char * getErrorString (const MemoryProviderError error) noexcept
 

Detailed Description

Creates the shared memory based on a provided configuration.

Constructor & Destructor Documentation

◆ PosixShmMemoryProvider()

iox::roudi::PosixShmMemoryProvider::PosixShmMemoryProvider ( const ShmName_t &  shmName,
const posix::AccessMode  accessMode,
const posix::OpenMode  openMode 
)
noexcept

Constructs a PosixShmMemoryProvider which can be used to request memory via MemoryBlocks.

Parameters
[in]shmNameis the name of the posix share memory
[in]accessModedefines the read and write access to the memory
[in]openModedefines the creation/open mode of the shared memory.

Member Function Documentation

◆ createMemory()

cxx::expected< void *, MemoryProviderError > iox::roudi::PosixShmMemoryProvider::createMemory ( const uint64_t  size,
const uint64_t  alignment 
)
protectedvirtualnoexcept

This function needs to be implemented to provide the actual memory, e.g. in case of POSIX SHM, shm_open and mmap would need to be called in the implementation of this function.

Parameters
[in]sizeis the size in bytes for the requested memory, the size should already be calculated according to the alignment requirements
[in]alignmentthe required alignment for the memory
Returns
the pointer of the begin of the created memory or a MemoryProviderError if the memory could not be created
Note
This creates and maps a POSIX shared memory to the address space of the application

Implements iox::roudi::MemoryProvider.

◆ destroyMemory()

cxx::expected< MemoryProviderError > iox::roudi::PosixShmMemoryProvider::destroyMemory ( )
protectedvirtualnoexcept

This function needs to be implemented to free the actual memory, e.g. in case of POSIX SHM, shm_unlink and munmap would need to be called in the implementation of this function.

Returns
a MemoryProviderError if the destruction failed, otherwise success
Note
This closes and unmaps a POSIX shared memory

Implements iox::roudi::MemoryProvider.


The documentation for this class was generated from the following file: