simon91 | Bonjour,
Je rencontre un problème, j'ai implémenté un shell simple qui tourne avec les pipes mais seulement pour deux commandes. J'aimerais le modifier afin qu'il réussisse à tourner avec plusieurs pipes enchainés comme "echo test | cat | cat | cat | wc" par exemple mais je manque énormément d'inspiration et je bloque depuis.
Voici le bout de mon code de la partie concernée:
Code :
- if (pid == 0) // in the child process
- {
- for (i = 0; i < cpt; i++) // for each cmd
- {
- if (mot[i][0] == '|')
- {
- j = i;
- }
- }
- if (j > 0)
- {
- if (pipe(p))
- {
- fprintf(stderr, "pipe" );
- exit(1);
- }
- mot[j] = NULL;
- if (fork() == 0) //enfant
- {
- j = -1;
- close(p[0]);
- dup2(p[1],1);
- close(p[1]);
- }
- close(p[1]); //parent
- dup2(p[0], 0);
- close(p[0]);
- }
- for (i = 0; dirs[i] != 0; i++)
- {
- snprintf(pathname, sizeof(pathname), "%s/%s", dirs[i], mot[j+1]);
- execv(pathname, &mot[j+1]);
- }
- }
- else
- {
- while (wait(0) != pid) // parent: wait child
- }
|
Merci d'avance pour l'aide ! |