Patryk Czarnik Zadanie 1 Program nalezy wywolywac poleceniem fibb N, gdzie N jest argumentem i ma byc liczba calkowita, program policzy liczbe F(N) (przy zalozeniu, ze F(0)=F(1)=1). Pierwszy proces zwraca wynik, jesli N=0 lub N=1, w przeciwnym przypadku wywoluje funkcje wywolajPodproces (z modulu fibb_ogolne.c). Funkcja ta tworzy nowy proces i daje mu kod programu fibb_synek wywolanego z odpowiednimi parametrami. Funkcja ta przekazuje wyniki czesciowe do syna i wnuka procesu wywolujacego ja. Funkcja poprzez parametry programu przekazuje tez numery deskryptorow: - ktorym nowy proces ma czytac od dziadka - ktory nowy proces ma przekazac dalej, a dopiero jego syn bedzie z niego czytal. Poniewaz proces 2 nie ma dziadka, proces 1 musi go "udawac". Dlatego przed wywolaniem funkcji wywolajPodproces w fibb.c tworzone jest lacze fdNaNiby, do ktorego wpisywany jest wynik F(0). W kolejnych procesach (tych z kodem fibb_synek) odczytywane sa czesciowe wyniki od ojca i dziadka, obliczany jest nowy wynik. Sprawdzane jest, czy liczba jest juz policzona, jesli tak wypisywany jest wynik; jesli nie, wywolywana jest funkcja wywolajPodproces, ktora tworzy nastepny podproces i przekazuje mu odpowiednie parametry. Parametrami fibb_synek maja byc: - numer procesu, - argument calej rodziny procesu, - numer deskryptora, ktorym mozna czytac od dziadka, - numer deskryptora, ktory trzeba przekazac dalej. Komunikacja miedzy ojcem a synem odbywa sie przez przedefiniowane standardowe we/wyj. Dzieki temu nie trzeba przekazywac kolejnego numeru deskryptora. Z tego powodu wypiszWynik korzysta z stderr.