Guest User

Untitled

a guest
Jul 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/ipc.h>
  3. #include <sys/sem.h>
  4. #include <sys/shm.h>
  5. #include <errno.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8.  
  9. void p(int sem, struct sembuf *op);
  10. void v(int sem, struct sembuf *op);
  11.  
  12. //-----------demande-------attente du feu vert--------passe le feu au rouge---------
  13.  
  14. void p(int sem, struct sembuf *op)
  15. {
  16. int j;
  17. printf("attente du feu vert\n");
  18. op->sem_op=0;
  19. j=semop(sem, op, 1); //test feu
  20. if(j==-1)
  21. {
  22. perror("Erreur semop l.22");
  23. _exit(0);
  24. }
  25.  
  26. op->sem_op=1;
  27. j=semop(sem, op, 1); //feu rouge
  28. if(j==-1)
  29. {
  30. perror("Erreur semop l.30");
  31. _exit(0);
  32. }
  33. printf("entrée, mise du feu au rouge\n");
  34. }
  35.  
  36. //------------------------------passe le feu au vert--------------------------------
  37.  
  38. void v(int sem, struct sembuf *op)
  39. {
  40. int j;
  41. op->sem_op=-1;
  42. j=semop(sem, op, 1); //feu vert
  43. if(j==-1)
  44. {
  45. perror("Erreur semop l.45");
  46. _exit(0);
  47. }
  48. printf("mise du feu au vert\n");
  49. }
  50.  
  51. //----------------------------------------------------------------------------------
  52. //-------------------------------MAIN-----------------------------------------------
  53. //----------------------------------------------------------------------------------
  54.  
  55. int main()
  56. {
  57. int sem;
  58. int id, j, resultat;
  59. key_t clef;
  60. int *mem;
  61. struct sembuf op;
  62.  
  63. sem=semget(0x01053c08, 1, 0644); //il doit déjà exister
  64. if(sem==-1)
  65. {
  66. perror("Erreur création semaphore");
  67. _exit(0);
  68. }
  69. op.sem_num = 0;
  70. op.sem_op = 0; //initialisation
  71. op.sem_flg = 0;
  72.  
  73. id=shmget(0x01053b67, 4000, 0644); //il doit déjà exister
  74. if(id==-1)
  75. {
  76. perror("Erreur création mém.");
  77. _exit(0);
  78. }
  79.  
  80. resultat=0;
  81.  
  82. p(sem, &op); //demande, attente, mise au rouge
  83.  
  84. mem=(int *)shmat(id, NULL, 0); //attachement
  85.  
  86. for(j=0; j<1000; j++) //lecture
  87. {
  88. resultat=resultat+ *(mem+j);
  89. }
  90.  
  91. usleep(5000000); //attente (5 sec)
  92.  
  93. j=shmdt(mem); //détachement
  94. if(j==-1)
  95. {
  96. perror("Erreur détachement");
  97. _exit(0);
  98. }
  99.  
  100. printf("Résultat: %d\n", resultat);
  101. v(sem, &op); //mise au vert
  102.  
  103. return 0;
  104. }
Add Comment
Please, Sign In to add comment