Descripteur de fichier incorrect

Est-ce que quelqu’un voit un problème avec ça, ça ne marche pas en disant un descripteur de fichier incorrect, je ne sais pas pourquoi?

pipe(pipefd[0]); if ((opid = fork()) == 0) { dup2(pipefd[0][1],1);/*send to output*/ close(pipefd[0][0]); close(pipefd[0][1]); execlp("ls","ls","-al",NULL); } if((cpid = fork())==0){ dup2(pipefd[0][1],0);/*read from input*/ close(pipefd[0][0]); close(pipefd[1][1]); execlp("grep","grep",".bak",NULL); } close(pipefd[0][0]); close(pipefd[0][1]); 

D’après votre code, je suppose que pipefd est défini comme suit:

 int pipefd[2][2]; 

Maintenant, quand tu fais:

 pipe(pipefd[0]) 

Cela ne fait que pipefd[0][0] et pipefd[0][1] .

Alors quand tu fais:

 # Bad descriptor close(pipefd[1][1]); 

vous référencez des pipefd[1][0] aléatoires (vous ne définissez jamais pipefd[1][0] ou pipefd[1][1] ).

D’après le code affiché, je ne vois pas pourquoi vous ne faites pas que:

 int pipefd[2]; pipe(pipefd); 

Les index du deuxième bloc semblent suspects.