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
devo far condividere unsegmento di memoria tra 2 processi tramite una pipe;
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.Originariamente inviato da chaka
il processo genitore deve creare la successione di fibonacci e il processo figlio deve stamparla..
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...ho impostato questo codice ma sicuramente ho bisogno di un aiuto per correggerlo;
Compilando con -Wall -pedantic ottengo:
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).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'
Se hai problemi, chiedi pure![]()