linux – 如何管道只能写入文件(而不是STDOUT)的程序输出?

linux – 如何管道只能写入文件(而不是STDOUT)的程序输出?,第1张

概述我正在尝试编写像 Perl Audio Converter这样的东西,所以我需要能够将每个相关的音频格式解码为wav(PCM),然后将wav编码为每种相关的音频格式.我想通过将解码器的输出直接连接到编码器的输入来并行执行此 *** 作.大多数解码器都有一个解码到stdout的选项,但并非所有解码器都能解码.有些人坚持要输出到文件. 所以我的问题是,如何才能将仅输出到指定文件的程序转换为使用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的返回值(应该如此),程序可能会返回错误.如果没有,它可能会成功退出,但会产生错误的输出(例如,开头有错误的摘要信息,最后有额外的“垃圾”).

总结

以上是内存溢出为你收集整理的linux – 如何管道只能写入文件(而不是STDOUT)的程序输出?全部内容,希望文章能够帮你解决linux – 如何管道只能写入文件(而不是STDOUT)的程序输出?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1027425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存