Il programma è quasi completo, rimane solo il problema finale..

Ho un file (A) in cui un processo crea 3 processi figli.
I 3 figli mettono un messaggio ciascuno su di una coda di messaggi (creata dal padre) con msgsnd().
In un altro file (B), un processo crea 3 processi figli che devono ricevere i messaggi che sono sulla coda (1 ciascuno) con msgrcv(). Dopo aver ricevuto il messaggio, devono modificarne una parte e rimetterlo sulla coda.
I 3 figli che ci sono in A, a questo punto, si riprendono il dato che è stato modificato da quelli in B e così termina l'esecuzione (ovvero il padre attende che i figli abbiano terminato i loro compiti e poi elimina la coda con msgctl()).

L'invio-modifica-ricezione funziona, l'unica cosa che non va è la chiusura della coda, non so come dire al padre di aspettare tutti e 3 i figli.

Ho un ciclo, all'interno la fork e le istruzioni per i figli, e fuori dal ciclo devo disallocare la coda.
Ho provato in questo modo, dicendo di aspettare 3 volte (pensando che in questo modo ogni wait venga associata ad un figlio):
codice:
for(i=0;i<3;i++){
//fork e istruzioni per i figli
}
wait(0);
wait(0);
wait(0);
msgctl(idcoda,IPC_RMID,0);
ma dopo che il primo figlio ha terminato la coda viene disallocata, senza aspettare gli altri 2 figli. Quello che mi chiedo è: come fare?