Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <sys/types.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #include<sys/wait.h>
  7. #include <string.h>
  8. using namespace std;
  9.  
  10. int funkcja_dziecka()
  11. {
  12.  
  13. execl("/usr/bin/cal","cal",NULL);
  14. return 0;
  15. }
  16.  
  17.  
  18. void funkcja_dziecka2(int *fd)
  19. {
  20. for (int i=1; i<=10; i++)
  21. {
  22.  
  23. if((write(fd[1], &i,sizeof(int) )!=-1))//jak write zwraca cos roznego od -1 to dziala
  24. sleep(1);
  25. else abort();//jak write zwroci -1 to blad, zakoncz program
  26. }
  27. exit(0);//zakoncz
  28. }
  29. void funkcja_dziecka3(int *fd, int id)
  30. {
  31. char text[2];
  32. if (id == 0) //czy jest potomkiem A
  33. {
  34. text[0] = 'A';
  35.  
  36. }
  37. if (id == 1) // czy jest potomkiem B
  38. {
  39. text[0] = 'B';
  40.  
  41. }
  42. for (int i = 0; i < 10; i++)
  43. {
  44. text[1] = i + 48;
  45. write(fd[1], &text, sizeof(text));
  46. }
  47. exit(0);
  48. }
  49. void zad21()
  50. {
  51. pid_t p;
  52. p=fork();
  53.  
  54. if(p==-1)
  55. {
  56. //jak jets blad przerywamy program
  57.  
  58. perror("fork");
  59. abort();
  60. }
  61.  
  62. if(p==0)
  63. {
  64. try
  65. {
  66. int ret=funkcja_dziecka();
  67. exit(ret);
  68. }
  69. catch(...)
  70. {
  71. exit(1);
  72. }
  73. }
  74.  
  75. else
  76. {
  77. wait(NULL);
  78.  
  79. }
  80. }
  81. int zad22()
  82. {
  83. pid_t p;
  84. int dane;
  85. int fd[2];
  86. pipe(fd);
  87. if(pipe(fd) < 0)
  88. {
  89. printf("Blad funkcji pipe\n");
  90. return -1;
  91. }
  92.  
  93.  
  94.  
  95. p=fork();
  96.  
  97. if(p==-1)
  98. {
  99. //jak jets blad przerywamy program
  100.  
  101. perror("fork");
  102. abort();
  103. }
  104.  
  105. if(p==0)
  106. {
  107. try
  108. {
  109.  
  110. funkcja_dziecka2(fd);
  111.  
  112. }
  113. catch(...)
  114. {
  115. exit(1);
  116. }
  117.  
  118. }
  119.  
  120.  
  121.  
  122.  
  123. else//rodzic
  124. {
  125. while (read(fd[0], &dane, sizeof(int))) //czytanie od potomka
  126. {
  127. cout << dane << std::endl; //wyswietlenie tego co odczytal
  128. }
  129. int *status;
  130. wait(&status);
  131. }
  132. }
  133. int zad23()
  134. {
  135. pid_t p;
  136. int id=0;//by rozronic potomkow
  137. int fdA[2]; // deskryptor dla potomka A
  138. int fdB[2]; // deskryptor dla potomka B
  139. if(pipe(fdA) < 0)
  140. {
  141. printf("Blad funkcji pipe\n");
  142. return -1;
  143. }
  144. if(pipe(fdB) < 0)
  145. {
  146. printf("Blad funkcji pipe\n");
  147. return -1;
  148. }
  149.  
  150. p=fork();
  151. if(p!=0)
  152. {
  153. id++;
  154. p=fork();//drugi potomek
  155. }
  156.  
  157. if(p==-1)
  158. {
  159. //jak jets blad przerywamy program
  160.  
  161. perror("fork");
  162. abort();
  163. }
  164.  
  165. if(p==0)
  166. {
  167. try
  168. {
  169. if(id==0) funkcja_dziecka3(fdA,id);
  170. if(id==1) funkcja_dziecka3(fdB,id);
  171. }
  172. catch(...)
  173. {
  174. exit(1);
  175. }
  176.  
  177. }
  178. else
  179. {
  180.  
  181. //close(filefdA[1]); //zamkniecie strumienia pisania
  182. //close(filefdB[1]); //zamkniecie strumienia pisania
  183. char dane[2];
  184. while (read(fdA[0], &dane, sizeof(dane)) > 0) //dopoki potomek A pisze -> czytaj
  185. {
  186. std::cout << dane << std::endl; //wyswietlenie bufora
  187. }
  188. while (read(fdB[0], &dane, sizeof(dane)) > 0) //dopoki potomek B pisze -> czytaj
  189. {
  190. std::cout << dane << std::endl; //wyswietlenie bufora
  191. }
  192. int * status;
  193. wait(&status); //obsluga zakonczenia potomka
  194. }
  195.  
  196. }
  197.  
  198. void zad24()
  199. {
  200. }
  201.  
  202.  
  203. int main()
  204. {
  205. //zad21();
  206. // zad22();
  207. zad23();
  208. return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement