24 #ifndef _UTILS_IPC_SHM_H_ 25 #define _UTILS_IPC_SHM_H_ 28 #include <sys/types.h> 29 #include <utils/ipc/shm_registry.h> 39 virtual bool matches(
void *memptr) = 0;
40 virtual size_t size() = 0;
42 virtual void set(
void *memptr) = 0;
43 virtual void reset() = 0;
49 class SharedMemoryLister;
62 bool destroy_on_delete,
63 const char * registry_name = 0);
96 static void list(
const char * magic_token,
99 const char * registry_name = 0);
101 static void erase(
const char * magic_token,
104 const char * registry_name = 0);
109 const char * registry_name = 0);
148 std::list<SharedMemoryRegistry::SharedMemID> ids_;
149 std::list<SharedMemoryRegistry::SharedMemID>::iterator id_it_;
176 bool destroy_on_delete,
177 const char *registry_name = 0);
197 char * registry_name_;
201 void *shared_mem_upper_bound_;
207 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_protected() const
Check if memory segment is protected.
void lock_for_write()
Lock shared memory segment for writing.
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.
Fawkes library namespace.
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 * databuf() const
Get pointer to data buffer.
bool is_swapable() const
Check if memory can be swapped out.
void * _shm_upper_bound
Upper bound of memory.
bool is_creator() const
Determine if the shared memory segment has been created by this instance.
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.
void * addr(void *ptr) const
Get an address from a real pointer.
size_t segmsize() const
Get segment size.
bool is_valid() const
Check validity of shared memory segment.
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 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.
SharedMemory & operator=(const SharedMemory &s)
Assignment operator.
size_t segmnattch() const
Get number of attached parties.
bool is_destroyed() const
Check if segment has been destroyed This can be used if the segment has been destroyed.
bool is_read_only() const
Check for read-only mode.
SharedMemoryIterator & operator++()
Prefix increment.
SharedMemoryIterator()
Constructor.
void free()
Detach from and maybe destroy the shared memory segment.
void attach()
Attach to the shared memory segment.
void * ptr(void *addr) const
Get the real pointer to the data based on an address.
static bool exists(const char *magic_token, SharedMemoryHeader *header, const char *registry_name=0)
Check if a specific shared memory segment exists.
void * memptr() const
Get a pointer to the shared memory This method returns a pointer to the data-segment of the shared me...
unsigned int num_attached() const
Get number of attached processes.
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.
const SharedMemoryHeader * operator*() const
Get SharedMemoryHeader.
int semaphore() const
Get semaphore.
SharedMemoryIterator & operator=(const SharedMemoryIterator &shmit)
Make this instance point to the same segment as shmit.
void add_semaphore()
Add semaphore to shared memory segment.
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 operator==(const SharedMemoryIterator &s) const
Check iterators for equality.
bool _is_read_only
Read-only.
~SharedMemoryIterator()
Destructor.
bool operator!=(const SharedMemoryIterator &s) const
Check iterators for inequality.
size_t data_size() const
Get the size of the data-segment.
SharedMemoryHeader * _header
Data-specific header.
static const unsigned int MagicTokenSize
The magic token size.
int shmid() const
Get shared memory ID.
int shmem_id() const
Get shared memory ID.
void set(void *memptr)
Copies data from the memptr to shared memory.
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.
void unlock()
Unlock memory.
const char * magic_token() const
Get magic token.