/**************************************/ /* */ /* Prof. Dr. Carsten Vogt */ /* TH Koeln, Fakultaet IME */ /* http://www.nt.th-koeln.de/vogt */ /* */ /* Shared Memory */ /* */ /**************************************/ #include #include #include #include #include #include int main() { /* Vater bereitet vor */ int shmid; float *f_pointer; int i, status; shmid = shmget(IPC_PRIVATE, 5*sizeof(float),IPC_CREAT|0777); /* Sohnprozess 1: Sender */ if (fork()==0) { /* bindet Shared Memory bei sich ein */ f_pointer = (float *) shmat(shmid,0,0); /* schreibt Wertfolge 0.0,0.5,1.0,1.5,2.0 in das Segment */ printf("\nSender schreibt Werte.\n\n"); for (i=0;i<5;i++) *(f_pointer+i) = i/2.0; /* terminiert */ exit(0); } /* Sohnprozess 2: Empfaenger */ if (fork()==0) { /* bindet Shared Memory bei sich ein */ f_pointer = (float *) shmat(shmid,0,0); /* wartet eine gewisse Zeit */ sleep(2); /* liest Wertfolge aus dem Segment */ printf("Empfaenger empfaengt Werte:\n"); for (i=0;i<5;i++) printf(" %f\n",*(f_pointer+i)); /* terminiert */ exit(0); } /* Vater wartet auf Ende der Söhne */ wait(&status); wait(&status); /* Vater loescht Shared Memory*/ shmctl(shmid,IPC_RMID,0); }