summaryrefslogtreecommitdiff
path: root/ace/IPC/SV_Shared_Memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/IPC/SV_Shared_Memory.h')
-rw-r--r--ace/IPC/SV_Shared_Memory.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/ace/IPC/SV_Shared_Memory.h b/ace/IPC/SV_Shared_Memory.h
new file mode 100644
index 00000000000..977d33f6faa
--- /dev/null
+++ b/ace/IPC/SV_Shared_Memory.h
@@ -0,0 +1,112 @@
+/* -*- C++ -*- */
+
+//=============================================================================
+/**
+ * @file SV_Shared_Memory.h
+ *
+ * $Id$
+ *
+ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef ACE_SV_SHARED_MEMORY_H
+#define ACE_SV_SHARED_MEMORY_H
+#include "ace/pre.h"
+
+#include "ace/ACE.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+/**
+ * @class ACE_SV_Shared_Memory
+ *
+ * @brief This is a wrapper for System V shared memory.
+ */
+class ACE_Export ACE_SV_Shared_Memory
+{
+public:
+ enum
+ {
+ ACE_CREATE = IPC_CREAT,
+ ACE_OPEN = 0
+ };
+
+ // = Initialization and termination methods.
+ 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);
+
+ /// Attach this shared memory segment.
+ int attach (void *virtual_addr = 0,
+ int flags =0);
+
+ /// Detach this shared memory segment.
+ int detach (void);
+
+ /// Remove this shared memory segment.
+ int remove (void);
+
+ /// Forward to underlying System V <shmctl>.
+ int control (int cmd, void *buf);
+
+ // = Segment-related info.
+ void *get_segment_ptr (void) const;
+ int get_segment_size (void) const;
+
+ /// Return the ID of the shared memory segment (i.e., an ACE_HANDLE).
+ ACE_HANDLE get_id (void) const;
+
+ /// Dump the state of an object.
+ void dump (void) const;
+
+ /// Declare the dynamic allocation hooks.
+ ACE_ALLOC_HOOK_DECLARE;
+
+protected:
+ enum
+ {
+ /// Most restrictive alignment.
+ ALIGN_WORDB = 8
+ };
+
+ /// Internal identifier.
+ ACE_HANDLE internal_id_;
+
+ /// Size of the mapped segment.
+ int size_;
+
+ /// Pointer to the beginning of the segment.
+ void *segment_ptr_;
+
+ /// Round up to an appropriate page size.
+ int round_up (size_t len);
+};
+
+#if defined (__ACE_INLINE__)
+#include "ace/SV_Shared_Memory.i"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/post.h"
+#endif /* ACE_SV_SHARED_MEMORY_H */