#include #include #include #include #include void usage (char *argv0) { fprintf (stderr, "%s : usage\n", argv0); fprintf (stderr, "%s SEPARATEUR cmd [SEPARATEUR cmd]", argv0); exit (EXIT_FAILURE); } void perror_and_exit (char *message) { fprintf (stderr, "%s", message); perror (" "); exit (EXIT_FAILURE); } void filtrer_entree(char *cmd, char *argv[]) { // établir la commande placée dans argv comme filtre de l'entrée // standard du processus courant ... } int main (int argc, char *argv[]) { int feedback[2]; if (argc < 3) usage (argv[0]); // installer le tube feedback comme entree/sortie du processus pere ... // lancer les differentes commandes devant le pere, la derniere // commande est réalisée par le pere for (size_t arg = 2; arg < argc; arg++) { size_t debut = arg; for (arg++; arg < argc && strcmp (argv[1], argv[arg]) != 0; arg++) ; if (arg < argc) { argv[arg] = NULL; ... } else { execvp (argv[debut], argv + debut); perror_and_exit (argv[debut]); } } }