aplay 管道使用文件而不是标准输入和标准输出来记录

Posted

技术标签:

【中文标题】aplay 管道使用文件而不是标准输入和标准输出来记录【英文标题】:aplay piping to arecord using a file instead of stdin and stdout 【发布时间】:2018-11-17 17:33:40 【问题描述】:

以下命令将记录默认设备的数据并输出到标准输出,aplay 将播放标准输入的数据。

arecord -D hw:0  | aplay -D hw:1 -

为什么我们更喜欢标准输入和标准输出,而不是像下面这样写入文件并从中读取?

arecord -D hw:0 test.wav | aplay -D hw:1 test.wav

【问题讨论】:

【参考方案1】:

使用管道进行此操作比使用文件更高效有效,原因如下:

1) 管道 (|) 是一种进程间通信技术。一个进程的输出使用基于内核的缓冲区直接发送到另一个进程的输入。因此,这比将某些内容写入硬盘中的文件并从中读取它提供了更快的速度。然而,这也取决于其他因素。通常,内核也会从缓冲区和磁盘缓存中写入和读取小文件。

2) 使用进程间通信技术也有助于获得并发操作。相反,如果您必须将某些内容写入文件然后从中读取,则必须分步执行,因此您将失去并发性。

我猜你是说

arecord -D hw:0 test.wav && aplay -D hw:1 test.wav

而不是

arecord -D hw:0 test.wav | aplay -D hw:1 test.wav

【讨论】:

以上是关于aplay 管道使用文件而不是标准输入和标准输出来记录的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能管道标准错误,而不是标准输出?

文件输入输出的管理以及管道的使用

Linux 重定向与管道符

标准输入输出和管道

标准输入输出和管道

Linux shell编程:管道和重定向