#include #include #include #include #include "termine.h" int le_tube[2]; void traite_le_fils(int num_fils) { close(1); dup(le_tube[1]); close(le_tube[1]); close(le_tube[0]); switch(num_fils) { case 1: printf("Lancement calc1\n"); if(execl("./calc1", "calc1", NULL)==-1) termine("Probleme lors du lancement de calc1"); break; case 2: printf("Lancement calc2\n"); if(execl("./calc2", "calc2", NULL)==-1) termine("Probleme lors du lancement de cal2"); break; case 3: printf("Lancement calc3\n"); if(execl("./calc3", "calc3", NULL)==-1) termine("Probleme lors du lancement de calc3"); break; } } void traite_le_pere() { char buff; int i; close(le_tube[1]); while(1) { printf("os\n"); while(read(le_tube[0], &buff, 1)!=0) printf("%c", buff); } } int main() { if(pipe(le_tube) == -1) termine("Erreur lors de la création du tube"); if(fork() ==0) { traite_le_fils(1); } else // Processus Pere { if(fork()==0) { traite_le_fils(2); } else // Processus Pere { if(fork()==0) { traite_le_fils(3); } else // Processus Pere { traite_le_pere(); } } } return 0; }