#include "sem.c" doit(semkey) key_t semkey; { int semid,pid; pid=getpid(); printf("before semaphore %d\n",pid); if((semid = initsem(semkey))==-1) perror("semaphore exists"); else { printf("calling p(%d) for pid=%d\n",semid,pid); p(semid); printf("pid=%d in critical section\n",pid); printf("going to sleep %d\n",pid); sleep(10); printf("done sleep %d\n",pid); printf("pid=%d leaving critical section\n",pid); printf("calling v(%d) for pid=%d\n",semid,pid); v(semid); printf("after semaphore %d\n",pid); exit(0); } } main() { key_t semkey = 0x200; /* changed key to 0x60 from 0x200 -> allowed permission to semaphore, made semid=1 instead of semid=0 reason in man semctl */ if(fork()==0) { printf("f1 got id %d",getpid()); doit(semkey); } if(fork()==0) { printf("f2 got id %d",getpid()); doit(semkey); } if(fork()==0) doit(semkey); }