25 name = name.erase(0, 1);
27 std::string str_buf =
"/shm_" + regex_replace(name, std::regex(
"/"),
"_");
28 return shm_unlink(str_buf.c_str());
32 SharedMemory::SharedMemory(
int oflag, PERM perm)
43 SharedMemory::getSize()
const
50 SharedMemory::getPtr()
55 SharedMemoryPosix::SharedMemoryPosix(std::string name,
int oflag, PERM perm)
56 : SharedMemory(oflag, perm)
59 if (shm_name[0] ==
'/')
61 shm_name = shm_name.erase(0, 1);
66 SharedMemoryPosix::~SharedMemoryPosix()
76 SharedMemoryPosix::connect(
size_t size)
78 std::string str_buf =
"/shm_" + regex_replace(shm_name, std::regex(
"/"),
"_");
80 shm_fd = shm_open(str_buf.c_str(), shm_oflag,
static_cast<mode_t
>(shm_perm));
89 shm_size = stat.st_size;
92 if (stat.st_size < shm_size)
94 if (ftruncate(shm_fd, shm_size) < 0)
96 throw std::runtime_error(
"shm::getMemory(): Could not change shared memory size!");
102 shm_ptr =
reinterpret_cast<unsigned char *
>(mmap(NULL,
104 PROT_READ|PROT_WRITE,
109 if (shm_ptr == MAP_FAILED) {
120 SharedMemoryPosix::disconnect()
127 SharedMemoryPosix::isDisconnected()
const
135 fstat(shm_fd, &stat);
136 if (stat.st_nlink <= 0)
共有メモリへのアクセス方法やリングバッファなどの基本的なクラスの定義
int disconnectMemory(std::string name)
共有メモリを破棄する(POSIX版)