#include #include #include #include #include #include int main( void ) { int status; key_t semkey; //... zmienne opisujące int nsems,semflag,semid; // tworzoną tablicę semaforów struct sembuf sems; //... struktura dla semop() nsems = 1; //... tworzymy tablicę semaforów, z jednym semaforem semkey = ftok( "/tmp",'k'+'m' ); semflag = IPC_CREAT | S_IRUSR | S_IWUSR; semid = semget( semkey,nsems,semflag ); sems.sem_num = 0; //... indeks do semafora, pierwszy=0 ! sems.sem_op = 7; //... może współdzielić 7 procesów sems.sem_flg = 0x0; //... czyli z blokadą semop( semid,&sems,nsems ); //... inicjujemy semafor //... teraz pozostaje już tylko utworzyć proces potomny switch( fork() ) { case -1: //... obsługa błędu fork() printf( "!.!.!... błąd fork()...!.!.!\n" ); exit( 1 ); break; case 0: //... kod dla procesu potomnego printf( "[%u] semval=%d\n",(unsigned)getpid(), semctl( semid,0,GETVAL ) ); exit( 0 ); break; default: //...kod dla procesu nadrzędnego wait( &status ); printf( "[%u] semval=%d\n",(unsigned)getpid(), semctl( semid,0,GETVAL ) ); semctl( semid,0x0,IPC_RMID); //... usuwamy semafory } return 0; }