Ticket #6265: example.cpp

File example.cpp, 2.4 KB (added by fandreasi@…, 11 years ago)
Line 
1#include <boost/interprocess/managed_shared_memory.hpp>
2#include <boost/interprocess/containers/vector.hpp>
3#include <boost/interprocess/containers/string.hpp>
4#include <boost/interprocess/allocators/allocator.hpp>
5
6int main ()
7{
8 using namespace boost::interprocess;
9 //Typedefs
10 typedef allocator<char, managed_shared_memory::segment_manager>
11 CharAllocator;
12 typedef basic_string<char, std::char_traits<char>, CharAllocator>
13 MyShmString;
14 typedef allocator<MyShmString, managed_shared_memory::segment_manager>
15 StringAllocator;
16 typedef vector<MyShmString, StringAllocator>
17 MyShmStringVector;
18
19 //Open shared memory
20 //Remove shared memory on construction and destruction
21 struct shm_remove
22 {
23 shm_remove() { shared_memory_object::remove("MySharedMemory"); }
24 ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
25 } remover;
26
27 managed_shared_memory shm(create_only, "MySharedMemory", 10000);
28
29 //Create allocators
30 CharAllocator charallocator (shm.get_segment_manager());
31 StringAllocator stringallocator(shm.get_segment_manager());
32
33 //This string is in only in this process (the pointer pointing to the
34 //buffer that will hold the text is not in shared memory).
35 //But the buffer that will hold "this is my text" is allocated from
36 //shared memory
37 MyShmString mystring(charallocator);
38 mystring = "this is my text";
39
40 //This vector is only in this process (the pointer pointing to the
41 //buffer that will hold the MyShmString-s is not in shared memory).
42 //But the buffer that will hold 10 MyShmString-s is allocated from
43 //shared memory using StringAllocator. Since strings use a shared
44 //memory allocator (CharAllocator) the 10 buffers that hold
45 //"this is my text" text are also in shared memory.
46 MyShmStringVector myvector(stringallocator);
47 myvector.insert(myvector.begin(), 10, mystring);
48
49 //This vector is fully constructed in shared memory. All pointers
50 //buffers are constructed in the same shared memory segment
51 //This vector can be safely accessed from other processes.
52 MyShmStringVector *myshmvector =
53 shm.construct<MyShmStringVector>("myshmvector")(stringallocator);
54 myshmvector->insert(myshmvector->begin(), 10, mystring);
55
56 //Destroy vector. This will free all strings that the vector contains
57 shm.destroy_ptr(myshmvector);
58 return 0;
59}