shared_memory_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 94 行

CPP
94
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 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 <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/shared_memory_object.hpp>#include <boost/interprocess/detail/managed_open_or_create_impl.hpp>#include <boost/interprocess/exceptions.hpp>#include "named_creation_template.hpp"#include <cstring>   //for strcmp, memset#include <iostream>  //for cout#include <string>#include "get_process_id_name.hpp"using namespace boost::interprocess;static const std::size_t ShmSize = 1000;static const char *      ShmName = test::get_process_id_name();struct eraser{   ~eraser()   {      shared_memory_object::remove(ShmName);   }};//This wrapper is necessary to have a common constructor//in generic named_creation_template functionsclass shared_memory_creation_test_wrapper   : public eraser   , public detail::managed_open_or_create_impl<shared_memory_object>{   typedef detail::managed_open_or_create_impl<shared_memory_object> shared_memory;   public:   shared_memory_creation_test_wrapper(create_only_t)      :  shared_memory(create_only, ShmName, ShmSize)   {}   shared_memory_creation_test_wrapper(open_only_t)      :  shared_memory(open_only, ShmName)   {}   shared_memory_creation_test_wrapper(open_or_create_t)      :  shared_memory(open_or_create, ShmName, ShmSize)   {}};int main (){   typedef detail::managed_open_or_create_impl<shared_memory_object> shared_memory;   try{      shared_memory_object::remove(ShmName);      test::test_named_creation<shared_memory_creation_test_wrapper>();      //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_user_address(), 0, shm1.get_user_size());         //Now test move semantics         shared_memory move_ctor(detail::move_impl(shm1));         shared_memory move_assign;         move_assign = detail::move_impl(move_ctor);      }   }   catch(std::exception &ex){      shared_memory_object::remove(ShmName);      std::cout << ex.what() << std::endl;      return 1;   }   shared_memory_object::remove(ShmName);   return 0;}#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?