1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/libs/interprocess for documentation. 8 // 9 ////////////////////////////////////////////////////////////////////////////// 10 #include <boost/interprocess/detail/config_begin.hpp> 11 #include <boost/interprocess/detail/workaround.hpp> 12 //[doc_offset_ptr 13 #include <boost/interprocess/managed_shared_memory.hpp> 14 #include <boost/interprocess/offset_ptr.hpp> 15 //<- 16 #include "../test/get_process_id_name.hpp" 17 //-> 18 19 using namespace boost::interprocess; 20 21 //Shared memory linked list node 22 struct list_node 23 { 24 offset_ptr<list_node> next; 25 int value; 26 }; 27 main()28int main () 29 { 30 //Remove shared memory on construction and destruction 31 struct shm_remove 32 { 33 //<- 34 #if 1 35 shm_remove() { shared_memory_object::remove(test::get_process_id_name()); } 36 ~shm_remove(){ shared_memory_object::remove(test::get_process_id_name()); } 37 #else 38 //-> 39 shm_remove() { shared_memory_object::remove("MySharedMemory"); } 40 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } 41 //<- 42 #endif 43 //-> 44 } remover; 45 //<- 46 (void)remover; 47 //-> 48 49 //Create shared memory 50 //<- 51 #if 1 52 managed_shared_memory segment(create_only, 53 test::get_process_id_name(), //segment name 54 65536); 55 #else 56 //-> 57 managed_shared_memory segment(create_only, 58 "MySharedMemory", //segment name 59 65536); 60 //<- 61 #endif 62 //-> 63 64 //Create linked list with 10 nodes in shared memory 65 offset_ptr<list_node> prev = 0, current, first; 66 67 int i; 68 for(i = 0; i < 10; ++i, prev = current){ 69 current = static_cast<list_node*>(segment.allocate(sizeof(list_node))); 70 current->value = i; 71 current->next = 0; 72 73 if(!prev) 74 first = current; 75 else 76 prev->next = current; 77 } 78 79 //Communicate list to other processes 80 //. . . 81 //When done, destroy list 82 for(current = first; current; /**/){ 83 prev = current; 84 current = current->next; 85 segment.deallocate(prev.get()); 86 } 87 return 0; 88 } 89 //] 90 #include <boost/interprocess/detail/config_end.hpp> 91