Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /ZAD 1
- Stworzyæ n procesów potomnych i 2 potoki.Rodzic wysy³a do potoku zestaw liczb. Potomek odbiera, znajduje najwiêkszy ca³kowity dzielnik danej lb i wysy³a drugim potokiem wynik do rodzica.
- Rodzic po wys³aniu wszystkich lb przechodzi w stan odbierania. Sumuje wyniki i wyœwietla na ekran.
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <time.h>
- int main(int argc, char *argv[]) {
- int n = atoi(argv[1]);
- int N = 50;
- int p = 1;
- int a = 1;
- int liczba;
- int d;
- int suma = 0;
- int tmp;
- int i, j;
- int Wpotok[2], Zpotok[2];
- int t[N];
- pipe(Wpotok);
- pipe(Zpotok);
- srand(time(NULL));
- for (i=0; i<(N-1); i++){
- t[i] = 1+(int)(rand()%100);
- write(Wpotok[1], &t[i], sizeof(i));
- }
- for (i=0; i<n; i++) {
- if (p!=0)
- p=fork();
- if (p==0)
- while (a==1) {
- read(Wpotok[0], &liczba, sizeof(a));
- if (liczba!=0) {
- d = (liczba/2);
- while (d>0)
- if ((liczba % d)==0) {
- write(Zpotok[1], &d, sizeof(a));
- break;
- }
- else
- d--;
- }
- else
- exit(0);
- }
- }
- if (p!=0) {
- for (i=0; i<(N-1); i++) {
- read(Zpotok[0], &tmp, sizeof(i));
- suma = suma + tmp;
- }
- for (i=0; i<n; i++) {
- j=0;
- write(Wpotok[1], &tmp, sizeof(j));
- }
- printf("suma: %d\n", suma);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement