Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. Plik naglowkowy „naglowek.h”
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <sys/ipc.h>
  8. #include <sys/shm.h>
  9. #include <sys/sem.h>
  10. #include <signal.h>
  11. #define PERMS 0666
  12.  
  13.  
  14.  
  15.  
  16. static struct sembuf op_lock1[1] = {
  17. 0, -1, 0
  18. };
  19.  
  20. static struct sembuf op_unlock1[1] = {
  21. 0, 1, 0
  22. };
  23.  
  24. static struct sembuf op_lock2[1] = {
  25. 1, -1, 0
  26. };
  27.  
  28. static struct sembuf op_unlock2[1] = {
  29. 1, 1, 0
  30. };
  31.  
  32. void blokuj_semafor1(int semid)
  33. {
  34. if (semop(semid, &op_lock1[0], 1)<0)
  35. perror("blad lokowania semafora");
  36. }
  37.  
  38. void odblokuj_semafor1(int semid)
  39. {
  40. if (semop(semid, &op_unlock1[0], 1) < 0)
  41. perror("blad odlokowania semafora");
  42. }
  43.  
  44. void blokuj_semafor2(int semid)
  45. {
  46. if (semop(semid, &op_lock2[0], 1)<0)
  47. perror("blad lokowania semafora");
  48. }
  49.  
  50. void odblokuj_semafor2(int semid)
  51. {
  52. if (semop(semid, &op_unlock2[0], 1) < 0)
  53. perror("blad odlokowania semafora");
  54. }
  55.  
  56.  
  57.  
  58. Plik Kliencki „klient.c”
  59.  
  60. #include "naglowek.h"
  61.  
  62. char *shmp;
  63. int semid;
  64. int shmid;
  65.  
  66.  
  67. int main(){
  68.  
  69. srand(getpid());
  70.  
  71. int shmid= shmget(ftok("serwer.c",3), sizeof(int),PERMS);
  72. if (shmid==-1){
  73. perror("Blad tworzenia pamieci dzielonej");
  74. exit(0);
  75. }
  76.  
  77. char *shmp = shmat(shmid,0, 0);
  78. if (shmp==NULL){
  79. perror("Blad dolaczania pamieci dzielonej");
  80. exit(0);
  81. }
  82.  
  83. semid = semget(ftok("serwer.c",3), 2, PERMS);
  84. if (semid < 0){
  85. perror("blad tworzenia zbioru semaforow");
  86. }
  87.  
  88. int liczba;
  89. int i;
  90. for(i=0;i<10;i++){
  91.  
  92. odblokuj_semafor2(semid);
  93. blokuj_semafor1(semid);
  94. liczba=*shmp;
  95. printf("Liczba= %d\n",liczba);
  96. int time=rand()%1000001;
  97. usleep(time);
  98. }
  99. shmdt(shmp);
  100. return 0;
  101. }
  102.  
  103.  
  104.  
  105. Plik Serwera „serwer.c”
  106.  
  107. #include "naglowek.h"
  108.  
  109.  
  110. char *shmp;
  111. int semid;
  112. int shmid;
  113. int run=1;
  114.  
  115. void oblsluga_zakonczenia_serwera(int nr_sig)
  116. {
  117. printf("Koncze serwer\n");
  118. run=0;
  119.  
  120. if(shmdt(shmp)<0) perror("Blad odlaczania pamieci dzielonej");
  121. if(semctl(semid,0,IPC_RMID,0)<0) perror("Blad usuwania zbioru semaforow");
  122. if(shmctl(shmid,IPC_RMID,NULL)<0) perror("Blad usuwania pamieci dzielonej");
  123. exit(1);
  124. }
  125.  
  126.  
  127. int main(){
  128. signal(SIGINT,oblsluga_zakonczenia_serwera);
  129. srand(getpid());
  130.  
  131. shmid= shmget(ftok("serwer.c",3), sizeof(int),IPC_CREAT | IPC_EXCL | PERMS);
  132. if (shmid==-1){
  133. perror("Blad tworzenia pamieci dzielonej");
  134. }
  135.  
  136. shmp = shmat(shmid,0, 0);
  137. if (shmp==NULL){
  138. perror("Blad dolaczania pamieci dzielonej");
  139.  
  140. }
  141.  
  142. semid = semget(ftok("serwer.c",3), 2, IPC_CREAT | PERMS);
  143. if (semid < 0){
  144. perror("blad tworzenia zbioru semaforow");
  145. }
  146.  
  147. int liczba=1;
  148. while(run){
  149.  
  150. blokuj_semafor2(semid);
  151.  
  152. int time=rand()%1000001;
  153. printf("Spie przez %d\n",time);
  154. *shmp=liczba;
  155. liczba++;
  156.  
  157. odblokuj_semafor1(semid);
  158. usleep(time);
  159.  
  160. }
  161.  
  162.  
  163. return 0;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement