Klassisch C. Verwenden von Pipes in Execvp-Funktion, stdin und stdout-Umleitung

Ich möchte Bash in meinem Linux C-Programm mithilfe von Pipes und der execvp-Funktion simulieren. z.B

ls -l | wc -l  

Da ist mein Programm:

if(pipe(des_p) == -1) {perror("Failed to create pipe");}

if(fork() == 0) {    //first fork
  close(1);          //closing stdout
  dup(des_p[1]);     //replacing stdout with pipe write 
  close(des_p[0]);   //closing pipe read
  close(des_p[1]);   //closing pipe write

  if(execvp(bash_args[0], bash_args)) // contains ls -l
    /* error checking */
}
else {
  if(fork() == 0) {  //creating 2nd child
    close(0);        //closing stdin
    dup(des_p[0]);   //replacing stdin with pipe read
    close(des_p[1]); //closing pipe write
    close(des_p[0]); //closing pipe read

    if(execvp(bash_args[another_place], bash_args)) //contains wc -l
      /* error checking */
  }

  close(des_p[0]);
  close(des_p[1]);
  wait(0);
  wait(0);
}

Dieser Code läuft tatsächlich, tut aber nicht das Richtige. Was ist los mit diesem Code? Das funktioniert nicht und ich habe keine Ahnung warum.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage