#include #include #include #include #include #include #include int main( int argc,char** argv ) { sem_t *id; pid_t child; int status; id = sem_open( "szlaban",O_CREAT,S_IRUSR|S_IWUSR,0 ); switch( (int)(child=fork()) ) { case -1: perror("...fork()..."); exit( 1 ); break; case 0: ...kod dla potomka printf("*** [%u] potomek czeka na semafor (%p)\n",(unsigned)getpid(),id); sem_wait( id ); printf( "*** [%u] potomek zakończył\n",(unsigned)getpid() ); exit( 0 ); default: ...kod dla procesu nadrzędnego printf( "*** [%u] ustawia semafor (%p)\n",(unsigned)getpid(),id ); sem_post( id ); if( !wait( &status ) ){ perror( "... wait()..." ); exit( 2 ); } else { printf( "*** [%u] wygląda, że to wszystko\n",(unsigned)getpid() ); sem_close( id ); sem_unlink( "szlaban" ); } } return 0; }