24 #ifndef __UTILS_IPC_SHM_H_
25 #define __UTILS_IPC_SHM_H_
28 #include <sys/types.h>
29 #include <utils/ipc/shm_registry.h>
36 virtual bool matches(
void *memptr) = 0;
37 virtual size_t size() = 0;
39 virtual void set(
void *memptr) = 0;
40 virtual void reset() = 0;
46 class SharedMemoryLister;
60 bool destroy_on_delete,
61 const char *registry_name = 0);
92 static void list(
const char *magic_token,
94 const char *registry_name = 0);
96 static void erase(
const char *magic_token,
99 const char *registry_name = 0);
104 const char *registry_name = 0);
106 static bool exists(
const char *magic_token,
108 const char *registry_name = 0);
145 std::list<SharedMemoryRegistry::SharedMemID> __ids;
146 std::list<SharedMemoryRegistry::SharedMemID>::iterator __id_it;
158 const char *registry_name = 0);
173 const char *registry_name = 0);
194 char * __registry_name;
198 void *__shared_mem_upper_bound;
204 bool __write_lock_aquired;
static void erase_orphaned(const char *magic_token, SharedMemoryHeader *header, SharedMemoryLister *lister=0, const char *registry_name=0)
Erase orphaned (attach count = 0) shared memory segments of a given type.
bool is_creator() const
Determine if the shared memory segment has been created by this instance.
void lock_for_write()
Lock shared memory segment for writing.
size_t data_size() const
Get the size of the data-segment.
SharedMemory(const char *magic_token, SharedMemoryHeader *header, bool is_read_only, bool create, bool destroy_on_delete, const char *registry_name=0)
Create a new shared memory segment.
size_t _mem_size
Total size of the segment, including headers.
bool _should_create
Create shared memory segment.
bool try_lock_for_write()
Try to aquire lock on shared memory segment for writing.
size_t _data_size
Size of the data segment only.
SharedMemory_header_t * _shm_header
general header as stored in the shared memory segment
void * _shm_upper_bound
Upper bound of memory.
size_t segmsize() const
Get segment size.
bool is_protected() const
Check if memory segment is protected.
void lock_for_read()
Lock shared memory segment for reading.
bool try_lock_for_read()
Try to aquire lock on shared memory segment for reading.
char * _magic_token
Magic token.
char * _shm_magic_token
Magic token as stored in the shared memory segment.
static SharedMemoryIterator end()
Get invalid iterator.
bool _destroy_on_delete
destroy on delete.
void * addr(void *ptr) const
Get an address from a real pointer.
void set_swapable(bool swapable)
Set shared memory swapable.
static void erase(const char *magic_token, SharedMemoryHeader *header, SharedMemoryLister *lister=0, const char *registry_name=0)
Erase shared memory segments of a given type.
void * ptr(void *addr) const
Get the real pointer to the data based on an address.
SharedMemoryIterator & operator++()
Prefix increment.
bool is_read_only() const
Check for read-only mode.
bool is_destroyed() const
Check if segment has been destroyed This can be used if the segment has been destroyed.
SharedMemoryIterator()
Constructor.
void free()
Detach from and maybe destroy the shared memory segment.
const SharedMemoryHeader * operator*() const
Get SharedMemoryHeader.
void attach()
Attach to the shared memory segment.
const char * magic_token() const
Get magic token.
bool operator==(const SharedMemoryIterator &s) const
Check iterators for equality.
static bool exists(const char *magic_token, SharedMemoryHeader *header, const char *registry_name=0)
Check if a specific shared memory segment exists.
void * _memptr
Pointer to the data segment.
void set_destroy_on_delete(bool destroy)
Set deletion behaviour.
virtual ~SharedMemory()
Destructor.
Format list output for shared memory segments.
void * databuf() const
Get pointer to data buffer.
SharedMemoryIterator & operator=(const SharedMemoryIterator &shmit)
Make this instance point to the same segment as shmit.
void add_semaphore()
Add semaphore to shared memory segment.
int shmid() const
Get shared memory ID.
unsigned int num_attached() const
Get number of attached processes.
int semaphore() const
Get semaphore.
static SharedMemoryIterator find(const char *magic_token, SharedMemoryHeader *header, const char *registry_name=0)
Find SharedMemory segments.
static const short MaxNumConcurrentReaders
Maximum number of concurrent readers.
bool _is_read_only
Read-only.
~SharedMemoryIterator()
Destructor.
bool is_swapable() const
Check if memory can be swapped out.
SharedMemoryHeader * _header
Data-specific header.
void * memptr() const
Get a pointer to the shared memory This method returns a pointer to the data-segment of the shared me...
bool operator!=(const SharedMemoryIterator &s) const
Check iterators for inequality.
static const unsigned int MagicTokenSize
The magic token size.
size_t segmnattch() const
Get number of attached parties.
void set(void *memptr)
Copies data from the memptr to shared memory.
int shmem_id() const
Get shared memory ID.
SharedMemoryIterator & operator+(unsigned int i)
Advance by i steps.
long unsigned int _shm_offset
Offset to the master's base addr.
static void list(const char *magic_token, SharedMemoryHeader *header, SharedMemoryLister *lister, const char *registry_name=0)
List shared memory segments of a given type.
SharedMemoryIterator & operator+=(unsigned int i)
Advance by i steps.
bool is_valid() const
Check validity of shared memory segment.
void unlock()
Unlock memory.