我正在构建一个具有shell功能的程序,我想知道如何执行管道操作。因此,当系统执行program1 arg | tee output-file
时,系统会将stdin
从tee
连接到来自stdout
的{{1}}以及捕获任何program1
最后stderr
。
答案 0 :(得分:2)
要求管道:
int p[2];
pipe(p);
在第一个程序的exec()
之前,将其标准输出绑定到它,并关闭其他fds:
dup2(p[0], STDOUT_FILENO);
close(p[0]);
close(p[1]);
在第二个程序的exec()
重定向其标准输入之前:
dup2(p[1], STDIN_FILENO);
close(p[0]);
close(p[1]);
您必须在fork()
之后关闭主程序中管道的两端,并且完成后(对于管道设置)。