Boost IPC(interprocess)实现内存共享

来源:互联网 发布:mac alias 永久生效 编辑:程序博客网 时间:2024/06/05 20:53
#include <boost/interprocess/managed_shared_memory.hpp>#include <boost/interprocess/mapped_region.hpp>#include <cstring>#include <iostream>using namespace boost::interprocess;int main(){try { // creating our first shared memory object.shared_memory_object sharedmem1 (create_only, "Hello", read_write);// setting the size of the shared memorysharedmem1.truncate (256);// map the shared memory to current process mapped_region mmap (sharedmem1, read_write); // access the mapped region using get_addressstd::strcpy(static_cast<char* >(mmap.get_address()), "Hello World!\n");// … more code follows} catch (interprocess_exception& e){ std::cout << e.what() << std::endl;}return 1;}

 

上面的程序实现创建共享内存,下面的实现访问

#include <boost/interprocess/managed_shared_memory.hpp>#include <boost/interprocess/mapped_region.hpp>#include <cstring>#include <iostream>using namespace boost::interprocess;int main(int argc, char *argv[ ]){using namespace boost::interprocess; try { // opening an existing shared memory object shared_memory_object sharedmem2 (open_only, "Hello", read_only);// map shared memory object in current address spacemapped_region mmap (sharedmem2, read_only);// need to type-cast since get_address returns void* char *str1 = static_cast<char*> (mmap.get_address());std::cout << str1 << std::endl;shared_memory_object::remove("Hello");} catch (interprocess_exception& e) { std::cout << e.what( ) << std::endl;} return 0;}

多次执行,内存被删除,而使得无法访问
测试VS2008+boost1.47

	
				
		
原创粉丝点击