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

标签 c unix pipe dup2

我已经被困在这个问题上一段时间了,是否可以将标准输出重定向到两个不同的地方?我正在编写自己的 shell 进行练习,它目前可以运行 ps aux | 之类的命令。 wc -lps aux | wc -l > 输出文件。但是,当我尝试运行 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

最佳答案

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

例子: ps 辅助 | tee file.out | wc -l

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

关于c - 是否可以将 stdout 重定向到 C 中的两个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24806317/

相关文章:

c - 埃拉托斯特尼筛法,素数 C

c - 尝试直接通过 STDIN 传递 sudo 密码

bash - 如何避免 echo 关闭 FIFO 命名管道? - Unix FIFO 的有趣行为

C++/C : Move Directory to Another Location

android - Linux API,即使使用正确的文件描述符和权限,Write() 也会失败

c - 当程序在 getpass 上中断时,如何不将提供的字符写入 bash stdout?

linux - 删除类 UNIX 系统上的所有 SYSTEM V 共享内存和信号量

linux - 如何在 qsub 命令中使用管道或重定向?

c - 包含头文件是如何发生的?

shell - 我可以从另一个 shell 脚本调用一个 shell 脚本的函数吗?