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’.

COPYRIGHT

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

AUTHOR

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