#include #include #include #include #define VELIKOST 0x10000 /* 16 bajtov */ main( ) { int i, Pid, ShmId; char *ShmAddr; if( (ShmId = shmget( IPC_PRIVATE, VELIKOST, 0600 )) == -1 ){ printf("Napaka, shmget ni uspel\n"); } if( (Pid = fork( )) == 0 ){ /* --- Otrok --- */ if( (ShmAddr = shmat( ShmId, 0, 0 )) == (void *) -1 ){ printf("Napaka, shmat za otroka ni uspel\n"); } printf("Naslovi za ShmAddr od %x do %x (za otroka)\n",&ShmAddr[0],&ShmAddr[VELIKOST]); for( i = 0; i < VELIKOST; i++){ ShmAddr[ i ] = i; sleep( 2 ); } if( shmdt( ShmAddr ) == -1){ printf("Napaka, shmdt ni uspel\n"); } exit( 0 ); } else if( Pid > 0 ){ /* --- Roditelj --- */ if( (ShmAddr = shmat( ShmId, 0, 0 )) == (void *) -1 ){ printf("Napaka, shmat za roditelja ni uspel\n"); } printf("Naslovi za ShmAddr od %x do %x (za roditelja)\n",&ShmAddr[0],&ShmAddr[VELIKOST]); for( i = 0; i < VELIKOST; i++){ while( ShmAddr[i] != i); printf("ShmParent[%3d] = %d\n",i,ShmAddr[i]); } if( shmctl( ShmId, IPC_RMID, 0 ) == -1){ printf("Napaka, shmctl z SHM_RMID ni uspel\n"); } exit( 0 ); } else{ printf("Napaka fork()\n"); exit( 1 ); } }