
Process1.cpp #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/allocator.hpp> #include <boost/interprocess/containers/map.hpp> #include <boost/interprocess/containers/string.hpp> #include <iostream> #include <vector> #include <fstream> using namespace boost::interprocess; typedef managed_shared_memory::segment_manager segment_manager_t; typedef allocator<void, segment_manager_t> void_allocator; typedef allocator<char, segment_manager_t> char_allocator; typedef basic_string<char, std::char_traits<char>, char_allocator> char_string; typedef std::pair<const char_string, char_string> map_value_type; typedef allocator<map_value_type, segment_manager_t> map_value_type_allocator; typedef multimap< char_string, char_string, std::less<char_string>, map_value_type_allocator> complex_map_type; std::string trim(const char *str) { std::string ptr; int i,j=0; for(i=0;str[i]!='\0';i++) { if (str[i] != ' ' && str[i] != '\t') ptr += str[i]; } return ptr; } int main (int argc, char* argv[]) { using namespace std; const char* MySharedMemory= "MySharedMemory"; shared_memory_object::remove(MySharedMemory); // It works fine but when put on comment then managed_shared_memory segment(open_or_create,MySharedMemory, 999999999); void_allocator alloc_inst (segment.get_segment_manager()); complex_map_type *mymap = segment.construct<complex_map_type>("MyMap")(std::less<char_string>(), alloc_inst); std::cout << mymap->size() << std::endl; ifstream in(argv[1]); char line[1000]; char recline[100]; int index = 0; while(in) { in.getline(line,1000); int len = strlen(line); strcpy(recline,line); if(in) { std::stringstream ss; //std::cout << index << endl; ss<< index; char name[1000]; strcpy(name, "1:"); std::cout << name << endl; char* pch; pch = strtok(line,"\t"); vector <const char*> vec; while(pch != NULL) { vec.push_back(pch); pch = strtok(NULL,"\t"); } std::string y = trim(vec[vec.size()-1]); std::cout << y << endl; char_string cs(y.c_str(), alloc_inst); strcat(name, (ss.str()).c_str()); char_string indexvalue(name, alloc_inst); std::cout << cs << "\t" << indexvalue << std::endl; mymap->insert(std::pair<char_string, char_string>(cs,indexvalue)); index += len; index += 1; } } return 0; } It works fine if i create a new sharedmemroy and use it but when i run this code again by putting comment on shared_memory_object::remove(MySharedMemory) to use the existing Sharedmemory and map in it. Exception terminate called after throwing an instance of 'boost::interprocess::interprocess_exception' what(): boost::interprocess_exception::library_error Aborted What is the reason for this? And how can i overcome such pblm? Thanks in advance. Christoph Gysin-3 wrote:
2009/10/22 manish4gupta <manish@synamatix.com>:
I am working on shared memory. I am successful in using it but I am trying
Please provide more detailed information about your problem. Add a short (compilable) example demonstrating the problem, including the complete error message. Also provide information about your operating system, compiler, etc...
Don't just post the same question again. Thanks.
Chris -- echo mailto: NOSPAM !#$.'<*>'|sed 's. ..'|tr "<*> !#:2" org@fr33z3 _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- View this message in context: http://www.nabble.com/Information-about-create_only-and-open_or_create-tp259... Sent from the Boost - Users mailing list archive at Nabble.com.