Advertisement
C_Razvan

SO_LAB9

Nov 18th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <signal.h>
  5. #include <sys/wait.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9.  
  10.  
  11. /*
  12. * IMI CER SCUZE PENTRU MESAJELE MELE DE "DEBUG" SI PENTRU CE PRINTEZ :|
  13. * nu-mi place c asa ca macar prin astea sa ma distrez si eu putin
  14. * Muie Dragnea si PSD :)
  15. * Pana acum am deschis pipe-urile si le-am inchis unde era nevoie
  16. * Comunica intre ele urmatoarele procese :
  17. * Tata [W]-[R] Fiu 1
  18. * Fiu 1 [W]-[R] Fiu 2
  19. *
  20. */
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. int child_pid1 = 0;
  28. int child_pid2 = 0;
  29. int status;
  30. char litera;
  31. int child_pid;
  32.  
  33. int main(int argc, char argv[])
  34. {
  35.  
  36. int pfd1[2],pfd2[2],pfd3[2];
  37. int fd;
  38. char writebuff[1024];
  39.  
  40. if(pipe(pfd1)<0)
  41. {
  42. perror("Eroare la crearea pipe-ului 1\n");
  43. exit(1);
  44. }
  45. if(pipe(pfd2)<0)
  46. {
  47. perror("Eroare la crearea pipe-ului 2\n");
  48. exit(1);
  49. }
  50. if(pipe(pfd3)<0)
  51. {
  52. perror("Eroare la crearea pipe-ului 3\n");
  53. exit(1);
  54. }
  55.  
  56.  
  57.  
  58. /* if( ( fd=open(argv[argc],O_RDONLY)) <0)
  59. {
  60. perror("eroare la deschiderea fisierului de input");
  61.  
  62. }
  63.  
  64. */
  65.  
  66.  
  67.  
  68. if((child_pid1=fork()) < 0)
  69. {
  70. perror("eroare la crearea primului copil\n");
  71. }
  72. else if (child_pid1 == 0 )
  73. // functionalitate copil 1
  74. {
  75. close(pfd1[1]); //copilul 1 nu scrie in primul pipe
  76. close(pfd2[0]); //copilul 1 nu citeste din al doilea pipe
  77. close(pfd3[0]); //copilul 1 nu scrie in al treilea pipe
  78. close(pfd3[1]); //copilul 1 nu citeste din al treilea pipe
  79. char am_citit[10];
  80. // printf("Sunt copilul 1 si exist si eu dar nu stiu daca m-am terminat sau nu \n");
  81. printf("copilul 1 a primit de la parinte : ");
  82. while(read(pfd1[0],am_citit,1))
  83. {
  84. printf("%s",am_citit);
  85. if(am_citit[0]>='0' && am_citit[0]<='9')
  86. write(pfd2[1],am_citit,1);
  87. }
  88. printf("\n");
  89. close(pfd2[1]); //Am terminat de scris catre copilul 2
  90. exit(1);
  91. }
  92. else
  93. if((child_pid2=fork()) < 0)
  94. {
  95. perror("eroare la crearea celui de-al doilea copil\n");
  96. }
  97. else
  98. {
  99. if (child_pid2 == 0 )
  100. // functionalitate copil 2
  101. {
  102. int statistica[10]={0,0,0,0,0,0,0,0,0,0};
  103.  
  104. char am_citit[10];
  105. close(pfd1[1]); //copilul 2 nu scrie in primul pipe
  106. close(pfd1[0]); //copilul 2 nu citeste din primul pipe
  107. close(pfd2[1]); //copilul 2 nu scrie in doilea pipe
  108. close(pfd3[0]); //copilul 2 nu citeste din al treilea pipe
  109. //printf("Sunt copilul 2 si exist si eu dar nu stiu daca m-am terminat sau nu \n");
  110. printf("Copilul 2 a primit de la parinte : ");
  111. while(read(pfd2[0],am_citit,1))
  112. {
  113. printf("%s",am_citit);
  114. statistica[atoi(am_citit)]++;
  115. }
  116. printf("\n");
  117. for(int i=0;i<10;i++)
  118. {
  119. printf("Statistic vorbind cifra %d a aparut de %d ori \n",i,statistica[i]);
  120. }
  121. exit(2);
  122.  
  123.  
  124. }
  125. else // funcitonalitate parinte
  126. {
  127. close(pfd1[0]); //parintele nu citeste din primul pipe
  128. close(pfd2[0]); //parintele nu citeste din al doilea pipe
  129. close(pfd2[1]); //parintele nu scrie in al doilea pipe
  130. close(pfd3[0]); //parintele nu scrie in al treilea pipe
  131. int wbuf=sprintf(writebuff,"Mama nu are mere lul 1 2 8 3 8 4 5 6 7 8 8 8 2 3 2 3 3 4 2");
  132. write(pfd1[1],writebuff,wbuf);
  133. close(pfd1[1]);// am terminat de scris catre copilul 1
  134.  
  135. for(int i=0;i<2;i++)
  136. {
  137. child_pid = wait(&status);
  138. printf("Child with pid: %d ended with code %d\n",child_pid, WEXITSTATUS(status));
  139. }
  140. }
  141. }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement