Originariamente inviato da chaka
devo far condividere unsegmento di memoria tra 2 processi tramite una pipe;
Non capisco il termine "tramite"... una pipe non serve a "far convidivere un segmento di memoria tra 2 processi", ma semplicemente a metterli in comunicazione... è un meccanismo di IPC, non c'entra con la memoria condivisa.

Originariamente inviato da chaka
il processo genitore deve creare la successione di fibonacci e il processo figlio deve stamparla..
Se questo è quello che devi fare, non c'è bisogno di ricorrere alla memoria condivisa. Il processo padre deve aprire entrambe le estremità della pipe (lettura e scrittura) richiamando appunto pipe(), a quel punto crea il processo figlio che eredita entrambi i descrittori associati alle due estremità della pipe. Fatto questo, poiché il processo figlio deve leggerci, chiude l'estremita in scrittura, legge i dati (in questo caso i numeri della successione di Fibonacci) e li stampa. Il processo padre, invece, chiude l'estremità della pipe in lettura (perché lui invece deve scriverci) e appunto scrive nella pipe i numeri della successione di Fibonacci, che saranno letti e stampati dal processo figlio.

ho impostato questo codice ma sicuramente ho bisogno di un aiuto per correggerlo;
Al di là dei concetti relativi alla programmazione di sistema Unix, il codice presenta diversi errori (o per meglio dire warnings, ma non trascurabili) dovuti ad uno scorretto uso delle funzioni...

Compilando con -Wall -pedantic ottengo:

codice:
fibonacci.c:11: warning: return type defaults to 'int'
fibonacci.c:11: warning: second argument of 'main' should be 'char **'
fibonacci.c: In function 'main':
fibonacci.c:20: warning: implicit declaration of function 'atoi'
fibonacci.c:22: warning: ISO C90 forbids mixed declarations and code
fibonacci.c:34: warning: passing argument 2 of 'write' makes pointer from integer without a cast
fibonacci.c:35: warning: passing argument 1 of 'shmat' makes integer from pointer without a cast
fibonacci.c:39: warning: passing argument 1 of 'sprintf' from incompatible pointer type
fibonacci.c:39: warning: passing argument 2 of 'sprintf' makes pointer from integer without a cast
fibonacci.c:47: warning: passing argument 2 of 'read' makes pointer from integer without a cast
fibonacci.c:56: warning: control reaches end of non-void function
fibonacci.c: At top level:
fibonacci.c:59: warning: return type defaults to 'int'
il mio consiglio e di correggere questi warnings prima di procedere... si tratta principalmente di rivedere come hai dichiarato le variabili che passi alle funzioni (tanto per dirne una, "buffer" nel tuo caso deve essere un array di 30 elementi se vuoi passarlo alla write... o comunque in generale un puntatore).

Se hai problemi, chiedi pure