Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <sys/types.h>
- int main(int argc, char* argv[])
- {
- if (argv[1] && argc < 3)
- {
- int dlugosc = strlen(argv[1]);
- if (dlugosc > 0 && dlugosc < 22)
- {
- if (dlugosc == 1)
- {
- return *argv[1];
- }
- else
- {
- if (dlugosc % 2 == 0)
- {
- int pidDziecka1;
- int pidDziecka2;
- char dziecko1[(dlugosc/2)+1];
- char dziecko2[(dlugosc/2)+1];
- int wynikDziecka1;
- int wynikDziecka2;
- int DzieckoA;
- int DzieckoB;
- for (int i = 0; i < (dlugosc/2) ; i++)
- {
- dziecko1[i] = argv[1][i];
- }
- dziecko1[(dlugosc/2)] = '\0';
- for (int j = 0; j < dlugosc/2; j++)
- {
- dziecko2[j] = argv[1][j+(dlugosc/2)];
- }
- dziecko2[dlugosc/2]='\0';
- DzieckoA = fork();
- if (DzieckoA == 0)
- {
- execl(argv[0], argv[0], &dziecko1, (char*) NULL);
- }
- DzieckoB = fork();
- if(DzieckoB == 0)
- {
- execl(argv[0], argv[0], &dziecko2, (char*) NULL);
- }
- int PWait1, PidDziecka1 = waitpid(DzieckoA, &PWait1, 0);
- int PWait2, PidDziecka2 = waitpid(DzieckoB, &PWait2, 0);
- int pidRodzica = getpid();
- wynikDziecka1 = WEXITSTATUS(PWait1);
- wynikDziecka2 = WEXITSTATUS(PWait2);
- printf("PID rodzica: %d ", pidRodzica);
- printf("PID dziecka: %d ", PidDziecka1);
- printf("argument: %s ", dziecko1);
- printf("wynik dziecka: %c \n", wynikDziecka1);
- printf("PID rodzica: %d ", pidRodzica);
- printf("PID dziecka: %d ", PidDziecka2);
- printf("argument: %s ", dziecko2);
- printf("wynik dziecka: %c \n", wynikDziecka2);
- if (wynikDziecka1>wynikDziecka2)
- {
- return wynikDziecka1;
- }
- else
- {
- return wynikDziecka2;
- }
- }
- if(dlugosc % 2 != 0)
- {
- int pidDziecka1;
- int pidDziecka2;
- char dziecko1[((dlugosc-1)/2)+1];
- char dziecko2[((dlugosc-1)/2)+2];
- int wynikDziecka1;
- int wynikDziecka2;
- int DzieckoA;
- int DzieckoB;
- //pierwsza tablica
- for (int i = 0; i < ((dlugosc-1)/2) ; i++)
- {
- dziecko1[i] = argv[1][i];
- }
- dziecko1[((dlugosc-1)/2)] = '\0';
- //druga tablica
- for (int j = 0; j < (((dlugosc-1)/2)+1); j++)
- {
- dziecko2[j] = argv[1][j+(((dlugosc-1)/2))];
- }
- dziecko2[((dlugosc-1)/2)+1]='\0';
- //fork
- DzieckoA = fork();
- if (DzieckoA == 0)
- {
- execl(argv[0], argv[0], &dziecko1, (char*) NULL);
- }
- //fork
- DzieckoB = fork();
- if(DzieckoB == 0)
- {
- execl(argv[0], argv[0], &dziecko2, (char*) NULL);
- }
- int PWait1, PidDziecka1 = waitpid(DzieckoA, &PWait1, 0);
- int PWait2, PidDziecka2 = waitpid(DzieckoB, &PWait2, 0);
- int pidRodzica = getpid();
- wynikDziecka1 = WEXITSTATUS(PWait1);
- wynikDziecka2 = WEXITSTATUS(PWait2);
- printf("PID rodzica: %d ", pidRodzica);
- printf("PID dziecka: %d ", PidDziecka1);
- printf("argument: %s ", dziecko1);
- printf("wynik dziecka: %c \n", wynikDziecka1);
- printf("PID rodzica: %d ", pidRodzica);
- printf("PID dziecka: %d ", PidDziecka2);
- printf("argument: %s ", dziecko2);
- printf("wynik dziecka: %c \n", wynikDziecka2);
- if (wynikDziecka1>wynikDziecka2)
- {
- return wynikDziecka1;
- }
- else
- {
- return wynikDziecka2;
- }
- }
- }
- }
- else
- {
- fprintf(stderr, "%s", "Podaj 1 argument zawierający od 1-20 znaków\n");
- return 1;
- }
- }
- else
- {
- fprintf(stderr, "Brak argumentu\n");
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement