如何在Linux中创建一个大小的FIFO缓冲区?

时间:2013-12-25 19:47:18

标签: linux buffer pipe fifo

具体来说,我正在尝试从设备捕获音频或视频流,并在按下按钮时仅保留X分钟(或Y MBytes)。 在Linux中以任何本地方式执行此操作?

我知道fifo,但这只保留了所有数据。我想将我的流传输到一个特定的缓冲区,该缓冲区只保留最后的Y MBytes并丢弃其余的。

由于

1 个答案:

答案 0 :(得分:2)

我最接近的事情就是使用-b和-v选项将流输入split命令。 -b告诉split按行数除以行数,而不是行数,-v告诉你何时拆分开始一个新文件。将split的输出管道化为一个小脚本,当分割开始新文件时开始删除文件,因此你永远不会同时拥有多个文件。

如果您为split命令指定前缀XXX(不同流的不同前缀),则可以cat XXX*将这些部分放在一起。

当然,输出的开始将按单个文件大小“跳”,而不是按字节。但我认为这是没有特定计划的最接近的。

因为它们的缓冲区大小有限,所以Fifos在你的情况下效果不佳;当没有读者时,作者会阻止,而你不能同时拥有多个读者。