Versuchen Sie Folgendes:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
int pipefd[2];
int childpid,childpid2;
char* cmd[3]={"ls",NULL,NULL};
char* cmd2[3]={"grep",".c",NULL};
pipe(pipefd);
if(childpid=fork()){
//parent
close(pipefd[1]);
dup2(pipefd[0],STDIN_FILENO);
execvp("grep",cmd2);
}else{
//child
//write
close(pipefd[0]);
dup2(pipefd[1],STDOUT_FILENO);
execvp("ls", cmd);
}
return 0;
}
Tatsächlich wird das Programm sofort beendet – tatsächlich wird der Elternprozess vorher beendet die Kinder laufen, weshalb vor "test.c" ein Shell-Prompt steht.
Sie können die Dinge ein wenig verbessern, indem Sie dies in Ihrem übergeordneten Element hinzufügen:
wait(childpid);
wait(childpid2);
wodurch der Elternteil nach beiden Kindern beendet wird.