#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 memory
sharedmem1.truncate (256);
// map the shared memory to current process
mapped_region mmap (sharedmem1, read_write);
// access the mapped region using get_address
std::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 space
mapped_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