?? shared_header.cc
字號:
// file: test/shared_header.cc// author: Marc Bumble// Mon Aug 11, 2003// Memory allocator code for shared memory access// Copyright (C) 2003 by Marc D. Bumble// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.#include <shared_memory.h>#include <allocator_bit_vector.h>#include <fstream> // for std::ofstream to()char key_val1[] = "/allocate_key";// char key_val2[] = "/tmp/.allocate_key2";int main(int argc, char **argv) { int passed=0, failed=0; enum { num_of_pages = 1000, page_size = 8*1024, bit_vector_size = 1000/8 + 1 }; // First, make sure that the shared memory segment are not in use // during the test. // shm_unlink(key_val1);// create memory for the shared memory header // simulate the page sizes int buff_size = num_of_pages*page_size + sizeof(mem_space::shared_memory_header_t) + bit_vector_size; unsigned char buffer[buff_size]; mem_space::shared_memory_header_t* smh = new(buffer)mem_space::shared_memory_header_t(1000, 8*1024, key_val1, (int) buffer, buff_size, 0); // proj_id// key_val1, std::cerr << "----------------------------------------" << std::endl; std::cerr << "Shared memory header test. " << std::endl; smh->mark_pages(0,5); std::cerr << "\tMarking pages 0 through 4" << std::endl; int start_page = smh->find_free_pages(4); std::cerr << "\tFinding 4 free pages" << std::endl; if (start_page==5) passed++; else failed++; smh->clear_pages(2,3); std::cerr << "\tClearing pages 2 through 4" << std::endl; start_page = smh->find_free_pages(3); std::cerr << "\tFind 3 free pages" << std::endl; if (start_page==2) passed++; else failed++; smh->mark_pages(0,num_of_pages-3); std::cerr << "\tMarking pages 0 through " << num_of_pages-3 << std::endl; start_page = smh->find_free_pages(3); std::cerr << "\tFinding 3 free pages" << std::endl; if (start_page==num_of_pages-3) passed++; else failed++; std::cerr << "\tTesting page offset." << std::endl; int page_offset = smh->get_page_offset(1); if (page_offset == static_cast<int>(sizeof(mem_space::shared_memory_header_t) + smh->get_bit_vec_size() + 1*page_size)) passed++; else failed++; std::cerr << "\tTesting page offset." << std::endl; page_offset = smh->get_page_offset(num_of_pages-1); if (page_offset == static_cast<int>(sizeof(mem_space::shared_memory_header_t) + smh->get_bit_vec_size() + (num_of_pages-1)*page_size)) passed++; else failed++; smh->set_key("/key_name_is_not_path"); char key_name[512]; smh->get_key(key_name); std::cerr << "\tPath name test: " << key_name << std::endl; // Destruct the shared memory head which was constructed with new above // Cleans up the semaphores smh->~shared_memory_header_t(); std::cerr << "Passed: " << passed << std::endl; std::cerr << "Failed: " << failed << std::endl; std::cerr << "----------------------------------------" << std::endl; return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -