Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #include <sys/shm.h>
- #include <errno.h>
- #include <stdio.h>
- #include <unistd.h>
- void p(int sem, struct sembuf *op);
- void v(int sem, struct sembuf *op);
- //-----------demande-------attente du feu vert--------passe le feu au rouge---------
- void p(int sem, struct sembuf *op)
- {
- int j;
- printf("attente du feu vert\n");
- op->sem_op=0;
- j=semop(sem, op, 1); //test feu
- if(j==-1)
- {
- perror("Erreur semop l.22");
- _exit(0);
- }
- op->sem_op=1;
- j=semop(sem, op, 1); //feu rouge
- if(j==-1)
- {
- perror("Erreur semop l.30");
- _exit(0);
- }
- printf("entrée, mise du feu au rouge\n");
- }
- //------------------------------passe le feu au vert--------------------------------
- void v(int sem, struct sembuf *op)
- {
- int j;
- op->sem_op=-1;
- j=semop(sem, op, 1); //feu vert
- if(j==-1)
- {
- perror("Erreur semop l.45");
- _exit(0);
- }
- printf("mise du feu au vert\n");
- }
- //----------------------------------------------------------------------------------
- //-------------------------------MAIN-----------------------------------------------
- //----------------------------------------------------------------------------------
- int main()
- {
- int sem;
- int id, j, resultat;
- key_t clef;
- int *mem;
- struct sembuf op;
- sem=semget(0x01053c08, 1, 0644); //il doit déjà exister
- if(sem==-1)
- {
- perror("Erreur création semaphore");
- _exit(0);
- }
- op.sem_num = 0;
- op.sem_op = 0; //initialisation
- op.sem_flg = 0;
- id=shmget(0x01053b67, 4000, 0644); //il doit déjà exister
- if(id==-1)
- {
- perror("Erreur création mém.");
- _exit(0);
- }
- resultat=0;
- p(sem, &op); //demande, attente, mise au rouge
- mem=(int *)shmat(id, NULL, 0); //attachement
- for(j=0; j<1000; j++) //lecture
- {
- resultat=resultat+ *(mem+j);
- }
- usleep(5000000); //attente (5 sec)
- j=shmdt(mem); //détachement
- if(j==-1)
- {
- perror("Erreur détachement");
- _exit(0);
- }
- printf("Résultat: %d\n", resultat);
- v(sem, &op); //mise au vert
- return 0;
- }
Add Comment
Please, Sign In to add comment