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