Boost logo

Boost Users :

Subject: [Boost-users] Writing a dynamic string into a shared memory using Boost Library
From: Hany Assasa (hany.assasa_at_[hidden])
Date: 2014-06-08 19:59:52


I want to share a dynamic array of characters between two processes using
Boost Shared Memory. I use the following two pieces of code to do that:

*Producer Process:*

char *data;unsigned int share_length;unsigned int offset;
std::string data_to_share(data + offset, data + offset + share_length);

boost::interprocess::managed_shared_memory
managed_shm(boost::interprocess::create_only,
                                            "SomeName",
1024*1024);typedef boost::interprocess::allocator<char,
boost::interprocess::managed_shared_memory::segment_manager>
CharAllocator;typedef boost::interprocess::basic_string<char,
std::char_traits<char>, CharAllocator> my_string;

managed_shm.construct<my_string>("DataToShare")(data_to_share.c_str(),
managed_shm.get_segment_manager());

 *Consumer Process:*

boost::interprocess::managed_shared_memory
managed_shm(boost::interprocess::open_read_only, "SomeName");typedef
boost::interprocess::allocator<char,
boost::interprocess::managed_shared_memory::segment_manager>
CharAllocator;typedef boost::interprocess::basic_string<char,
std::char_traits<char>, CharAllocator> my_string;

std::pair<my_string *, size_t > data =
managed_shm.find<my_string>("DataToShare");

cout << "Data Size=" << data.first->length() << endl;

 The problem is when I try to print the length of the DataToShare in the
Consumer Process it is wrong, so what is the problem in my code, is it in
the Producer Part since I am doing data_to_share.c_str()which is a
std::string type instead of of my_string type?

*Possible Answer:*

I believe the answer to my question is, converting std::string into
my_string type. so can anyone tell me how to do that?



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net