是否可以将stdout重定向到C中的两个位置?

时间:2014-07-17 14:29:33

标签: c unix pipe dup2

我已经坚持了一段时间了,是否有可能将stdout重定向到两个不同的地方?我正在为练习编写自己的shell,它目前可以运行ps aux | wc -lps aux | wc -l > output.file等命令。但是,当我尝试运行ps aux > file.out | wc -l时,第二个命令不会从第一个命令接收输入。

在最后一个示例中,第一个命令将在子进程中运行,该进程将输出到管道的一端。逻辑类似于以下内容:

close(stdout);
dup2(fd[1], STDOUT_FILENO);

//If a file output is also found
filewriter = open(...);
dup2(filewriter, STDOUT_FILENO);

//Execute the command

2 个答案:

答案 0 :(得分:4)

普通的UNIX shell也不能使用该语法。 UNIX(以及其他一些操作系统)提供tee [1]命令将输出发送到文件以及stdout

实施例: ps aux | tee file.out | wc -l

[1]见http://en.wikipedia.org/wiki/Tee_(command)

答案 1 :(得分:2)

tee命令在UNIX中执行此操作。要了解如何在直线C中执行此操作,为什么不查看tee's source code