Классический C. Использование каналов в функции execvp, перенаправлении stdin и stdout
Я хочу смоделировать bash в моей программе на Linux C с использованием каналов и функции execvp. например
ls -l | wc -l
Есть моя программа:
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);
}
Этот код на самом деле работает, но неделай правильно. Какие'не так с этим кодом? Тот'не работает и я неПонятия не имею, почему.