andrea2296
07-06-2017, 22:45
Si puo creare una pipe unica per comunicare tra il processo padre e gli n figli creati tramite fork? Io vorrei che il processo padre creasse una pipe. Per ogni figlio che creato tramite il padre scrive dentro la pipe, il figlio legge e si distrugge. Questo per gli n figli. Con il codice qui riportato riesco a farlo solo per il primo figlio. Cioè il il padre scrive e il figlio legge dopodiche gli altri figli vedono la pipe come vuota
/*Creazione Pipe*/
if(pipe(fdpipe) == -1) {
perror("pipe");
exit(1); }
printf("Processo padre: pipe creata\n");
/*Creazione processi figli*/
int numeroprocessi = atoi(argv[4]);
char s[10];
for(i=0;i<numeroprocessi;i++){
if((pid[i]=fork()) == 0){
dup(fdpipe[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);
///---riapertura pipe
exit(0);
}
}
/*Creazione Pipe*/
if(pipe(fdpipe) == -1) {
perror("pipe");
exit(1); }
printf("Processo padre: pipe creata\n");
/*Creazione processi figli*/
int numeroprocessi = atoi(argv[4]);
char s[10];
for(i=0;i<numeroprocessi;i++){
if((pid[i]=fork()) == 0){
dup(fdpipe[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);
///---riapertura pipe
exit(0);
}
}