Coba ini:
#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;
}
Sebenarnya program langsung keluar — sebenarnya, proses induk keluar sebelum anak-anak berjalan, itulah sebabnya ada prompt shell sebelum "test.c".
Anda dapat sedikit menyempurnakannya dengan menambahkan ini di induk Anda:
wait(childpid);
wait(childpid2);
yang akan membuat orang tua keluar setelah kedua anaknya.