Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <semaphore.h>
  3. #include <errno.h>
  4. #include <sys/types.h>
  5. #include <sys/mman.h>
  6. #include <sys/stat.h>
  7. #include <sys/fcntl.h>
  8. #include <stdio.h>
  9. #include <signal.h>
  10. #include <stdlib.h>
  11. #define shm_size 4000
  12. /* gcc -std=c99 machine_auto.c -lpthread -lrt -Wall -o machine_main */
  13.  
  14. int count=0,working=0;
  15.  
  16. int main()
  17. {
  18. char* shmptr;
  19. int shm_mach,index,i,j,k,licznik=0;
  20. char shm_m[] = "shared";
  21. char sem_m[] = "semaphore";
  22. sem_t *sem_mach;
  23.  
  24.  
  25. shm_mach=shm_open(shm_m, O_RDWR ,0);
  26. if(shm_mach == -1)
  27. {
  28. perror("SHM_OPEN FAILED/TURN ON INTERFACE FIRST");
  29. exit(-1);
  30. }
  31.  
  32. shmptr=mmap(0,shm_size,PROT_WRITE|PROT_READ,MAP_SHARED,shm_mach,0);
  33. if(shmptr == MAP_FAILED)
  34. {
  35. perror("MMAP FAILED");
  36. exit(-1);
  37. }
  38.  
  39. sem_mach = sem_open(sem_m,0);
  40. if(sem_mach==SEM_FAILED)
  41. {
  42. perror("SEM_OPEN FAILED");
  43. exit(-1);
  44. }
  45.  
  46. char *shm_ptr=(char *)shmptr;
  47. int value;
  48. sem_getvalue(sem_mach,&value);
  49.  
  50. for(index = 0; index < 10000; index++)
  51. {
  52.  
  53. //STANOWISKO 1
  54. //sem_wait(sem_mach);
  55. if(shm_ptr[7]!=-1 && shm_ptr[7]!=-2 && shm_ptr[2]==1 && shm_ptr[1]!=1 && shm_ptr[1]!=2 && shm_ptr[50]==0)
  56. {
  57. //sem_post(sem_mach);
  58. for(i=0;i<15;i++)
  59. {
  60. sleep(1);
  61. printf("\n SERWIS ====> WORK-STATION 1 \t");
  62. licznik++;
  63. shm_ptr[1]=-1;
  64. count=-1;
  65. if(shm_ptr[2]==0)
  66. {
  67. printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
  68. for(k=0;k<licznik;k++)
  69. {
  70. sleep(1);
  71. printf("\n ====> SERWIS \t");
  72. //sem_wait(sem_mach);
  73. shm_ptr[1]=-1;
  74. //sem_post(sem_mach);
  75. }
  76. k=0;
  77. sleep(1);
  78. printf("\n MASZYNA WRÓCIŁA \t");
  79. licznik=0;
  80. //sem_wait(sem_mach);
  81. shm_ptr[1]=0;
  82. //sem_post(sem_mach);
  83. count=0;
  84. }
  85. if(count==0)
  86. goto przeskok;
  87.  
  88.  
  89. //sem_wait(sem_mach);
  90. //sem_post(sem_mach);
  91. }
  92. i=0;
  93. for(j=0;j<5;j++)
  94. {
  95. //sem_wait(sem_mach);
  96. shm_ptr[1]=-2;
  97. shm_ptr[5]=1;
  98. //sem_post(sem_mach);
  99. sleep(1);
  100. printf("\n WORK-STATION 1 - FILLING");
  101. }
  102. j=0;
  103. //sem_wait(sem_mach);
  104. shm_ptr[50]=1;
  105. shm_ptr[5]=0;
  106. //sem_post(sem_mach);
  107. sleep(1);
  108. printf("\n NAPEŁNIONE! \t");
  109. for(k=0;k<3;k++)
  110. {
  111. sleep(1);
  112. printf("\n WORK-STATION 1 ====> SERWIS \t");
  113. //sem_wait(sem_mach);
  114. shm_ptr[1]=-1;
  115. //sem_post(sem_mach);
  116. }
  117. k=0;
  118. sleep(1);
  119. printf("\n MASZYNA WRÓCIŁA PO NAPEŁNIENIU \t");
  120. //sem_wait(sem_mach);
  121. shm_ptr[1]=0;
  122. //sem_post(sem_mach);
  123. count=0;
  124. }
  125. else if(shm_ptr[7]!=1 && shm_ptr[7]!=2 && shm_ptr[3]==1 && shm_ptr[1]!=-1 && shm_ptr[1]!=-2 && shm_ptr[51]==0)
  126. {
  127. //sem_post(sem_mach);
  128. for(i=0;i<15;i++)
  129. {
  130. sleep(1);
  131. printf("\n SERWIS ====> WORK-STATION 2 \t");
  132. licznik++;
  133. count=1;
  134. shm_ptr[1]=1;
  135.  
  136. if(shm_ptr[3]==0)
  137. {
  138. printf("\n ZABRANO PUDEŁECZKO, WRACAM, NIE MA CO... \t");
  139. for(k=0;k<licznik;k++)
  140. {
  141. sleep(1);
  142. printf("\n ====> SERWIS \t");
  143. //sem_wait(sem_mach);
  144. shm_ptr[1]=-1;
  145. //sem_post(sem_mach);
  146. }
  147. k=0;
  148. sleep(1);
  149. printf("\n MASZYNA WRÓCIŁA \t");
  150. licznik=0;
  151. //sem_wait(sem_mach);
  152. shm_ptr[1]=0;
  153. //sem_post(sem_mach);
  154. count=0;
  155. }
  156. if(count==0)
  157. goto przeskok;
  158.  
  159. //sem_wait(sem_mach);
  160. //sem_post(sem_mach);
  161.  
  162. }
  163. i=0;
  164. for(j=0;j<5;j++)
  165. {
  166. sleep(1);
  167. printf("\n WORK-STATION 2 - FILLING");
  168. //sem_wait(sem_mach);
  169. shm_ptr[1]=2;
  170. shm_ptr[5]=1;
  171. //sem_post(sem_mach);
  172. count=2;
  173. }
  174. //sem_wait(sem_mach);
  175. shm_ptr[5]=0;
  176. //sem_post(sem_mach);
  177. j=0;
  178. sleep(1);
  179. printf("\n NAPEŁNIONE! \t");
  180. //sem_wait(sem_mach);
  181. shm_ptr[51]=1;
  182. //sem_post(sem_mach);
  183. for(k=0;k<3;k++)
  184. {
  185. sleep(1);
  186. printf("\n WORK-STATION 2 ====> SERWIS \t");
  187. //sem_wait(sem_mach);
  188. shm_ptr[1]=1;
  189. //sem_post(sem_mach);
  190. count=1;
  191.  
  192. }
  193. k=0;
  194. sleep(1);
  195. printf("\n MASZYNA WRÓCIŁA PO NAPEŁNIENIU \t");
  196. //sem_wait(sem_mach);
  197. shm_ptr[1]=0;
  198. //sem_post(sem_mach);
  199. count=0;
  200. }
  201. else if(count==0)
  202. {
  203. przeskok:
  204. //sem_post(sem_mach);
  205. sleep(1);
  206. printf("\n MACHINE AT POSITION FREE \t [%d]",index);
  207. //sem_wait(sem_mach);
  208. shm_ptr[1]=0;
  209. //sem_post(sem_mach);
  210. }
  211. else
  212. {
  213. printf("\n INTERFACE CLOSED \n");
  214. sem_post(sem_mach);
  215. sem_unlink(sem_m);
  216. munmap(shmptr,shm_size);
  217. close(shm_mach);
  218. sem_close(sem_mach);
  219. shm_unlink(shm_m);
  220. exit(0);
  221. }
  222.  
  223. }
  224.  
  225. munmap(shmptr,shm_size);
  226. close(shm_mach);
  227. sem_close(sem_mach);
  228. sem_unlink(sem_m);
  229. shm_unlink(shm_m);
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement