Cos'ha di inesatto questo programmino??
codice:
#include <stdio.h>
#include <stdlib.h>
#define N_FIGLI 2
int n=0;
void pari(int ppari[]){
int buffer;
//printf("Entro nella funzione pari\n");
while(n>=0){
read(ppari[0],&buffer,sizeof(buffer));
printf("Il figlio pari ha letto : %d",buffer);
}
exit(1);
}
void dispari(int pdispari[]){
int buffer;
//printf("Entro nella funzione dispari\n");
while(n>=0){
read(pdispari[0],&buffer,sizeof(buffer));
printf("Il figlio dispari ha letto : %d",buffer);
}
exit(2);
}
int main(){
int buffer,ppari[2],pdispari[2],pid=10,i,status,m=0;
if(pipe(ppari)==-1) {printf("Errore nella creazione della pipe");exit(1);}
if(pipe(pdispari)==-1){printf("Errore nella creazione della pipe");exit(1);}
for(i=0;i<N_FIGLI;i++){
if(pid>0){
pid=fork();
//printf("Pid = %d && i=%d\n",pid,i);
if(pid==0 && i==0){
pari(ppari);
}else if(pid==0 && i==1){
dispari(pdispari);
}
}
}//for
if(pid>0){
while(n>=0){
printf("Inserisci un valore : ");
scanf("%d",&n);
if((n%2)==0) {write(ppari[1],&n,sizeof(n));}
else write(pdispari[1],&n,sizeof(n));
}
kill(pid,1);
kill((pid-1),1);
wait(&status);
}
return 1;
}
C'è un processo padre che legge dei valori da input e a seconda se sono pari o dispari li manda alla pipe dei pari o alla pipe dei dispari.
Il problema è che le due pipe di lettura non ricevono nulla