////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztaņaga 2004-2007. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/interprocess for documentation. // ////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include "named_creation_template.hpp" #include //for strcmp, memset #include //for cout static const std::size_t ShmSize = 1000; static const char * ShmName = "shared_memory"; struct eraser { ~eraser() { boost::interprocess::shared_memory_object::remove(ShmName); } }; //This wrapper is necessary to have a common constructor //in generic named_creation_template functions class shared_memory_creation_test_wrapper : public eraser , public boost::interprocess::detail::managed_open_or_create_impl { typedef boost::interprocess::detail::managed_open_or_create_impl shared_memory; public: shared_memory_creation_test_wrapper(boost::interprocess::detail::create_only_t) : shared_memory(boost::interprocess::create_only, ShmName, ShmSize) {} shared_memory_creation_test_wrapper(boost::interprocess::detail::open_only_t) : shared_memory(boost::interprocess::open_only, ShmName) {} shared_memory_creation_test_wrapper(boost::interprocess::detail::open_or_create_t) : shared_memory(boost::interprocess::open_or_create, ShmName, ShmSize) {} }; int main () { using namespace boost::interprocess; typedef detail::managed_open_or_create_impl shared_memory; try{ shared_memory_object::remove(ShmName); test::test_named_creation(); //Create and get name, size and address { shared_memory_object::remove(ShmName); shared_memory shm1(create_only, ShmName, ShmSize); //Compare name if(std::strcmp(shm1.get_name(), ShmName) != 0){ return 1; } //Overwrite all memory std::memset(shm1.get_address(), 0, shm1.get_size()); } } catch(std::exception &ex){ shared_memory_object::remove(ShmName); std::cout << ex.what() << std::endl; } shared_memory_object::remove(ShmName); return 0; } #include