diff options
author | jcej <jcej@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-08-01 22:19:49 +0000 |
---|---|---|
committer | jcej <jcej@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-08-01 22:19:49 +0000 |
commit | 79e236268127012abf6530b7eae8f4e82b30548e (patch) | |
tree | ec9fd7d453b02b55aaae6b3938f9eddfd0833158 /docs | |
parent | 3d117343662c89e02ac394f3554a9a05ffecdea0 (diff) | |
download | ATCD-79e236268127012abf6530b7eae8f4e82b30548e.tar.gz |
*** empty log message ***
Diffstat (limited to 'docs')
-rw-r--r-- | docs/tutorials/Chap_3/Makefile | 29 | ||||
-rw-r--r-- | docs/tutorials/Chap_3/README | 14 | ||||
-rw-r--r-- | docs/tutorials/Chap_3/ex03.html | 115 | ||||
-rw-r--r-- | docs/tutorials/Chap_3/mm.cpp | 113 | ||||
-rwxr-xr-x | docs/tutorials/colorize | 2 |
5 files changed, 273 insertions, 0 deletions
diff --git a/docs/tutorials/Chap_3/Makefile b/docs/tutorials/Chap_3/Makefile new file mode 100644 index 00000000000..e3f1f3ae1c8 --- /dev/null +++ b/docs/tutorials/Chap_3/Makefile @@ -0,0 +1,29 @@ +#---------------------------------------------------------------------------- +# +# $Id$ +# +# Makefile for all the ACE ``one-button' tests +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# Local macros +#---------------------------------------------------------------------------- + +BIN = mm + +PSRC=$(addsuffix .cpp,$(BIN)) + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- + +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU + +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU + +ex03.html : mm.cpp + ../colorize < mm.cpp > ex03.html diff --git a/docs/tutorials/Chap_3/README b/docs/tutorials/Chap_3/README new file mode 100644 index 00000000000..228579ca4c5 --- /dev/null +++ b/docs/tutorials/Chap_3/README @@ -0,0 +1,14 @@ +Note: + +Example 2 (ex02.html) will not compile and work on Win32 because +it relies on SystemV Shared Memory and fork() which are not +available on that platoform. + +Example 3 (ex03.html) is basically the same but uses a memory-mapped +file instead of SYSV Shared Memory. It also takes a single command +line parament 's' to start it in server mode or 'c' to start it +in client mode. (This is to work around the lack of fork()). + +(Thanks to Nanbor Wang for working this out for us.) + +JCEJ - 08/01/1999 diff --git a/docs/tutorials/Chap_3/ex03.html b/docs/tutorials/Chap_3/ex03.html new file mode 100644 index 00000000000..743f0b395d2 --- /dev/null +++ b/docs/tutorials/Chap_3/ex03.html @@ -0,0 +1,115 @@ +<PRE> +<font color=red>// $Id$</font> + +<font color=blue>#include</font> "<font color=green>ace/Memory_Pool.h</font>" +<font color=blue>#include</font> "<font color=green>ace/Shared_Memory_MM.h</font>" +<font color=blue>#include</font> "<font color=green>ace/Malloc.h</font>" +<font color=blue>#include</font> "<font color=green>ace/Malloc_T.h</font>" +<font color=blue>#include</font> "<font color=green>ace/Thread_Manager.h</font>" + +<font color=blue>#define</font> <font color=purple>DATA_SIZE</font> 100 +<font color=blue>#define</font> <font color=purple>MESSAGE1</font> "<font color=green>Hiya over there client process</font>" +<font color=blue>#define</font> <font color=purple>MESSAGE2</font> "<font color=green>Did you hear me the first time?</font>" +LPCTSTR poolname="<font color=green>My_Pool</font>"; + +typedef ACE_Malloc<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex> Malloc_Allocator; + +static void * +server (void * = 0) +{ + ACE_MMAP_Memory_Pool_Options opt; + + <font color=red>//Create the memory allocator passing it the shared memory</font> + <font color=red>//pool that you want to use</font> + Malloc_Allocator shm_allocator(poolname,poolname,&opt); + + <font color=red>//Create a message, allocate memory for it and bind it with</font> + <font color=red>//a name so that the client can the find it in the memory</font> + <font color=red>//pool</font> + char* Message1=(char*)shm_allocator.malloc(strlen(MESSAGE1)+1); + + <font color=#008888>ACE_OS::strcpy</font>(Message1,MESSAGE1); + shm_allocator.bind("<font color=green>FirstMessage</font>",Message1); + ACE_DEBUG((LM_DEBUG,"<font color=green><<%s\n</font>",Message1)); + + <font color=red>//How about a second message</font> + char* Message2=(char*)shm_allocator.malloc(strlen(MESSAGE2)+1); + <font color=#008888>ACE_OS::strcpy</font>(Message2,MESSAGE2); + shm_allocator.bind("<font color=green>SecondMessage</font>",Message2); + ACE_DEBUG((LM_DEBUG,"<font color=green><<%s\n</font>",Message2)); + + <font color=red>//Set the Server to go to sleep for a while so that the client has</font> + <font color=red>//a chance to do its stuff</font> + ACE_DEBUG((LM_DEBUG, "<font color=green>Server done writing.. going to sleep zzz..\n\n\n</font>")); + <font color=#008888>ACE_OS::sleep</font>(10); + + ACE_DEBUG ((LM_DEBUG, "<font color=green>server exit\n</font>")); + + return 0; +} + +static void * +client (void * = 0) +{ + ACE_MMAP_Memory_Pool_Options opt; + + <font color=red>//Create the memory allocator passing it the shared memory</font> + <font color=red>//pool that you want to use</font> + Malloc_Allocator shm_allocator(poolname,poolname,&opt); + + <font color=red>//Lets get that first message. Notice that the find is looking up the</font> + <font color=red>//memory based on the "<font color=green>name</font>" that was bound to it by the server.</font> + void *Message1 = 0; + if(shm_allocator.find("<font color=green>FirstMessage</font>") == -1 ) + { + ACE_ERROR((LM_ERROR, + "<font color=green>Client ack\n</font>")); + return 0; + } + if(shm_allocator.find("<font color=green>FirstMessage</font>",Message1)==-1) + { + ACE_ERROR((LM_ERROR, + "<font color=green>Client: Problem cant find data that server has sent\n</font>")); + return 0; + } + + <font color=#008888>ACE_OS::printf</font>("<font color=green>>>%s\n</font>",(char*) Message1); + <font color=#008888>ACE_OS::fflush</font>(stdout); + + <font color=red>//Lets get that second message now.</font> + void *Message2; + if(shm_allocator.find("<font color=green>SecondMessage</font>",Message2)==-1) + { + ACE_ERROR((LM_ERROR, + "<font color=green>Client: Problem cant find data that server has sent\n</font>")); + <font color=#008888>ACE_OS::exit</font>(1); + } + <font color=#008888>ACE_OS::printf</font>("<font color=green>>>%s\n</font>",(char*)Message2); + <font color=#008888>ACE_OS::fflush</font>(stdout); + + ACE_DEBUG((LM_DEBUG,"<font color=green>Client done reading! BYE NOW\n</font>")); + <font color=#008888>ACE_OS::fflush</font>(stdout); + + <font color=red>//Get rid of all resources allocated by the server. In other</font> + <font color=red>//words get rid of the shared memory pool that had been</font> + <font color=red>//previously allocated</font> + shm_allocator.remove(); + + return 0; +} + +int main (int, char *argv[]) +{ + switch (*argv[1]) + { + case 's': + server (); + break; + default: + client (); + break; + } + + return 0; +} +</PRE> diff --git a/docs/tutorials/Chap_3/mm.cpp b/docs/tutorials/Chap_3/mm.cpp new file mode 100644 index 00000000000..2be56fbcc9a --- /dev/null +++ b/docs/tutorials/Chap_3/mm.cpp @@ -0,0 +1,113 @@ +// $Id$ + +#include "ace/Memory_Pool.h" +#include "ace/Shared_Memory_MM.h" +#include "ace/Malloc.h" +#include "ace/Malloc_T.h" +#include "ace/Thread_Manager.h" + +#define DATA_SIZE 100 +#define MESSAGE1 "Hiya over there client process" +#define MESSAGE2 "Did you hear me the first time?" +LPCTSTR poolname="My_Pool"; + +typedef ACE_Malloc<ACE_MMAP_MEMORY_POOL, ACE_Null_Mutex> Malloc_Allocator; + +static void * +server (void * = 0) +{ + ACE_MMAP_Memory_Pool_Options opt; + + //Create the memory allocator passing it the shared memory + //pool that you want to use + Malloc_Allocator shm_allocator(poolname,poolname,&opt); + + //Create a message, allocate memory for it and bind it with + //a name so that the client can the find it in the memory + //pool + char* Message1=(char*)shm_allocator.malloc(strlen(MESSAGE1)+1); + + ACE_OS::strcpy(Message1,MESSAGE1); + shm_allocator.bind("FirstMessage",Message1); + ACE_DEBUG((LM_DEBUG,"<<%s\n",Message1)); + + //How about a second message + char* Message2=(char*)shm_allocator.malloc(strlen(MESSAGE2)+1); + ACE_OS::strcpy(Message2,MESSAGE2); + shm_allocator.bind("SecondMessage",Message2); + ACE_DEBUG((LM_DEBUG,"<<%s\n",Message2)); + + //Set the Server to go to sleep for a while so that the client has + //a chance to do its stuff + ACE_DEBUG((LM_DEBUG, "Server done writing.. going to sleep zzz..\n\n\n")); + ACE_OS::sleep(10); + + ACE_DEBUG ((LM_DEBUG, "server exit\n")); + + return 0; +} + +static void * +client (void * = 0) +{ + ACE_MMAP_Memory_Pool_Options opt; + + //Create the memory allocator passing it the shared memory + //pool that you want to use + Malloc_Allocator shm_allocator(poolname,poolname,&opt); + + //Lets get that first message. Notice that the find is looking up the + //memory based on the "name" that was bound to it by the server. + void *Message1 = 0; + if(shm_allocator.find("FirstMessage") == -1 ) + { + ACE_ERROR((LM_ERROR, + "Client ack\n")); + return 0; + } + if(shm_allocator.find("FirstMessage",Message1)==-1) + { + ACE_ERROR((LM_ERROR, + "Client: Problem cant find data that server has sent\n")); + return 0; + } + + ACE_OS::printf(">>%s\n",(char*) Message1); + ACE_OS::fflush(stdout); + + //Lets get that second message now. + void *Message2; + if(shm_allocator.find("SecondMessage",Message2)==-1) + { + ACE_ERROR((LM_ERROR, + "Client: Problem cant find data that server has sent\n")); + ACE_OS::exit(1); + } + ACE_OS::printf(">>%s\n",(char*)Message2); + ACE_OS::fflush(stdout); + + ACE_DEBUG((LM_DEBUG,"Client done reading! BYE NOW\n")); + ACE_OS::fflush(stdout); + + //Get rid of all resources allocated by the server. In other + //words get rid of the shared memory pool that had been + //previously allocated + shm_allocator.remove(); + + return 0; +} + +int main (int, char *argv[]) +{ + switch (*argv[1]) + { + case 's': + server (); + break; + default: + client (); + break; + } + + return 0; +} diff --git a/docs/tutorials/colorize b/docs/tutorials/colorize index 60ffaae1348..ee61d4bfb14 100755 --- a/docs/tutorials/colorize +++ b/docs/tutorials/colorize @@ -2,6 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -w -S $0 ${1+"$@"}' & eval 'exec perl -S $0 $argv:q' if 0; +print "<PRE>\n"; while( <STDIN> ) { s/</\</g; @@ -14,5 +15,6 @@ while( <STDIN> ) s,\w+::\~?\w+,<font color=\#008888>$&</font>,; print STDOUT $_; } +print "</PRE>\n"; 0; |