Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5. #include <sys/types.h>
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9. if (argv[1] && argc < 3)
  10. {
  11. int dlugosc = strlen(argv[1]);
  12. if (dlugosc > 0 && dlugosc < 22)
  13. {
  14. if (dlugosc == 1)
  15. {
  16. return *argv[1];
  17. }
  18. else
  19. {
  20. if (dlugosc % 2 == 0)
  21. {
  22. int pidDziecka1;
  23. int pidDziecka2;
  24. char dziecko1[(dlugosc/2)+1];
  25. char dziecko2[(dlugosc/2)+1];
  26. int wynikDziecka1;
  27. int wynikDziecka2;
  28. int DzieckoA;
  29. int DzieckoB;
  30. for (int i = 0; i < (dlugosc/2) ; i++)
  31. {
  32. dziecko1[i] = argv[1][i];
  33. }
  34. dziecko1[(dlugosc/2)] = '\0';
  35.  
  36. for (int j = 0; j < dlugosc/2; j++)
  37. {
  38. dziecko2[j] = argv[1][j+(dlugosc/2)];
  39. }
  40. dziecko2[dlugosc/2]='\0';
  41. DzieckoA = fork();
  42. if (DzieckoA == 0)
  43. {
  44. execl(argv[0], argv[0], &dziecko1, (char*) NULL);
  45. }
  46. DzieckoB = fork();
  47. if(DzieckoB == 0)
  48. {
  49. execl(argv[0], argv[0], &dziecko2, (char*) NULL);
  50. }
  51. int PWait1, PidDziecka1 = waitpid(DzieckoA, &PWait1, 0);
  52. int PWait2, PidDziecka2 = waitpid(DzieckoB, &PWait2, 0);
  53. int pidRodzica = getpid();
  54. wynikDziecka1 = WEXITSTATUS(PWait1);
  55. wynikDziecka2 = WEXITSTATUS(PWait2);
  56. printf("PID rodzica: %d ", pidRodzica);
  57. printf("PID dziecka: %d ", PidDziecka1);
  58. printf("argument: %s ", dziecko1);
  59. printf("wynik dziecka: %c \n", wynikDziecka1);
  60.  
  61. printf("PID rodzica: %d ", pidRodzica);
  62. printf("PID dziecka: %d ", PidDziecka2);
  63. printf("argument: %s ", dziecko2);
  64. printf("wynik dziecka: %c \n", wynikDziecka2);
  65.  
  66. if (wynikDziecka1>wynikDziecka2)
  67. {
  68. return wynikDziecka1;
  69. }
  70. else
  71. {
  72. return wynikDziecka2;
  73. }
  74. }
  75. if(dlugosc % 2 != 0)
  76. {
  77. int pidDziecka1;
  78. int pidDziecka2;
  79. char dziecko1[((dlugosc-1)/2)+1];
  80. char dziecko2[((dlugosc-1)/2)+2];
  81. int wynikDziecka1;
  82. int wynikDziecka2;
  83. int DzieckoA;
  84. int DzieckoB;
  85. //pierwsza tablica
  86. for (int i = 0; i < ((dlugosc-1)/2) ; i++)
  87. {
  88. dziecko1[i] = argv[1][i];
  89. }
  90. dziecko1[((dlugosc-1)/2)] = '\0';
  91. //druga tablica
  92. for (int j = 0; j < (((dlugosc-1)/2)+1); j++)
  93. {
  94. dziecko2[j] = argv[1][j+(((dlugosc-1)/2))];
  95. }
  96. dziecko2[((dlugosc-1)/2)+1]='\0';
  97. //fork
  98. DzieckoA = fork();
  99. if (DzieckoA == 0)
  100. {
  101. execl(argv[0], argv[0], &dziecko1, (char*) NULL);
  102. }
  103. //fork
  104. DzieckoB = fork();
  105. if(DzieckoB == 0)
  106. {
  107. execl(argv[0], argv[0], &dziecko2, (char*) NULL);
  108. }
  109. int PWait1, PidDziecka1 = waitpid(DzieckoA, &PWait1, 0);
  110. int PWait2, PidDziecka2 = waitpid(DzieckoB, &PWait2, 0);
  111. int pidRodzica = getpid();
  112. wynikDziecka1 = WEXITSTATUS(PWait1);
  113. wynikDziecka2 = WEXITSTATUS(PWait2);
  114. printf("PID rodzica: %d ", pidRodzica);
  115. printf("PID dziecka: %d ", PidDziecka1);
  116. printf("argument: %s ", dziecko1);
  117. printf("wynik dziecka: %c \n", wynikDziecka1);
  118.  
  119. printf("PID rodzica: %d ", pidRodzica);
  120. printf("PID dziecka: %d ", PidDziecka2);
  121. printf("argument: %s ", dziecko2);
  122. printf("wynik dziecka: %c \n", wynikDziecka2);
  123.  
  124. if (wynikDziecka1>wynikDziecka2)
  125. {
  126. return wynikDziecka1;
  127. }
  128. else
  129. {
  130. return wynikDziecka2;
  131. }
  132. }
  133. }
  134. }
  135. else
  136. {
  137. fprintf(stderr, "%s", "Podaj 1 argument zawierający od 1-20 znaków\n");
  138. return 1;
  139. }
  140. }
  141. else
  142. {
  143. fprintf(stderr, "Brak argumentu\n");
  144. return 1;
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement