【问题标题】:How to create a sized FIFO buffer in Linux?如何在 Linux 中创建一个大小合适的 FIFO 缓冲区?
【发布时间】:2013-12-25 19:47:17
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: linux buffer pipe fifo


    【解决方案1】:

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

    如果你给 split 命令一个前缀 XXX(不同的流不同的前缀),你可以 cat XXX* 把这些部分放在一起。

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

    Fifos 在您的情况下无论如何都无法正常工作,因为它们的缓冲区大小有限;当没有阅读器时,作者会阻塞,并且您不能同时拥有多个阅读器。

    【讨论】:

    • 谢谢。这正是我正在构建的当前解决方案 :-) 只是认为可能有更优雅的解决方案......
    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2019-03-19
    相关资源
    最近更新 更多