微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能输出只能写入文件而不是STDOUT的程序的输出?

我正在尝试编写Perl Audio Converter之类的东西,所以我需要能够将每个相关的audio格式解码为wav(PCM),然后将wav编码为每种相关的audio格式。 我想通过将解码器的输出直接连接到编码器的input来并行执行此操作。 大多数解码器都有解码stdout的选项,但并不是所有解码器都可以解码。 有的坚持要输出文件

所以我的问题是,我怎么欺骗只会输出到指定文件的程序,而不是使用stdout? 另外,补充问题:我怎样才能把input文件中需要的程序从stdin中读取出来呢?

这是不可能的,因为程序可能要在输出中来回寻找?

顺便提一下,Perl Audio Converter通过使用中间的wav文件避开了这个问题,这意味着它不会并行地进行解码和编码,即使对于支持它的格式也是如此。

在Linux上安装Oracle Instantclient而不设置环境variables?

Bash脚本创build自定义缩略图

用dlopen()加载共享库时出错

从csv文件删除标题和空白行

在AF_UNIX SOCK_DGRAM中使用'抽象套接字'

PS:是的,有一个原因,我不想只使用Perlaudio转换器,但它不是相关的问题。

创build一个文件作为tty与dup

你可以使用LD_PRELOAD来改变结构吗?

syscalls添加到Linux的历史?

Android cpu使用情况下的“Clock Tick”究竟是什么?

长时间运行的PHP进程陷入循环 – 包括strace输出

在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] 举报,一经查实,本站将立刻删除。

相关推荐