管道如何工作?如果我通过CLI运行程序并将输出重定向到文件,我可以将该文件传输到另一个程序中吗?
基本上,当一行写入文件时,我希望它立即通过管道输送到我的第二个应用程序(我试图从现有程序中动态绘制图形).在转到下一个命令之前,只是不确定管道是否完成了第一个命令.
任何反馈将不胜感激!
解决方法:
如果要将一个程序的输出重定向到另一个程序的输入,只需使用一个简单的管道:
program1 arg arg | program2 arg arg
如果要将program1的输出保存到文件中并将其传送到program2,可以使用tee(1)
:
program1 arg arg | tee output-file | program2 arg arg
管道中的所有程序都是同时运行的.大多数程序通常使用阻塞I / O:如果他们尝试读取输入并且没有任何内容,则阻止:即停止,操作系统取消调度它们直到有更多输入可用(以避免进食) CPU).类似地,如果管道中较早的程序写入数据的速度比后来的程序读取的速度快,那么管道的缓冲区最终会填满并且编写器阻塞:操作系统将其解除调度,直到管道的缓冲区被读取器清空,然后它可以继续写作.
编辑
如果要使用program1的输出作为命令行参数,可以使用反引号或$()语法:
# Runs "program1 arg", and uses the output as the command-line arguments for
# program2
program2 `program1 arg`
# Same as above
program2 $(program1 arg)
$()语法应该是首选的,因为它们更清晰,并且可以嵌套.
标签:c-3,linux,redirect,pipe 来源: https://codeday.me/bug/20190926/1821681.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。