#include #include #include #include #include #include #include #include #include "opSem.h" #include "description.h" #define NBTOURS 5 void procFils(int sem_id, data *shmAdr) { int i; for(i=0; ilastPid = getpid(); shmAdr->nbAccess++; V(sem_id,MUTEX); } shmdt(shmAdr); } void procPere(int sem_id, data *shmAdr) { int i; for(i=0; ilastPid = getpid(); shmAdr->nbAccess++; V(sem_id,MUTEX); } } int main(void) { key_t sem_cle, shm_cle; int sem_id, shm_id; unsigned short semValue[SEMNBR]; int i; data *shmAdr; pid_t pid; /* Initialisation du semaphore */ sem_cle = IPC_PRIVATE; if (sem_cle == -1) { perror("ftok"); exit(EXIT_FAILURE); } sem_id = semget(sem_cle, SEMNBR, IPC_CREAT | IPC_EXCL | 0666); if (sem_id == -1) { perror("semget"); exit(EXIT_FAILURE); } for(i=0;ilastPid = 0; /* Mise a 0 du pid_t en memoire partagee */ shmAdr->nbAccess = 0; /* Mise a 0 de l'int en memoire partagee */ pid = fork(); switch (pid) { case -1 : perror("fork"); exit(EXIT_FAILURE); break; case 0 : procFils(sem_id,shmAdr); exit(EXIT_SUCCESS); break; default : procPere(sem_id,shmAdr); break; } wait(NULL); printf("A la fin, MP: lastPid=%d nbAccess=%d\n", shmAdr->lastPid,shmAdr->nbAccess); semctl (sem_id, SEMNBR , IPC_RMID, NULL); shmctl(shm_id, IPC_RMID, NULL); return EXIT_SUCCESS; }