Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Dawid Mocek
- Sekcja 1
- MOSIX Zadanie 1.
- W zadaniu należy stworzyć `n` procesów potomnych oraz dwa potoki (n podawane jako parametr
- wywołania programu). Jeden z potoków będzie służył do wysyłania danych do procesów potomnych,
- natomiast drugi - do odbierania. Proces rodzica będzie wysyłał do potoku zestaw liczb.
- Procesy potomne maja odbierać te liczby, znajdować największy całkowity dzielnik danej liczby oraz
- wysłać wynik do rodzica drugim potokiem. Proces rodzica po wysłaniu wszystkich liczb przechodzi w stan
- odbierania danych. Wszystkie obliczone liczby maja zostać zsumowane, a wynik końcowy ma być
- wyświetlony na ekranie.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <signal.h>
- #include <unistd.h>
- int main(int argc, char **argv)
- {
- int n = atoi(argv[1]);
- int liczby[10] = { 2, 5, 6, 10, 77, 89, 49, 27, 91, 68 };
- int wartownik = 1337;
- int i = 0, j = 0, k = 0;
- int pipefd[2];
- int pipefd2[2];
- int tmp;
- int z;
- int g;
- int suma;
- pid_t cpid, fpid;
- char buf;
- if(pipe(pipefd) == -1) {
- perror("Pipe error");
- exit(EXIT_FAILURE);
- }
- if(pipe(pipefd2) == -1) {
- perror("Pipe2 error");
- exit(EXIT_FAILURE);
- }
- for(i = 0; i < 10; i++)
- write(pipefd[1], &liczby[i], sizeof(int));
- for(i = 0; i < 10; i++)
- write(pipefd[1], &wartownik, sizeof(int));
- // close(pipefd[1]);
- for(i = 0; i < n; i++)
- {
- // Tworze dziecko
- fpid = fork();
- // Sprawdzenie fpida
- if(fpid == -1) { perror("Fork error"); exit(EXIT_FAILURE); }
- if(fpid == 0) {
- // Czytamy liczbe do tmp
- while(read(pipefd[0], &tmp, sizeof(int))) {
- // printf("TMP = %d\n", tmp);
- if(tmp == wartownik)
- exit(EXIT_SUCCESS);
- // Tu robie obliczenia
- for(g = tmp - 1; g >= 1; g--){
- if((tmp % g) == 0){
- break;
- }
- }
- //z = g;
- // Zapisuje do do pipefd[1]
- write(pipefd2[1], &g, sizeof(int));
- } // end while
- } // end if
- } //end for
- // Trzeba zamknac ;/
- close(pipefd2[1]);
- tmp = 0;
- // Czytam
- suma = 0;
- while(read(pipefd2[0], &tmp, sizeof(int)))
- suma += tmp;
- printf("Suma = %d\n", suma);
- printf("koniec\n");
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement