Public Types | Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes

ACE_SV_Shared_Memory Class Reference

This is a wrapper for System V shared memory. More...

#include <SV_Shared_Memory.h>

List of all members.

Public Types

enum  { ACE_CREATE = IPC_CREAT, ACE_OPEN = 0 }

Public Member Functions

 ACE_SV_Shared_Memory (void)
 ACE_SV_Shared_Memory (key_t external_id, size_t size, int create, int perms=ACE_DEFAULT_FILE_PERMS, void *virtual_addr=0, int flags=0)
 ACE_SV_Shared_Memory (ACE_HANDLE internal_id, int flags=0)
int open (key_t external_id, size_t size, int create=ACE_SV_Shared_Memory::ACE_OPEN, int perms=ACE_DEFAULT_FILE_PERMS)
int open_and_attach (key_t external_id, size_t size, int create=ACE_SV_Shared_Memory::ACE_OPEN, int perms=ACE_DEFAULT_FILE_PERMS, void *virtual_addr=0, int flags=0)
int attach (void *virtual_addr=0, int flags=0)
 Attach this shared memory segment.
int detach (void)
 Detach this shared memory segment.
int remove (void)
 Remove this shared memory segment.
int control (int cmd, void *buf)
 Forward to underlying System V <shmctl>.
void * get_segment_ptr (void) const
size_t get_segment_size (void) const
ACE_HANDLE get_id (void) const
 Return the ID of the shared memory segment (i.e., an ACE_HANDLE).
void dump (void) const
 Dump the state of an object.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Protected Types

enum  { ALIGN_WORDB = 8 }

Protected Member Functions

size_t round_up (size_t len)
 Round up to an appropriate page size.

Protected Attributes

ACE_HANDLE internal_id_
 Internal identifier.
size_t size_
 Size of the mapped segment.
void * segment_ptr_
 Pointer to the beginning of the segment.

Detailed Description

This is a wrapper for System V shared memory.

Definition at line 35 of file SV_Shared_Memory.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
ACE_CREATE 
ACE_OPEN 

Definition at line 38 of file SV_Shared_Memory.h.

  {
    ACE_CREATE = IPC_CREAT,
    ACE_OPEN   = 0
  };

anonymous enum [protected]
Enumerator:
ALIGN_WORDB 

Most restrictive alignment.

Definition at line 94 of file SV_Shared_Memory.h.

  {
    /// Most restrictive alignment.
    ALIGN_WORDB = 8
  };


Constructor & Destructor Documentation

ACE_SV_Shared_Memory::ACE_SV_Shared_Memory ( void   ) 

Definition at line 62 of file SV_Shared_Memory.cpp.

  : internal_id_ (0),
    size_ (0),
    segment_ptr_ (0)
{
  ACE_TRACE ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory");
}

ACE_SV_Shared_Memory::ACE_SV_Shared_Memory ( key_t  external_id,
size_t  size,
int  create,
int  perms = ACE_DEFAULT_FILE_PERMS,
void *  virtual_addr = 0,
int  flags = 0 
)

Definition at line 46 of file SV_Shared_Memory.cpp.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory");
  if (this->open_and_attach (external_id, sz, create,
                             perms, virtual_addr, flags) == -1)
    ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"),
                ACE_TEXT ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory")));
}

ACE_SV_Shared_Memory::ACE_SV_Shared_Memory ( ACE_HANDLE  internal_id,
int  flags = 0 
)

Definition at line 77 of file SV_Shared_Memory.cpp.

  : internal_id_ (int_id),
    size_ (0)
{
  ACE_TRACE ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory");
  if (this->attach (0, flags) == -1)
    ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"),
                ACE_TEXT ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory")));
}


Member Function Documentation

int ACE_SV_Shared_Memory::attach ( void *  virtual_addr = 0,
int  flags = 0 
)

Attach this shared memory segment.

Definition at line 44 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::attach");
#if defined (ACE_WIN32)
  ACE_UNUSED_ARG(flags);
  ACE_UNUSED_ARG(virtual_addr);
  ACE_NOTSUP_RETURN (-1);
#else
  this->segment_ptr_ = ACE_OS::shmat (this->internal_id_, virtual_addr, flags);
  return this->segment_ptr_ == (void *) -1 ? -1 : 0;
#endif /* ACE_WIN32 */
}

int ACE_SV_Shared_Memory::control ( int  cmd,
void *  buf 
)

Forward to underlying System V <shmctl>.

Definition at line 60 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::control");
#if defined (ACE_WIN32)
  ACE_UNUSED_ARG(cmd);
  ACE_UNUSED_ARG(buf);
  ACE_NOTSUP_RETURN (-1);
#else
  return ACE_OS::shmctl (this->internal_id_, cmd, (struct shmid_ds *) buf);
#endif /* ACE_WIN32 */
}

int ACE_SV_Shared_Memory::detach ( void   ) 

Detach this shared memory segment.

Definition at line 98 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::detach");
  return ACE_OS::shmdt (this->segment_ptr_);
}

void ACE_SV_Shared_Memory::dump ( void   )  const

Dump the state of an object.

Definition at line 17 of file SV_Shared_Memory.cpp.

{
#if defined (ACE_HAS_DUMP)
  ACE_TRACE ("ACE_SV_Shared_Memory::dump");
#endif /* ACE_HAS_DUMP */
}

ACE_HANDLE ACE_SV_Shared_Memory::get_id ( void   )  const

Return the ID of the shared memory segment (i.e., an ACE_HANDLE).

Definition at line 112 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::get_id");
  return this->internal_id_;
}

void * ACE_SV_Shared_Memory::get_segment_ptr ( void   )  const

Definition at line 105 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::get_segment_ptr");
  return this->segment_ptr_;
}

size_t ACE_SV_Shared_Memory::get_segment_size ( void   )  const

Definition at line 75 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::get_segment_size");
  return this->size_;
}

int ACE_SV_Shared_Memory::open ( key_t  external_id,
size_t  size,
int  create = ACE_SV_Shared_Memory::ACE_OPEN,
int  perms = ACE_DEFAULT_FILE_PERMS 
)

Definition at line 22 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::open");
#if defined (ACE_WIN32)
  ACE_UNUSED_ARG(perms);
  ACE_UNUSED_ARG(create);
  ACE_UNUSED_ARG(sz);
  ACE_UNUSED_ARG(external_id);
  ACE_NOTSUP_RETURN (-1);
#else
  this->segment_ptr_ = 0;
  this->size_ = sz;

  this->internal_id_ = ACE_OS::shmget (external_id, sz, create | perms);

  return this->internal_id_ == -1 ? -1 : 0;
#endif /* ACE_WIN32 */
}

int ACE_SV_Shared_Memory::open_and_attach ( key_t  external_id,
size_t  size,
int  create = ACE_SV_Shared_Memory::ACE_OPEN,
int  perms = ACE_DEFAULT_FILE_PERMS,
void *  virtual_addr = 0,
int  flags = 0 
)

Definition at line 28 of file SV_Shared_Memory.cpp.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::open_and_attach");
  if (this->open (external_id, sz, create, perms) == -1)
    return -1;
  else if (this->attach (virtual_addr, flags) == -1)
    return -1;
  else
    return 0;
}

int ACE_SV_Shared_Memory::remove ( void   ) 

Remove this shared memory segment.

Definition at line 84 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::remove");
#if defined (ACE_WIN32)
  ACE_NOTSUP_RETURN (-1);
#else
  return ACE_OS::shmctl (this->internal_id_, IPC_RMID, 0);
#endif /* ACE_WIN32 */
}

size_t ACE_SV_Shared_Memory::round_up ( size_t  len  )  [protected]

Round up to an appropriate page size.

Definition at line 12 of file SV_Shared_Memory.inl.

{
  ACE_TRACE ("ACE_SV_Shared_Memory::round_up");
  return (len + ACE_SV_Shared_Memory::ALIGN_WORDB - 1) & ~(ACE_SV_Shared_Memory::ALIGN_WORDB - 1);
}


Member Data Documentation

Declare the dynamic allocation hooks.

Definition at line 91 of file SV_Shared_Memory.h.

ACE_HANDLE ACE_SV_Shared_Memory::internal_id_ [protected]

Internal identifier.

Definition at line 101 of file SV_Shared_Memory.h.

Pointer to the beginning of the segment.

Definition at line 107 of file SV_Shared_Memory.h.

size_t ACE_SV_Shared_Memory::size_ [protected]

Size of the mapped segment.

Definition at line 104 of file SV_Shared_Memory.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines