直接看代码, 里面已经有注释了。
主程序:
int main()
{
char buf[256];
int fdin[2];
int fdout[2];
int pid;
int size;
// 创建全双工管道
pipe(fdin);
pipe(fdout);
pid = fork();
if (pid == 0){
// 子进程...
close(fdin[1]); // 子进程用不了fdin的输出
close(fdout[0]);
// 重定向标准输入和标准输出到管道
// 子进程从标准输入(fdin[0])读取,主进程往fdin[1]写入
// 子进程向标准输出(fdout[1]写入),主进程从fdout[0]读取
if (dup2(fdin[0], STDIN_FILENO) != STDIN_FILENO
|| dup2(fdout[1], STDOUT_FILENO) != STDOUT_FILENO) {
fprintf(stderr, "dup2() failed!\n");
}
close(fdin[0]);
close(fdout[1]);
// 执行外部程序 test2
execlp("./test2", "test", NULL);
fprintf(stderr, "Failed to execlp(): %s\n", errno);
exit(0);
}
// 发送 "Hello world" 给子进程,
// 子进程可以从fdin[0]读取
write(fdin[1], "Hello world&