Code:
#define BSIZ 20
int fdpipe[2][2];//
int main(){
pipe(fdpipe[0]);
if(fork()!=0){//parent
close(fdpipe[0][0]);
write(fdpipe[0][1],"str1\nstr2\nstr3\n",BSIZ);//
int status;
waitpid(-1,&status,0);
}
else{
close(fdpipe[0][1]);
char buf[100];
read(fdpipe[0][0],buf,BSIZ);
pipe(fdpipe[1]);
if(fork()!=0){//this
close(fdpipe[1][0]);
write(fdpipe[1][1],buf,BSIZ);
int status;
waitpid(-1,&status,0);
}
else{//child's child
dup2(fdpipe[1][0],0);
close(fdpipe[1][1]);
char buf2[100];
read(fdpipe[1][0],buf2,BSIZ);
printf("read from pipe:\n%s",buf2);
/*
char *args[2];
args[0]="sort";
args[1]=NULL;
execvp(args[0],args);
*/
}
}
}
