13 #define SEM_NAME "/semtst"
15 int test_unnamed(void);
25 printf("testing unnamed process-shared semaphore\n");
26 s = (sem_t *)mmap(NULL, sizeof(sem_t), PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED,
29 err(1, "mmap failed");
30 if (sem_init(s, 1, 0))
31 err(2, "sem_init failed");
32 if ((pid = fork()) == 0) {
33 printf("child: sem_wait()\n");
35 err(3, "sem_wait failed");
36 printf("child: sem_wait() returned\n");
40 printf("parent: sem_post()\n");
42 err(4, "sem_post failed");
43 waitpid(pid, &status, 0);
44 if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
59 printf("testing named process-shared semaphore\n");
61 s = sem_open(SEM_NAME, O_CREAT, 0777, 0);
63 err(1, "sem_open failed");
64 s2 = sem_open(SEM_NAME, O_CREAT, 0777, 0);
66 err(2, "second sem_open call failed");
69 "two sem_open calls for same semaphore do not return same address");
71 err(4, "sem_close failed");
72 if ((pid = fork()) == 0) {
73 printf("child: sem_wait()\n");
75 err(5, "sem_wait failed");
76 printf("child: sem_wait() returned\n");
80 printf("parent: sem_post()\n");
82 err(6, "sem_post failed");
83 waitpid(pid, &status, 0);
84 if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
91 err(7, "sem_close failed");