fork download
  1. /*
  2. Szekely Anna
  3. saim1677
  4. 514-es csoport
  5. L9 (FORK) 8as feladat
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #include <sys/types.h>
  12. #include <sys/wait.h>
  13. int T[20];
  14. int pfd1[2],pfd2[2],pfd3[2];
  15.  
  16. void osszead(int el, int ve){
  17. if(ve-el==0){
  18. close(pfd3[0]);
  19. write(pfd3[1],&T[el],sizeof(int));
  20. printf("%d azonositoju gyerek be pipe-ba irta a %d erteket\n",getpid(),T[el]);
  21. //exit(0);
  22. }
  23. else{
  24. switch(fork()){
  25. case -1:{
  26. perror("fork hiba:");
  27. exit(1);
  28. }
  29. case 0:{//gyerek1
  30. int e,v;
  31. read(pfd1[0],&e,sizeof(int));
  32. read(pfd1[0],&v,sizeof(int));
  33. printf("%d azonositoju gyerek beolvasta a %d es %d ertekeket\n",getpid(),e,v);
  34. osszead(e,v);
  35. exit(0);
  36.  
  37. }
  38. default:{
  39. switch(fork()){
  40. case -1:{
  41. perror("fork hiba:");
  42. exit(1);
  43. }
  44. case 0:{//gyerek2
  45. int e,v;
  46. read(pfd2[0],&e,sizeof(int));
  47. read(pfd2[0],&v,sizeof(int));
  48. printf("%d azonositoju gyerek beolvasta a %d es %d ertekeket\n",getpid(),e,v);
  49. osszead(e,v);
  50. exit(0);
  51. }
  52. default:{}
  53.  
  54. }
  55. }
  56. }
  57.  
  58.  
  59. int k=(el+ve)/2;//berakom az elso ket indexhatart
  60. write(pfd1[1],&el,sizeof(int));
  61. write(pfd1[1],&k,sizeof(int));
  62. k++;
  63. write(pfd2[1],&k,sizeof(int));//masodik ket indexhatar
  64. write(pfd2[1],&ve,sizeof(int));
  65. wait(NULL);
  66. wait(NULL);
  67. int o1,o2;
  68. read(pfd3[0],&o1,sizeof(int));
  69. read(pfd3[0],&o2,sizeof(int));
  70. int ossz=o1+o2;
  71. printf("%d azonositoju gyerek kiolvasta a %d es %d ertekeket, beirta a %d erteket\n",getpid(),o1,o2,ossz);
  72. write(pfd3[1],&ossz,sizeof(int));
  73. //}
  74. }
  75. }
  76.  
  77. int main(void){
  78.  
  79. FILE *f=fopen("input.dat","r");
  80. int n,i,osszeg;
  81. fscanf(f,"%d",&n);
  82. for (i=0;i<n;i++){
  83. fscanf(f,"%d",&T[i]);
  84. }
  85. fclose(f);
  86.  
  87. if (pipe(pfd1)<0){
  88. perror("pipe hiba, pfd1");
  89. exit(-1);
  90. } //-ez vegzi a baloldali reszek osszeadasat
  91. if (pipe(pfd2)<0){
  92. perror("pipe hiba, pfd1");
  93. exit(-1);
  94. } //-ez vegzi a jobboldali reszek osszeadasat
  95. if (pipe(pfd3)<0){
  96. perror("pipe hiba, pfd1");
  97. exit(-1);
  98. } //eredmeny
  99. osszead(0,n-1);
  100. int vegosszeg;
  101. wait(NULL);
  102. read(pfd3[0],&vegosszeg,sizeof(int));
  103. printf("a vegosszeg %d\n",vegosszeg);
  104. exit(0);
  105. }
  106.  
Runtime error #stdin #stdout 0s 10312KB
stdin
Standard input is empty
stdout
Standard output is empty