#include #include #include #include #include #include main() { int tube1a[2]; int tube1b[2]; int tube2a[2]; int tube2b[2]; int chiffre = 0; int lettre = 0; char c; /* création de fils1 */ pipe(tube1a); pipe(tube1b); if(fork()==0) { /* code de fils1 (qui compte les chiffres) */ close(tube1a[1]); while(read(tube1a[0],&c,1)>0) { chiffre++; } write(tube1b[1],&chiffre,sizeof(int)); close(tube1b[1]); exit(0); } /* création de fils2 */ pipe(tube2a); pipe(tube2b); if(fork()==0) { /* code de fils2 (qui compte les lettres) */ close(tube2a[1]); while(read(tube2a[0],&c,1)>0) { lettre++; } write(tube2b[1],&lettre,sizeof(int)); close(tube2b[1]); exit(0); } /* code du père */ close(tube1a[0]); close(tube2a[0]); while(read(0,&c,1)>0) { if(isdigit(c)) /* chiffre */ write(tube1a[1],&c,1); if(isalpha(c)) /* lettre */ write(tube2a[1],&c,1); } close(tube1a[1]); close(tube2a[1]); read(tube1b[0],&chiffre,sizeof(int)); read(tube2b[0],&lettre,sizeof(int)); /* affichage des résultats */ printf("nb de chiffres = %d\n",chiffre); printf("nb de lettres = %d\n",lettre); close(tube1b[0]); close(tube2b[0]); wait(NULL); wait(NULL); exit(0); }