linux – 如何管道只能写入文件(而不是STDOUT)的程序输出?
发布时间:2020-12-14 01:21:01 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写像 Perl Audio Converter这样的东西,所以我需要能够将每个相关的音频格式解码为wav(PCM),然后将wav编码为每种相关的音频格式.我想通过将解码器的输出直接连接到编码器的输入来并行执行此操作.大多数解码器都有一个解码到stdout的选项,但并非所
我正在尝试编写像
Perl Audio Converter这样的东西,所以我需要能够将每个相关的音频格式解码为wav(PCM),然后将wav编码为每种相关的音频格式.我想通过将解码器的输出直接连接到编码器的输入来并行执行此操作.大多数解码器都有一个解码到stdout的选项,但并非所有解码器都能解码.有些人坚持要输出到文件.
所以我的问题是,如何才能将仅输出到指定文件的程序转换为使用stdout?另外,补充问题是:我如何欺骗输入文件中需要从stdin读取的程序? 这是不可能的,因为程序可能想要在输出中来回寻找? 顺便提一下,Perl Audio Converter总是使用中间wav文件来回避这个问题,这意味着它永远不会并行解码和编码,即使对于支持它的格式也是如此. PS:是的,有一个原因我不想只使用Perl Audio Converter,但这与问题无关. 解决方法
在Linux上,您可以将/ proc / self / fd / 1作为“文件”输出.
这应该适用于任何不试图在输出中寻求的程序. 一些程序确实在输出中寻找(例如,一旦解码完成就在文件的开头写入摘要信息),并且这种搜索将失败而不是真实文件. 如果程序检查fseek或lseek的返回值(应该如此),程序可能会返回错误.如果没有,它可能会成功退出,但会产生错误的输出(例如,开头有错误的摘要信息,最后有额外的“垃圾”). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |