//--------------------------------------------------------- // com_shm.cc //--------------------------------------------------------- #include "check.h" // check #include // strlen #include // cout #include // ftok, shmget, shmat #include // wait #include // fork //--------------------------------------------------------- int main() { int key = check(ftok("/tmp", 3)); int shmid = check(shmget(key, 100, IPC_CREAT | 0600)); char *s = nullptr; if (check(fork())) // parent/reader { wait(nullptr); // wait for child s = static_cast(check(shmat(shmid, nullptr, 0))); std::cout << "parent/reader: " << s << std::endl; } else // child/writer { s = static_cast(check(shmat(shmid, nullptr, 0))); std::cout << " child/writer: "; for (char c = 'a'; c <= 'z'; ++c) std::cout << (*s++ = c); *s = 0; // string ending '\0' std::cout << std::endl; } } //---------------------------------------------------------