#include #include #include #include #include #include struct data { sem_t sem; } *data; int main() { int fd = shm_open("/myData", O_RDWR | O_CREAT | O_EXCL, 0666); char createSucceeded = (fd != -1); if (fd == -1) fd = shm_open("/myData", O_RDWR, 0666); if (fd == -1) { perror("shm_open"); exit(1); } ftruncate(fd, sizeof(struct data)); data = mmap(NULL, sizeof(struct data), PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0); if (createSucceeded) sem_init(&data->sem, 1, 1); sem_wait(&data->sem); printf("I'm alone here!\n"); sem_post(&data->sem); return 0; }