
Hi all I have a problem using managed_shared_memory , I can only read strings that has size less that 16 characters. This is my server code ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #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

AMDG med ennemri wrote:
I have a problem using managed_shared_memory , I can only read strings that has size less that 16 characters.
This is my server code
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <boost/interprocess/managed_shared_memory.hpp> #include <utility> #include <iostream>
int main () { using namespace boost::interprocess; typedef std::pair<std::string, int> FileState;
You need to use boost::interprocess::basic_string parameterized with the correct allocator. It works for small string because of SBO, (i.e. small srings are stored within the string class itself, and do not allocate any memory.). In Christ, Steven Watanabe

Thanks, that resolves my problem. 2010/3/18 Steven Watanabe <watanabesj@gmail.com>
AMDG
med ennemri wrote:
I have a problem using managed_shared_memory , I can only read strings that has size less that 16 characters.
This is my server code
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <boost/interprocess/managed_shared_memory.hpp> #include <utility> #include <iostream>
int main () { using namespace boost::interprocess; typedef std::pair<std::string, int> FileState;
You need to use boost::interprocess::basic_string parameterized with the correct allocator. It works for small string because of SBO, (i.e. small srings are stored within the string class itself, and do not allocate any memory.).
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
med ennemri
-
Steven Watanabe