如何使用相同的控制台作为进程的输出和另一个进程的输入?

时间:2016-05-18 08:13:19

标签: linux console pipe

我正在尝试使用suckless ii irc客户端。我可以通过tail -f out文件收听频道。但是,我也可以通过启动echocat命令输入到同一控制台吗?

如果我执行该过程,它实际上会在此控制台中显示输出,但这似乎不正确?逻辑上,我认为我需要获得控制台的fd(但是如何做到这一点),然后强制尾输出到该fd并且可能背景它。然后使用当前的bash启动cat > in

这样做真的很好,还是我为一个简单的任务创建了大量的进程开销?换句话说,管道很多东西很好但是它会产生很多开销,如果你要重复那个任务,理想情况下必须在一个单独的过程中?

1 个答案:

答案 0 :(得分:1)

  

但是我也可以通过启动echo或cat命令输入同一个控制台吗?

根本没有! cat写入当前内容。猫不知道内容会在以后增长。 echo从给定的命令行写入变量和结果。 echo本身不是用于编写文件内容的。

  

如果我介绍了这个过程,它实际上会在这个控制台中显示输出,但这似乎不是正确的方法?

如果不重定向输出,则输出将进入控制台。这就是它的设计方式: - )

  

从逻辑上讲,我认为我需要获得控制台的fd(但是如何做到这一点),然后强制将尾部输出强加到该fd并且可能背景它。

据我所知,这是相反的方向。如果要从进程写入stdin,只需使用管道即可。 (无用)示例显示cat写入管道,下一个命令将从管道读取。您可以扩展到任何其他管道读/写方案。见下面给出的链接。

示例:

cat main.cpp | cat  /dev/stdin
cat main.cpp | tail -f

最后一个不会退出,因为它等待管道获得更多从未发生过的内容。

  

这样做真的很好,还是我为一个简单的任务创建了大量的进程开销?换句话说,管道很多东西很好但是它会产生很多开销,如果你要重复那个任务,理想情况下必须在一个单独的过程中?

我不知道你的工作时间如何,但我相信开销很低。在自编的编程中做同样的事情一定不能更快。如果所有操作都在一个进程中完成,并且不需要访问文件系统,那么速度会快得多。但是如果你也使用系统调用,例如文件系统访问,我相信它不会快得多。你总是要付出你所得到的工作。

对于IO重定向,请阅读: http://www.tldp.org/LDP/abs/html/io-redirection.html

如果您的场景更复杂,您可以考虑使用命名管道而不是IO重定向。为此你可以看看: http://www.linuxjournal.com/content/using-named-pipes-fifos-bash