trusty (3) sharedmemory.3bobcat.gz

Provided by: libbobcat-dev_3.19.01-1ubuntu1_amd64 bug

NAME

       FBB::SharedMemory - Shared Memory memory structure

SYNOPSIS

       #include <bobcat/sharedmemory>
       Linking option: -lbobcat

DESCRIPTION

       The  class  FBB::SharedMemory  implements a usable interface to a shared memory segment made available by
       FBB::SharedSegment  and  monitored   by   FBB::SharedPos.   It   is   the   main   building   block   for
       FBB::SharedStreambuf,  defining  the `device’ to which FBB::SharedStreambuf interfaces. All shared memory
       related I/O should be performed through an FBB::SharedMemory object, which is a true object,  not  itself
       residing  in shared memory. An FBB::SharedMemory object defines, connects to and manages access to shared
       memory, encapsulating all raw shared memory operations. In addition to the  class  FBB::SharedMemory  the
       header file bobcat/sharedmemory also defines a struct SharedEnum__ defining an enum SizeUnit.

       The total amount of requested shared memory is always a lower bound to the actual amount of shared memory
       that eventually may become available. As a fictitious example: assume 100 kB of memory is requested, then
       a  table  of,  e.g., 10 entries is maintained, each entry controlling the access to a shared memory block
       of, 10 kB. These 10 kB blocks aren’t immediately allocated, but become available once the  program  reads
       from  or  writes  to  addresses  located  in  these  data  blocks. Whenever a data block is created it is
       initialized to 0-bytes.

       Caveat: when constructing a shared memory segment make sure the segment’s ID is stored at  a  retrievable
       location.  This  allows  other  processes  to  access  the  shared segment. The shared segment ID is also
       required to delete a shared memory segment. If the shared segment ID is lost, the memory occupied by  the
       shared  memory  segment  remains  inaccessible,  and  will  reduce  the amount of usable memory until the
       computer is rebooted. The member function id returns the ID of the shared memory currently  monitored  by
       an FBB::SharedMemory object.

NAMESPACE

       FBB
       All  constructors,  members,  operators  and manipulators, mentioned in this man-page, are defined in the
       namespace FBB.

INHERITS FROM

       FBB::SharedEnum__

       The struct SharedEnum__ is a wrapper struct around enum SizeUnit, which is available through  inheritance
       in  several  FBB::Shared* classes, and offers symbolic constants defining standard memory sizes. The enum
       SizeUnit defines the following symbolic constants:

       o      kB:
              , representing 2 bytes of memory;

       o      MB:
              , representing 2 bytes of memory;

       o      GB:
              , representing 2 bytes of memory

CONSTRUCTORS, DESTRUCTOR

       o      SharedMemory():
              The default constructor does not yet access a shared memory segment, but can be used to  define  a
              stub FBB::SharedMemory object, to be used at some later point during the execution of a program.

       o      SharedMemory(size_t maxSize, SizeUnit sizeUnit, size_t access = 0600):
              This  constructor creates a shared memory segment having a capacity of at least maxSize * sizeUnit
              bytes. The shared memory’s access rights are defined by the access parameter, using the well-known
              (chmod(1))  way  to  define the access rights for the owner, the group and others. If construction
              succeeds the shared memory is ready for use. If construction fails, an FBB::Exception is thrown.

       o      SharedMemory(int id):
              This constructor connects to a shared memory segment having ID id. If  construction  succeeds  the
              shared memory is ready for use. If construction fails (e.g., no shared memory segment having ID id
              exists), an FBB::Exception is thrown.

       o      ~SharedMemory():
              The destructor detaches any attached shared memory segments from the FBB::SharedMemory object.  If
              the  shared  memory  segment  is  currently  locked  by  the FBB::SharedMemory object, the lock is
              removed.

       copy and move constructors are not available.

OVERLOADED OPERATORS

       o      std::ostream &operator<<(std::ostream &out, SharedMemory const &sharedMemory):
              The overloaded insertion operator inserts information  about  the  SharedMemory  object  into  the
              provide  ostream object. The IDs of the shared segments, their sizes, the maximum number of shared
              memory segments, the number of bytes that can be read from  the  shared  memory,  and  its  actual
              storage capacity, etc., are displayed.

       o      SharedMemory &operator=(SharedMemory &&rhs):
              The  overloaded  move assignment operator is available. It is used to (re)define the shared memory
              segment an FBB::SharedMemory object is interfacing with.

       The overloaded copy assignement operator is not available.

MEMBER FUNCTIONS

       o      void clear():
              First, the shared memory is locked. Next, all shared data segment  are  deleted,  and  the  shared
              memory’s  own  data are reset to indicate it is completely empty. Following this the shared memory
              segment is unlocked again. Returning from clear the shared memory The FBB::SharedMemory object  is
              effectively re-initialized, with offset and nReadable returning 0.

       o      int get():
              First  the  FBB::SharedMemory  object  calls  lock  to  lock  the  shared memory segment. Next the
              character at offset is retrieved and offset  is  incremented.  Then  unlock  is  called,  and  the
              retrieved  character  is  returned.  If  offset is at least equal to nReadable, EOF is immediately
              returned.

       o      int id() const:
              The ID of the shared memory segment is returned.

       o      void kill():
              Without locking the shared memory all shared memory controlled by the FBB::SharedMemory object  is
              deleted. The FBB::SharedMemory object is unusable after returning from kill.

       o      std::streamsize maxOffset() const:
              The  maximum  possible  offset  that  can  be used with the shared memory segment is returned. The
              members offset and nReadable never exceed the value returned by maxOffset.

       o      std::streamsize nReadable() const:
              The number of characters (bytes) that can be read from the  beginning  of  the  shared  memory  is
              returned.

       o      std::streamsize offset() const:
              The offset within the shared memory segment is returned.

       o      char *ptr():
              Returns  0  if  offset()  == maxOffset(). Otherwise it returns a pointer to the character at index
              offset within the shared memory segment.

       o      int put(int ch):
              After locking the appropriate shared data segment, ch is written at position offset,  incrementing
              offset thereafter. If ch == EOF, EOF is immediately returned.

       o      int read(char *data, std::streamsize len):
              While  locking  the  appropriate shared data segment(s) at most len bytes are read from the shared
              memory, starting at offset. The bytes read from shared memory are stored at data.  The  number  of
              bytes  actually written is returned. This member returns -1 if initially offset was at least equal
              to nReadable.

       o      void remove():
              The shared memory is locked, after which all shared memory  controlled  by  the  FBB::SharedMemory
              object is deleted. The FBB::SharedMemory object is unusable after returning from remove.

       o      std::ios::pos_type seek(std::ios::off_type offset, std::ios::seekdir way = std::ios::beg):
              Moves  the  offset position relative to way. The value -1 is returned when seeking before offset 0
              or beyond maxOffset.

       o      std::streamsize showmanyc() const:
              The number of characters that can be read from the current shared segment data block is  returned.
              This  member  interrogates  the  number  of readable characters in the shared memory segment. This
              number may change while this member is being executed. In order to receive a stable return  value,
              calling  functions  should  have  obtained a lock on the shared memory segment before calling this
              member.

       o      void swap(SharedMemory &other):
              The current and other FBB::SharedMemory objects are swapped.

       o      bool try_lock() const:
              When returning true the current process has obtained the lock, and the object’s lock count is  set
              to 1. Otherwise, false is returned (which includes the case where the process already has obtained
              the lock).

       o      void unlock() const:
              If the object’s lock count is zero, the function immediately returns. Otherwise, the object’s lock
              count  is  decremented.  Once the lock count has decremented to zero the lock of the shared memory
              segment is released.

       o      int write(char const *data, std::streamsize len):
              The FBB::SharedMemory object calls lock to lock the shared memory, and writes at  most  len  bytes
              into  the  shared memory, starting at offset. Next, unlock is called. The number of bytes actually
              written is returned. The member function returns -1 if initially offset is equal to maxOffset.

EXAMPLE

       See the sharedstream(3bobcat) man page.

FILES

       bobcat/sharedmemory - defines the class interface

SEE ALSO

       bobcat(7),    chmod(1),     isharedstream(3bobcat),     osharedstream(3bobcat),     sharedblock(3bobcat),
       sharedmutex(3bobcat),       sharedpos(3bobcat),       sharedsegment(3bobcat),      sharedstream(3bobcat),
       sharedstreambuf(3bobcat)

BUGS

       None Reported.

DISTRIBUTION FILES

       o      bobcat_3.19.01-x.dsc: detached signature;

       o      bobcat_3.19.01-x.tar.gz: source archive;

       o      bobcat_3.19.01-x_i386.changes: change log;

       o      libbobcat1_3.19.01-x_*.deb: debian package holding the libraries;

       o      libbobcat1-dev_3.19.01-x_*.deb: debian package holding the libraries, headers and manual pages;

       o      http://sourceforge.net/projects/bobcat: public archive location;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).