我正在尝试使用suckless
ii
irc客户端。我可以通过tail -f out
文件收听频道。但是,我也可以通过启动echo
或cat
命令输入到同一控制台吗?
如果我执行该过程,它实际上会在此控制台中显示输出,但这似乎不正确?逻辑上,我认为我需要获得控制台的fd
(但是如何做到这一点),然后强制尾输出到该fd并且可能背景它。然后使用当前的bash启动cat > in
。
这样做真的很好,还是我为一个简单的任务创建了大量的进程开销?换句话说,管道很多东西很好但是它会产生很多开销,如果你要重复那个任务,理想情况下必须在一个单独的过程中?
答案 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