#include #include #include #include #include key_t key; child() { int id = semget(key, 1, IPC_CREAT|SEM_R|SEM_A); struct sembuf s; s.sem_num = 0; s.sem_op = 1; s.sem_flg = SEM_UNDO; semop(id, &s, 1); sleep(5); exit(0); } main(argc, argv) int argc; char *argv[]; { int pid; int id; int x; key = ftok("/tmp/usema", 0); id = semget(key, 1, IPC_CREAT|SEM_R|SEM_A); x = semctl(id, 0, GETVAL); printf("Oldval %d\n", x); pid = fork(); if (pid == 0) { return child(); } wait(&x); x = semctl(id, 0, GETVAL); printf("Newval %d\n", x); /* WITNESS */ }