PDA

View Full Version : Singola pipe tra padre e piu figli


andrea2296
06-06-2017, 19:58
Devo creare una pipe per far comunicare un padre con piu figli. Il padre è lo scrittore i figli i lettori.
Il mio codice per si blocca al primo figlio. Cioè il padre scrive, il primo figlio legge e poi gli altri figli non leggono niente conme se la pipe fosse vuota.
Riporto il codice. non riescoa a capire dove sia l'errore. Che sia un problema di sincronizzazione.

int numeroprocessi = atoi(argv[4]);

char s[10];


for(i=0;i<numeroprocessi;i++){
if((pid[i]=fork()) == 0){

close(fdpipe[1]);
if(read(fdpipe[0],s,sizeof(s)) > 0){
printf("Processo figlio: ho letto il messagio: %s \n\n",s);
// close(fdpipe[0]);

}
else if(read(fdpipe[0],s,sizeof(s)) <= 0){
printf("Processo figlio:non c'è nulla da leggere\n\n");
//close(fdpipe[0]);}
}
else {
printf("Processo Padre: ho creato il figlio: %d\n", i);
close(fdpipe[0]);
printf("Ho scritto nella pipe\n");
write(fdpipe[1],t,strlen(t)+1);
close(fdpipe[1]);
wait(&status);
exit(0);}
}

andrea2296
07-06-2017, 15:35
Qualcuno riesce a darmi delucidazione.

tomminno
07-06-2017, 16:49
Le namedpipe non possono essere usate come chiedi te. Il primo client che legge consuma i dati che non sono più disponibili per gli altri client. Dovresti inviare il messaggio tante volte quanti sono i client connessi, ma i client una volta ricevuto il messaggio dovrebbero disconnettersi altrimenti qualcuno potrebbe ricevere più volte lo stesso messaggio e qualcuno niente.
Non sono nemmeno sicuro che tra una read e l'altra il messaggio non possa venir frammentato tra i vari client connessi.
Secondo me dovresti usare i socket.