Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.70 KB | None | 0 0
  1. serwer
  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. static struct sembuf op_lock1[1] = {
  14. 0, -1, 0
  15. };
  16.  
  17. static struct sembuf op_unlock1[1] = {
  18. 0, 1, 0
  19. };
  20.  
  21. static struct sembuf op_lock2[1] = {
  22. 1, -1, 0
  23. };
  24.  
  25. static struct sembuf op_unlock2[1] = {
  26. 1, 1, 0
  27. };
  28.  
  29. void blok_sem1(int semid)
  30. {
  31. if (semop(semid, &op_lock1[0], 1)<0)
  32. perror("blad lokowania sem1");
  33. }
  34.  
  35. void odblok_sem1(int semid)
  36. {
  37. if (semop(semid, &op_unlock1[0], 1) < 0)
  38. perror("blad odlokowania sem1");
  39. }
  40.  
  41. void blok_sem2(int semid)
  42. {
  43. if (semop(semid, &op_lock2[0], 1)<0)
  44. perror("blad lokowania sem2");
  45. }
  46.  
  47. void odblok_sem2(int semid)
  48. {
  49. if (semop(semid, &op_unlock2[0], 1) < 0)
  50. perror("blad odlokowania sem2");
  51. }
  52.  
  53. char *shmp;
  54. int semid;
  55. int shmid;
  56. int run=1;
  57.  
  58. void oblsluga_zakonczenia_serwera(int nr_sig)
  59. {
  60. printf("Koniec serwera\n");
  61. run=0;
  62. if(shmdt(shmp)<0){
  63. perror("Blad odlaczania pamieci dzielonej");}
  64. if(semctl(semid,0,IPC_RMID,0)<0){
  65. perror("Blad usuwania zbioru semaforow");}
  66. if(shmctl(shmid,IPC_RMID,NULL)<0){
  67. perror("Blad usuwania pamieci dzielonej");}
  68. exit(1);
  69. }
  70.  
  71.  
  72. int main(){
  73. signal(SIGINT,oblsluga_zakonczenia_serwera);
  74. srand(getpid());
  75.  
  76. shmid= shmget(ftok("serwer.c",3), sizeof(int),IPC_CREAT | IPC_EXCL | PERMS);
  77. if (shmid==-1){
  78. perror("Blad tworzenia pamieci dzielonej");
  79. }
  80.  
  81. shmp = shmat(shmid,0, 0);
  82. if (shmp==NULL){
  83. perror("Blad dolaczania pamieci dzielonej");
  84.  
  85. }
  86.  
  87. semid = semget(ftok("serwer.c",3), 2, IPC_CREAT | PERMS);
  88. if (semid < 0){
  89. perror("blad tworzenia zbioru semaforow");
  90. }
  91.  
  92. int liczba=1;
  93. while(run){
  94.  
  95. blok_sem2(semid);
  96.  
  97. int time=rand()%10000001;
  98. printf("oczekuje %d\n",liczba);
  99. *shmp=liczba;
  100. liczba++;
  101.  
  102. odblok_sem1(semid);
  103. usleep(time);
  104.  
  105. }
  106.  
  107.  
  108. return 0;
  109. }
  110.  
  111. wynik
  112. 85258@st10-lab312:~/Desktop/lab7$ ./klient
  113. nr 1
  114. nr 2
  115. nr 3
  116. nr 4
  117. nr 5
  118. nr 6
  119. nr 7
  120. nr 8
  121. nr 9
  122. nr 10
  123. 85258@st10-lab312:~/Desktop/lab7$ ./klient&
  124. [1] 3796
  125. 85258@st10-lab312:~/Desktop/lab7$ nr 11
  126. nr 12
  127. nr 13
  128. nr 14
  129. nr 15
  130. nr 16
  131. nr 17
  132. nr 18
  133. nr 19
  134. nr 20
  135. ./klient&
  136. [2] 3797
  137. [1] Done ./klient
  138. 85258@st10-lab312:~/Desktop/lab7$ nr 21
  139. nr 22
  140. nr 23
  141. nr 24
  142. nr 25
  143. nr 26
  144. nr 27
  145. nr 28
  146. nr 29
  147. nr 30
  148. ^C
  149. [2]+ Done ./klient
  150.  
  151.  
  152. klient
  153.  
  154. #include <stdio.h>
  155. #include <stdlib.h>
  156. #include <unistd.h>
  157. #include <sys/types.h>
  158. #include <sys/ipc.h>
  159. #include <sys/shm.h>
  160. #include <sys/sem.h>
  161. #include <signal.h>
  162. #define PERMS 0666
  163.  
  164. static struct sembuf op_lock1[1] = {
  165. 0, -1, 0
  166. };
  167.  
  168. static struct sembuf op_unlock1[1] = {
  169. 0, 1, 0
  170. };
  171.  
  172. static struct sembuf op_lock2[1] = {
  173. 1, -1, 0
  174. };
  175.  
  176. static struct sembuf op_unlock2[1] = {
  177. 1, 1, 0
  178. };
  179.  
  180. void blok_sem1(int semid)
  181. {
  182. if (semop(semid, &op_lock1[0], 1)<0)
  183. perror("blad lokowania sem1");
  184. }
  185.  
  186. void odblok_sem1(int semid)
  187. {
  188. if (semop(semid, &op_unlock1[0], 1) < 0)
  189. perror("blad odlokowania sem1");
  190. }
  191.  
  192. void blok_sem2(int semid)
  193. {
  194. if (semop(semid, &op_lock2[0], 1)<0)
  195. perror("blad lokowania sem2");
  196. }
  197.  
  198. void odblok_sem2(int semid)
  199. {
  200. if (semop(semid, &op_unlock2[0], 1) < 0)
  201. perror("blad odlokowania sem2");
  202. }
  203.  
  204. char *shmp;
  205. int semid;
  206. int shmid;
  207.  
  208.  
  209. int main(){
  210. srand(getpid());
  211. int shmid= shmget(ftok("serwer.c",3), sizeof(int),PERMS);
  212. if (shmid==-1){
  213. perror("Blad tworzenia pamieci dzielonej");
  214. exit(0);}
  215.  
  216. char *shmp = shmat(shmid,0, 0);
  217. if (shmp==NULL){
  218. perror("Blad dolaczania pamieci dzielonej");
  219. exit(0);}
  220.  
  221. semid = semget(ftok("serwer.c",3), 2, PERMS);
  222. if (semid < 0){
  223. perror("blad tworzenia zbioru semaforow");}
  224.  
  225. int liczba,i;
  226. for(i=0;i<10;i++){
  227.  
  228. odblok_sem2(semid);
  229. blok_sem1(semid);
  230. liczba=*shmp;
  231. printf("nr %d\n",liczba);
  232. int time=rand()%10000001;
  233. usleep(time);
  234. }
  235. shmdt(shmp);
  236.  
  237. return 0;
  238. }
  239.  
  240. wynik
  241.  
  242. 85258@st10-lab312:~/Desktop/lab7$ ./klient
  243. nr 1
  244. nr 2
  245. nr 3
  246. nr 4
  247. nr 5
  248. nr 6
  249. nr 7
  250. nr 8
  251. nr 9
  252. nr 10
  253. 85258@st10-lab312:~/Desktop/lab7$ ./klient&
  254. [1] 3796
  255. 85258@st10-lab312:~/Desktop/lab7$ nr 11
  256. nr 12
  257. nr 13
  258. nr 14
  259. nr 15
  260. nr 16
  261. nr 17
  262. nr 18
  263. nr 19
  264. nr 20
  265. ./klient&
  266. [2] 3797
  267. [1] Done ./klient
  268. 85258@st10-lab312:~/Desktop/lab7$ nr 21
  269. nr 22
  270. nr 23
  271. nr 24
  272. nr 25
  273. nr 26
  274. nr 27
  275. nr 28
  276. nr 29
  277. nr 30
  278. ^C
  279. [2]+ Done ./klient
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement