diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2008-03-04 14:51:23 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2008-03-04 14:51:23 +0000 |
commit | 99aa8c60282c7b8072eb35eb9ac815702f5bf586 (patch) | |
tree | bda96bf8c3a4c2875a083d7b16720533c8ffeaf4 /ACE/examples/Shared_Memory/test_MM.cpp | |
parent | c4078c377d74290ebe4e66da0b4975da91732376 (diff) | |
download | ATCD-99aa8c60282c7b8072eb35eb9ac815702f5bf586.tar.gz |
undoing accidental deletion
Diffstat (limited to 'ACE/examples/Shared_Memory/test_MM.cpp')
-rw-r--r-- | ACE/examples/Shared_Memory/test_MM.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/ACE/examples/Shared_Memory/test_MM.cpp b/ACE/examples/Shared_Memory/test_MM.cpp new file mode 100644 index 00000000000..2d98224f910 --- /dev/null +++ b/ACE/examples/Shared_Memory/test_MM.cpp @@ -0,0 +1,74 @@ +// $Id$ + +#include "ace/Shared_Memory_MM.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_errno.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_stdlib.h" + +ACE_RCSID(Shared_Memory, test_MM, "$Id$") + +#define SHMSZ 27 +ACE_TCHAR shm_key[] = ACE_TEXT ("/tmp/fooXXXXXX"); + +static void +client (void) +{ + ACE_Shared_Memory *shm_client = new ACE_Shared_Memory_MM (shm_key); + char *shm = (char *) shm_client->malloc (); + + for (char *s = shm; *s != '\0'; s++) + putchar (*s); + + putchar ('\n'); + *shm = '*'; +} + +static void +server (void) +{ + ACE_Shared_Memory *shm_server = new ACE_Shared_Memory_MM (shm_key, SHMSZ); + char *shm = (char *) shm_server->malloc (); + char *s = shm; + + for (char c = 'a'; c <= 'z'; c++) + *s++ = c; + + *s = '\0'; + + // Perform a busy wait (ugh) + while (*shm != '*') + ACE_OS::sleep (1); + + if (shm_server->remove () < 0) + ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("remove"))); + ACE_OS::unlink (shm_key); +} + +int +ACE_TMAIN (int, ACE_TCHAR *[]) +{ + if ( +#if defined (ACE_LACKS_MKSTEMP) + ACE_OS::mktemp (shm_key) == 0 +#else + ACE_OS::mkstemp (shm_key) == 0 +#endif + || (ACE_OS::unlink (shm_key) == -1 && errno == EPERM)) + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), shm_key), 1); + + switch (ACE_OS::fork ()) + { + case -1: + ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("fork")), 1); + case 0: + // Make sure the server starts up first. + ACE_OS::sleep (1); + client (); + break; + default: + server (); + break; + } + return 0; +} |