是否可以将stdout重定向为stdin到同一个程序?

时间:2014-01-21 08:09:22

标签: c pipe stdout stdin io-redirection

我正在编写一个过滤器,我正在探索编写程序的方法。我想知道这是否可能:从stdin中的输入,写入stdout,但重定向此stdout,以便程序再次读取生成的stdout,就好像它是stdin一样,从而重新处理数据。我不希望将数据存储在一个巨大的数组中 - 我希望仅使用流来实现这一点。这甚至可能吗? (如果没有,那也没关系。)另外,请注意:我希望只在C代码的单个源文件中执行此操作。

2 个答案:

答案 0 :(得分:2)

是的,您可以在任何POSIX系统中为自己创建pipe

但是没有免费的午餐。如果你需要存储数据,它必须去某个地方。管道由OS管理的缓冲区支持。

您可以将管道的末端设置为返回stdinstdout(如Joachim的答案),但我建议不要这样做,因为它会覆盖通常的输入和输出通道该计划。 (C和任何POSIX服务都不会“播放”流,因此用户可以看到它,并让它在程序中回显。)

答案 1 :(得分:1)

创建pipeDuplicate管道的读取端为新STDIN_FILENO,写入端为STDOUT_FILENO,您已全部设置完毕。您现在写入stdout的所有内容都将在stdin上提供。