I have a problem using managed_shared_memory , I can only read strings that has size less that 16 characters.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <boost/interprocess/managed_shared_memory.hpp>
#include <utility>
#include <iostream>
int main ()
{
using namespace boost::interprocess;
typedef std::pair<std::string, int> FileState;
try{
shared_memory_object::remove("MySharedMemory");
managed_shared_memory segment(create_only, "MySharedMemory", 655360);
std::string str1 = "aaaaaaaaaaaaaaabbb";//client can only read <16 sized strings
std::string str2 = "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
std::string str3 = "caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
std::string *instance1 = segment.construct<std::string>("1")(str1);
std::string *instance2 = segment.construct<std::string>("2")(str2);
std::string *instance3 = segment.construct<std::string>("3")(str3);
while(segment.get_num_named_objects() > 0)
std::cout<<"Memory is ready"<<std::endl;
}
catch(...){
shared_memory_object::remove("MySharedMemory");
throw;
}
shared_memory_object::remove("MySharedMemory");
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Here is my client code
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <boost/interprocess/managed_shared_memory.hpp>
#include <cstddef>
#include <utility>
#include <cassert>
#include <iostream>
#include <fstream>
int main (int argc, char *argv[])
{
using namespace boost::interprocess;
try{
managed_shared_memory segment(open_only, "MySharedMemory");
std::pair<std::string*, std::size_t> res;
int a = 1;
std::ostringstream oss;
oss<<a;
res = segment.find<std::string> (const_cast<char*>(oss.str().c_str()));
if(res.second != 0)
{
std::cout<<*(res.first)<<std::endl;
segment.destroy<std::string>(const_cast<char*>(oss.str().c_str()));
}
}
catch(...){
shared_memory_object::remove("MySharedMemory");
throw;
}
shared_memory_object::remove("MySharedMemory");
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Best Regards