diff options
author | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
---|---|---|
committer | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1996-10-21 21:41:34 +0000 |
commit | a5fdebc5f6375078ec1763850a4ca23ec7fe6458 (patch) | |
tree | bcf0a25c3d45a209a6e3ac37b233a4812f29c732 /ace/SV_Shared_Memory.cpp | |
download | ATCD-a5fdebc5f6375078ec1763850a4ca23ec7fe6458.tar.gz |
Initial revision
Diffstat (limited to 'ace/SV_Shared_Memory.cpp')
-rw-r--r-- | ace/SV_Shared_Memory.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/ace/SV_Shared_Memory.cpp b/ace/SV_Shared_Memory.cpp new file mode 100644 index 00000000000..8cfc1adc2c8 --- /dev/null +++ b/ace/SV_Shared_Memory.cpp @@ -0,0 +1,82 @@ +// SV_Shared_Memory.cpp +// $Id$ + +#define ACE_BUILD_DLL +#include "ace/SV_Shared_Memory.h" +#include "ace/Log_Msg.h" + +#if !defined (__ACE_INLINE__) +#include "ace/SV_Shared_Memory.i" +#endif /* __ACE_INLINE__ */ + +ACE_ALLOC_HOOK_DEFINE(ACE_SV_Shared_Memory) + +void +ACE_SV_Shared_Memory::dump (void) const +{ + ACE_TRACE ("ACE_SV_Shared_Memory::dump"); +} + +// Creates a shared memory segment of SIZE bytes and *does* attach to +// this segment. + +int +ACE_SV_Shared_Memory::open_and_attach (key_t external_id, + size_t sz, + int create, + int perms, + void *virtual_addr, + int flags) +{ + 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; +} + +// Constructor interface to this->open_and_attach () member function. + +ACE_SV_Shared_Memory::ACE_SV_Shared_Memory (key_t external_id, + size_t sz, + int create, + int perms, + void *virtual_addr, + int flags) +{ + 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, "%p\n", + "ACE_SV_Shared_Memory::ACE_SV_Shared_Memory")); +} + +// The "do nothing" constructor. + +ACE_SV_Shared_Memory::ACE_SV_Shared_Memory (void) + : segment_ptr_ (0), + internal_id_ (0), + size_ (0) +{ + ACE_TRACE ("ACE_SV_Shared_Memory::ACE_SV_Shared_Memory"); +} + +// Added this constructor to accept an internal id, the one generated +// when a server constructs with the key IPC_PRIVATE. The client can +// be passed ACE_SV_Shared_Memory::internal_id via a socket and call +// this construtor to attach the existing segment. This prevents +// having to hard-code a key in advance. Courtesy of Marvin Wolfthal +// (maw@fsg.com). + +ACE_SV_Shared_Memory::ACE_SV_Shared_Memory (ACE_HANDLE int_id, + int flags) + : 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, "%p\n", + "ACE_SV_Shared_Memory::ACE_SV_Shared_Memory")); +} |