Multipipe fonction briser stdin dans c?

Certains amis et moi essayons d’implémenter un shell complet, et je suis responsable de la fonction multipipe.

Le problème est que, juste après la fin de la fonction et son retour, le read() dans la boucle principale semble lire sans fin 0 octet et provoquer une boucle infinie. Cependant, la fonction génère le résultat souhaité.

Après avoir passé environ une semaine à essayer de déboguer ma fonction, nous sums arrivés à la conclusion suivante: en quelque sorte, j’ai brisé STDIN .

Qu’est-ce qui pourrait causer cela?

Voici la fonction complète moins la vérification des erreurs pour des raisons de clarté.

 int do_pipe( t_parser *paser, int fd, t_info *info, int j ) { int status; pid_t pid; int pipefd[ 2 ]; if ( j == 0 ) { while ( parser->next != NULL ) parser = parser->next; fd = 1; } if ( parser->prev ) pipe( pipefd ); pid = fork(); if ( pid == 0 ) { if ( parser->prev ) { close( pipefd[1] ); dup2( pipefd[0], 0 ); close( pipefd[0] ); } if ( parser->next ) { if ( parser->prev ) close( pipefd[0] ); dup2( fd, 1 ); close( fd ); } my_execve( parser, info->env ); } else { if ( parser->prev ) close( pipefd[0] ); if ( fd != 1 ) close( fd ); j++; if ( parser->prev ) do_pipe( parser->prev, pipefd[1], info, j ); waitpid( pid, &status, 0 ); } return ( 0 ); }