windows_shared_memory_mapping_test.cpp

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

CPP
130
字号
////////////////////////////////////////////////////////////////////////////////// (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>#ifdef BOOST_WINDOWS#include <fstream>#include <iostream>#include <boost/interprocess/windows_shared_memory.hpp>#include <boost/interprocess/mapped_region.hpp>#include <string>#include "get_process_id_name.hpp"using namespace boost::interprocess;int main (){   try{      const char *names[2] = { test::get_process_id_name(), 0 };      for(unsigned int i = 0; i < sizeof(names)/sizeof(names[0]); ++i)      {         const std::size_t FileSize = 99999*2;         //Create a file mapping         windows_shared_memory mapping            (create_only, names[i], read_write, FileSize);         {            //Create two mapped regions, one half of the file each            mapped_region region (mapping                                 ,read_write                                 ,0                                 ,FileSize/2                                 ,0);            mapped_region region2(mapping                                 ,read_write                                 ,FileSize/2                                 ,FileSize - FileSize/2                                 ,0);            //Fill two regions with a pattern               unsigned char *filler = static_cast<unsigned char*>(region.get_address());            for(std::size_t i = 0               ;i < FileSize/2               ;++i){               *filler++ = static_cast<unsigned char>(i);            }            filler = static_cast<unsigned char*>(region2.get_address());            for(std::size_t i = FileSize/2               ;i < FileSize               ;++i){               *filler++ = static_cast<unsigned char>(i);            }         }         //See if the pattern is correct in the file using two mapped regions         {            mapped_region region (mapping, read_only, 0, FileSize/2, 0);            mapped_region region2(mapping, read_only, FileSize/2, FileSize - FileSize/2, 0);            unsigned char *checker = static_cast<unsigned char*>(region.get_address());            //Check pattern            for(std::size_t i = 0               ;i < FileSize/2               ;++i){               if(*checker++ != static_cast<unsigned char>(i)){                  return 1;               }            }            //Check second half            checker = static_cast<unsigned char *>(region2.get_address());            //Check pattern            for(std::size_t i = FileSize/2               ;i < FileSize               ;++i){               if(*checker++ != static_cast<unsigned char>(i)){                  return 1;               }            }         }         //Now check the pattern mapping a single read only mapped_region         {            //Create a single regions, mapping all the file            mapped_region region (mapping, read_only);            //Check pattern            unsigned char *pattern = static_cast<unsigned char*>(region.get_address());            for(std::size_t i = 0               ;i < FileSize               ;++i, ++pattern){               if(*pattern != static_cast<unsigned char>(i)){                  return 1;               }            }         }      }   }   catch(std::exception &exc){      //shared_memory_object::remove(test::get_process_id_name());      std::cout << "Unhandled exception: " << exc.what() << std::endl;      return 1;   }   return 0;}#elseint main(){   return 0;}#endif#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

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