我正在尝试编写Perl Audio Converter之类的东西,所以我需要能够将每个相关的audio格式解码为wav(PCM),然后将wav编码为每种相关的audio格式。 我想通过将解码器的输出直接连接到编码器的input来并行执行此操作。 大多数解码器都有解码stdout的选项,但并不是所有解码器都可以解码。 有的坚持要输出到文件。
所以我的问题是,我怎么欺骗只会输出到指定文件的程序,而不是使用stdout? 另外,补充问题:我怎样才能把input文件中需要的程序从stdin中读取出来呢?
这是不可能的,因为程序可能要在输出中来回寻找?
顺便提一下,Perl Audio Converter通过使用中间的wav文件避开了这个问题,这意味着它不会并行地进行解码和编码,即使对于支持它的格式也是如此。
在Linux上安装Oracle Instantclient而不设置环境variables?
用dlopen()加载共享库时出错
在AF_UNIX SOCK_DGRAM中使用'抽象套接字'
PS:是的,有一个原因,我不想只使用Perlaudio转换器,但它不是相关的问题。
你可以使用LD_PRELOAD来改变结构吗?
syscalls添加到Linux的历史?
Android cpu使用情况下的“Clock Tick”究竟是什么?
在Linux上,可以将/proc/self/fd/1作为“文件”输出。
这应该适用于任何不想在输出中寻找的程序。
有些程序会在输出中查找(例如,一旦解码完成,就在文件的开头写入摘要信息),而这个查找将会以除真实文件之外的其他任何东西而失败。
如果程序检查fseek或lseek的返回值(应该是这样),程序可能会返回一个错误。 如果没有,它可能会成功退出,但会产生错误的输出(例如,在开始时有不正确的汇总信息,最后是额外的“垃圾”)。
一些操作系统,比如Unix变种和win32系列,支持命名管道 。 你可能可以使用它们而不是stdout / stdin。
制作一个命名管道。
mkfifo /tmp/mypipe
而不是做例如
echo foo | wc -c
echo foo > /tmp/myfifo & wc -c /tmp/myfifo
(以先启动为准,将阻塞,直到管道的另一端打开)但是你是对的,如果程序确实需要一个实际的文件,例如寻找,这是行不通的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。