shmget() is not able to 'find' an existing shared memory segment unless the 'flags' argument is set to '0'. This is a bug. If flags = 0666 (or at least compatible with the permissions set when the segment was created), it should still be able to find and use the segment.
The test program: #include <sys/shm.h> #include <errno.h> #define CHLD_MODE 0666 int main(int argc, char **argv) { int pid = fork(); int id; if (pid == 0) { sleep(5); id = shmget(1, 100, CHLD_MODE); printf("child (%d): %d (%d)\n", getpid(), id, errno); } else { id = shmget(1, 100, IPC_CREAT | 0666); printf("parent (%d): %d (%d)\n", getpid(), id, errno); sleep(10); shmctl(id, IPC_RMID, 0); } return (0); } Produces the following output: parent (35492): 196609 (0) child (3876): 0 (0) This shows that: 1. The parent created the shared memory segment and got back its ID (196609). 2. The child process tried to attach to the parent's shared memory segment (using the same key = 1), but shmget() returned 0 with no error! However, if CHLD_MODE is set to 0 in the code above, then: parent (34084): 393216 (0) child (11232): 393216 (0) Which shows that the child did find the parent's shared memory segment. ===== Jerry D. Hedden << If you're not having fun, then you're not doing it right! >> -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/