63 MMAPParent(uint32_t comp_id,
size_t numBuffers,
size_t bufferSize, uint32_t expectedChildren = 1) :
68 memset(key,
'\0',
sizeof(key));
70 snprintf(key,
sizeof(key),
"/tmp/sst_shmem_%u-%" PRIu32
"-%d", getpid(), comp_id, rand());
73 fd = open(filename.c_str(), O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
81 }
while ( (fd < 0) && (errno == EEXIST) );
85 fprintf(stderr,
"Failed to create IPC region '%s': %s\n", filename.c_str(), strerror(errno));
89 tunnel =
new TunnelType(numBuffers, bufferSize, expectedChildren);
90 shmSize = tunnel->getTunnelSize();
92 if ( ftruncate(fd, shmSize) ) {
94 fprintf(stderr,
"Resizing shared file '%s' failed: %s\n", filename.c_str(), strerror(errno));
98 shmPtr = mmap(
nullptr, shmSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
99 if ( shmPtr == MAP_FAILED ) {
101 fprintf(stderr,
"mmap failed: %s\n", strerror(errno));
106 memset(shmPtr,
'\0', shmSize);
107 tunnel->initialize(shmPtr);