Potresti utilizzare le funzioni per gestire la memoria condivisa appartenenti agli header: sys/ipc.h e sys/shm.h
in particolare: shmget,shmat,shmdt e shmctl
Ti scrivo un po' di codice per farti vedere come funziona il meccanismo, ma poi ti conviene documentarti bene su questi meccanismi.
Prima di tutto ti crei la struttura:
stuct prova{
int var1;
char var2;
} *punt;
poi crei l'area di memoria condivisa con la shmget
shmid = shmget(KEY,sizeof(struct prova),flags); //flags valore num per specificare i diritti di accesso
punt = shmat(KEY,0,SHM_RND);//attacchi l'area di memoria condivisa allo spazio di indirizzamento del processo
poi con
punt->var1
punt->var2
puoi smanettare sulla struttura condivisa.
Riguardo alle altre due funzioni:
shmdt, serve per scollegare il segmento dallo spazio di indirizzamento del processo;
shmctl, serve per eliminare il segmento, il che provoca lo scollegamento di esso da tutti gli spazi di indirizzamento dei processi che facevano accesso ad esso.
Molto importante è il valore KEY, per ottenere la condivisione del segmento, tale valore deve essere uguale per tutti i processi che vuoi che condividano tale segmento e per ottenere ciò puoi ad esempio definirlo come costante in un file header da te creato, di cui farai l'include.
Se invece vuoi far condividere tale segmento tra un processo padre e i suoi figli, non ci sono problemi, dopo che hai fatto shmget e shmat, fai le fork per la creazione dei figli, essi erediteranno una copia dello stack del padre.
Sono stato molto sbrigativo, anche se le cose da spiegare erano molte di più, ti conviene quindi documentarti su queste funzioni oppure chiedimi pure chiarimenti sugli aspetti che non ti quadrano e io ti risponderò.
Inoltre dimenticavo di dirti che questi meccanismi funzionano solo su Unix e suoi derivati (cioè Linux), in quanto vengono usate syscall di tali SO