98 if constexpr( W == ShMemSide::SHM_HOST && M == ShMemMode::SHM_RDONLY ) assert(
false);
101 if constexpr(W == ShMemSide::SHM_HOST){
102 OpenMode = O_CREAT | O_TRUNC;
103 }
else if constexpr(W == ShMemSide::SHM_CLIENT){
104 OpenMode =
static_cast<mode_t
>(0);
110 if constexpr (M == ShMemMode::SHM_RDONLY){
111 OpenMode |= O_RDONLY;
112 MmapMode = PROT_READ;
113 }
else if constexpr(M == ShMemMode::SHM_WRONLY){
115 MmapMode = PROT_WRITE;
116 }
else if constexpr(M == ShMemMode::SHM_RDWR){
118 MmapMode = PROT_READ | PROT_WRITE;
124 int fd = shm_open(ShMemName.c_str(), OpenMode, S_IRUSR | S_IWUSR);
128 if constexpr(W == ShMemSide::SHM_HOST){
129 ftruncate(fd,
sizeof(T)*S);
133 ShMem =
static_cast<T*
>( mmap(
nullptr,
sizeof(T)*S, MmapMode, MAP_SHARED, fd, 0) );
134 assert(ShMem != MAP_FAILED);
137 if constexpr(M == ShMemMode::SHM_WRONLY || M == ShMemMode::SHM_RDWR){
139 memset(ShMem, 0,
sizeof(T)*S);