#include #include #include #include #include #include #include #define CLE 253 #define CLES 300 int main() { int shmid, semid, i; char *mem; int status, rc; struct shmid_ds shmid_struct; pid_t lecteur, redacteur; shmid=shmget((key_t)CLE,1000,0750 |IPC_CREAT | IPC_EXCL); mem=shmat(shmid,mem,0); if(mem == (char*) -1) { printf("\nShmat failed, erreur alloc memoire \n"); return(0); } *mem= 0; *(mem+ 4) = 0; semid= semget(CLES, 2, IPC_CREAT|IPC_EXCL|0600); semctl(semid, 0, SETVAL, 1); semctl(semid, 1, SETVAL, 1); i = 0; for (i=0;i <3;i++) { lecteur= fork(); if (lecteur== 0) { execl("/home/knoppix/workspace/lecteur/Debug/lecteur", "/home/knoppix/workspace/lecteur/Debug/lecteur", NULL); } else{ redacteur= fork(); if (redacteur== 0) execl("/home/knoppix/workspace/redacteur/Debug/redacteur", "/home/knoppix/workspace/redacteur/Debug/redacteur", NULL); } } wait(&status); rc = shmctl(shmid, IPC_RMID, &shmid_struct); if (rc==-1) { printf("main: shmctl() failed\n"); return -1; } rc = shmdt(mem); if (rc==-1) { printf("main: shmdt() failed\n"); return -1; } rc = semctl( semid, 2, IPC_RMID ); if (rc==-1) { printf("main: semctl() remove id failed\n"); return -1; } return 0; }