Funkcja fork() w języku ANSI C służy do tworzenia nowych procesów współbieżnych. Nowo utworzony proces nazywamy procesem potomnym,
a proces w którym wywołujemy fork() procesem rodzicielskim. Przypomnij sobie zad. 3 z laboratorium 9.
UWAGA: Przed uruchomieniem każdego z poniższego kodu postaraj się przewidzieć jego rezultat. Nastepnie skompiluj i uruchom program.
Program 1
Nowo tworzony proces wykonuje kod od momentu instrukcji fork().
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
printf("To ja główny proces");
fork(); // po tej instrukcji wspołbieżnie zostaje uruchomiony proces z kodem znajdującym się poniżej
printf("To ja proces potomny lub rodzicielski");
return 0;
}
Program 2
Procesy potomne również mogą tworzyć prcoesy potomne wobec siebie.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
fork();
fork();
fork();
printf("Cześć!");
return 0;
}
Program 3
Funkcja fork() zwraca liczbę ujemną, w razie błędu, w przeciwnym wypadku 0 do procesu
potomnego, a ID procesu potomka do rodzica.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(){
int zm = fork();
if (zm < 0) printf("Coś poszło nie tak");
else if (zm==0) printf("To ja proces potomny %d\n", getpid());
else printf("To ja proces rodzicielski %d\n", getpid());
return 0;
}
Program 4
Funkcja wait() powoduje czekanie procesu rodzicielskiego na zakończenie procesu potomnego.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t cpid;
if (fork()== 0)
exit(0); // zakończenie działania procesu potomnego
else cpid = wait(NULL); // wait() zwraca id porcesu zakonczonego potomnego
printf("Parent pid = %d\n", getpid());
printf("Child pid = %d\n", cpid);
return 0;
}
Zadanie
Korzystając m.in. z funkcji wait() (proszę
przeczytać manuale), proszę napisać program w ANSI C, który będzie pobierał
od użytkownika liczbę całkowitą, wpisze ją do pliku, uruchomi proces
potomny i będzie czekał aż zakończy on działanie.
Drugi proces (potomny) pobierze z tego pliku liczbę, obliczy jej sześcian i
wypisze na ekranie.