在c中手动执行管道

时间:2011-12-07 18:39:27

标签: c linux

  

可能重复:
  Writing my own shell… stuck on pipes?

我正在构建一个具有shell功能的程序,我想知道如何执行管道操作。因此,当系统执行program1 arg | tee output-file时,系统会将stdintee连接到来自stdout的{​​{1}}以及捕获任何program1最后stderr

1 个答案:

答案 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()之后关闭主程序中管道的两端,并且完成后(对于管道设置)。