|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2017
Messaggi: 4
|
Singola pipe tra padre e piu figli
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);} } |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jun 2017
Messaggi: 4
|
Qualcuno riesce a darmi delucidazione.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
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. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:11.



















