00001
00005 #include <string>
00006 #include <iostream>
00007 #include <sstream>
00008
00009 #include "shm_segment.h"
00010 #include "shm_mmap.h"
00011 #include "shm_ptr.h"
00012 #include "scoped_lock.h"
00013 #include "shm_allocator.h"
00014 #include "shm_message.h"
00015 #include "shm_queue.h"
00016
00017 void reportInitialization( shm_segment *seg_addr, shm_queue<shm_message> *q_addr );
00018
00019 int main(int argc, char*argv[]) {
00020 int segment_key = 30000;
00021 int segment_size = 61440;
00022 int segment_perm = 01640;
00023 unsigned int queue_size = 3000;
00024 int message_count = 0;
00025 shm_segment seg( segment_key, segment_size, segment_perm );
00026 shm_allocator a( seg );
00027 shm_queue<shm_message> q( a, queue_size );
00028 reportInitialization( &seg, &q ) ;
00029
00030 while ( true ) {
00031 std::cout
00032 << "enter a message: "
00033 << std::flush;
00034 std::string line;
00035 std::getline( std::cin, line );
00036
00037 shm_message* m = new ( a ) shm_message;
00038 m->sequence_num = message_count++;
00039 m->message.reset( static_cast<char*>( a.alloc( line.size() + 1 ) ), seg );
00040 strcpy( m->message.get(seg), line.c_str() );
00041 q.push( shm_ptr<shm_message>( m, seg ) );
00042 std::cout
00043 << "message id : "
00044 << q.size()
00045 << ", message address : "
00046 << m
00047 << std::endl;
00048 }
00049 }
00050
00051 void reportInitialization( shm_segment *seg_addr, shm_queue<shm_message> *q_addr )
00052 {
00053 std::cout
00054 << "segment id : "
00055 << seg_addr->get_id()
00056 << std::endl
00057 << std::flush;
00058 std::cout
00059 << "segment address : "
00060 << seg_addr
00061 << std::endl
00062 << std::flush;
00063 std::cout
00064 << "queue address : "
00065 << q_addr
00066 << std::endl
00067 << std::flush;
00068 }
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082