in effetti come dice yuyevon è un pò inutile usare la memoria condivisa in questo caso.
Ma non riesco a capire... anche tu ricorri alla memoria condivisa... ma è per caso proprio un esercizio la cui traccia lo richiede? Cioè è davvero un abuso XD

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>

int fibo(int n)
{
	int i, F1 = 1, F2 = 0, ris;

	if ( n < 2 )
		return n;

	for ( i = 2 ; i <= n ; i++ ) {
		ris = F1 + F2;

		F2 = F1;
		F1 = ris;
	}

	return ris;
}

int main(void)
{
	int fd[2], n, num = 0;
	pid_t pid;

	pipe(fd);

	if ( ( pid = fork() ) < 0 ) {
		fprintf(stderr, "Errore nella creazione del processo: %s\n", strerror(errno));
		exit(errno);
	}

	if (pid == 0) {

		close(fd[1]);

		while ( read(fd[0], &n, sizeof(int)) )
			printf("%d\n", n);

		close(fd[0]);
		exit(0);
	}
	else {

		close(fd[0]);

		while (num < 10) {
			num++;
			n = fibo(num);
			write(fd[1], &n, sizeof(int));
		}

		close(fd[1]);
	}

	exit(0);
}
Comunque amici i processi vanno terminati... a meno che non amiamo programmarci delle fork bomb ;D

Inoltre sconsiglio vivamente l'uso dell'algoritmo di Fibonacci ricorsivo semplice perché

http://forum.html.it/forum/showthrea...ight=fibonacci