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



>具体来说,我正在尝试从设备捕获音频或视频流,并在按下按钮时仅保留 X 分钟(或 Y MBytes)。在 Linux 中有什么本机方法可以做到这一点吗?

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

谢谢

我看到的最接近的事情是将您的流管道输送到 split 命令中,使用 -b 和 -v 选项。 -b 告诉 split 按字节数而不是行数拆分行,而 -v 会在 split 启动新文件时告诉您。将 split 的输出通过管道传输到一些小脚本中,当 split 开始新文件时,该脚本开始删除文件,因此您永远不会同时拥有多个文件。

如果为 split 命令提供前缀 XXX(不同流的不同前缀),则可以cat XXX*将各个部分放在一起。

当然,输出的开头将按单个文件大小"跳跃",而不是按字节。但我认为这是您在没有特定程序的情况下可以获得的最接近的。

无论如何,FIFOS在您的情况下都不能很好地工作,因为它们的缓冲区大小有限;当没有读取器时,编写器将阻塞,并且您不能同时拥有多个读取器。

最新更新