Ciao a tutti, sto stuadiando Sistemi Operativi e sono ai miei primi esercizi di creazione di processi sotto un sistema Unix...

devo far condividere unsegmento di memoria tra 2 processi tramite una pipe; il processo genitore deve creare la successione di fibonacci e il processo figlio deve stamparla..

ho impostato questo codice ma sicuramente ho bisogno di un aiuto per correggerlo;

codice:
#include<stdio.h>
#include<unistd.h>
#include<sys/shm.h>
#include<sys/stat.h>

#define BUFFER_SIZE 30

int fibo(int fb);
int i, x, y, buffer, fd[2];
main(int argc, char argv[])
{
 int segment_id, *shared_memory;
 const int size = 5000;
 if(argc<2)
 {
  printf("usage \"fibonacci\"<int value>\n");
  return 0;
 }

 i = atoi(argv[1]);

 pid_t pr;

 pipe(fd);   
 pr = fork();

 if(pr<0)
  fprintf(stderr, "Error generating process\n");
 else if(pr>0)
 {
  close(fd[0]); 
  segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);

  write(fd[1], buffer, BUFFER_SIZE);
  shared_memory = (int *)shmat(fd, NULL, 0);
  for(x=0;x<=i;x++)
  {
   buffer = fibo(x);
   sprintf(shared_memory, buffer);
  }

  close(fd[1]);
 }
 else
 {
  close(fd[1]);
  read(fd[0], buffer, BUFFER_SIZE);
  for(y=0;x<=i;y++)
  {
   printf("%d\n", buffer);
  }
  close(fd[0]);
  shmdt(shared_memory);
 }
 shmctl(segment_id, IPC_RMID, NULL);
}

fibo(int fb)
{ 
 if(fb==0 || fb ==1)
  fb = 1;
 else
 fb = fibo(fb-1) + fibo(fb-2);
 return fb;
}
Qualcuno mi puo aiutare?? Grazie mille!!