#include #include #include #include #include #include /* For O_* constants */ #include /* For mode constants */ #include #include #include /* * ***D09*** il processo padre crea 10 processi figli; il processo figlio i-mo calcola fibonacci(i) per conto suo. viene usata una unica memoria condivisa tra tutti i processi, per consentire ai processi figli di restituire i 10 valori. il processo padre scrive su stdout i valori di fibonacci restituiti dai processi figli: fibonacci(0) fibonacci(1) ... fibonacci(9) */ #define N 10 int * map; unsigned int fibonacci(unsigned int i) { switch (i) { case 0: return 0; case 1: return 1; default: return fibonacci(i-1) + fibonacci(i-2); } } void process(int i) { map[i] = fibonacci(i); exit(0); } int main() { map = mmap(NULL, sizeof(int)*10, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1,0 ); if (map == MAP_FAILED) { perror("mmap"); exit(1); } for (int i = 0; i < 10; i++) { switch (fork()) { case -1: perror("fork"); exit(1); case 0: process(i); default: ; } } while (wait(NULL) != -1) ; for (int i = 0; i < 10; i++) { printf("fibonacci(%d) = %d\n", i, map[i]); } return 0; }