#include #include #include #include #include int main( void ) { union semun { int value; struct semid_ds *stat; unsigned short int *array; struct seminfo *info; } control; key_t key; int flag,semid; struct sembuf sems; key = ftok( "/tmp",'k'+'m' ); flag = IPC_CREAT | S_IRUSR | S_IWUSR; semid = semget( key,1,flag); control.value =+1; semctl( semid,0x0,SETVAL,control ); sems.sem_num = 0; sems.sem_flg = 0x0; switch( (int)fork() ) { case -1: perror( "...fork()...\t" ); exit( 1 ); break; case 0: sems.sem_op =-1; semop( semid,&sems,1 ); printf( "...child...\t:%u\n",(unsigned)getpid() ); sems.sem_op =+2; semop( semid,&sems,1 ); break; default: sems.sem_op =-2; semop( semid,&sems,1 ); printf( "...master...\t:%u\n",(unsigned)getpid() ); sems.sem_op =+1; semop( semid,&sems,1 ); break; } semctl( semid,0x0,IPC_RMID ); return 0; }