小编Car*_*ong的帖子

使用 dd 作为管道缓冲区的正确方法(如果有)?

问题

当我在 *NIX 中寻找管道缓冲工具时,我看到了使用buffermbuffer或的建议pv。然而,前两者并不总是在发行版的官方存储库中(例如 Arch),而pv(从 1.6.0 开始)有一个错误阻止了此功能。在其他几个问题中,我看到提到dd用作缓冲区,我想探索它,因为dd它总是存在。然而,没有一个足够详细以具有真正的意义,所以在这里我要求一种“正确”的使用方式。

提到的问题dd包括https://unix.stackexchange.com/questions/345072/can-dd-be-used-to-add-a-buffer-to-a-pipehttps://unix.stackexchange.com/questions /21918/管道中无限制数据量缓冲区的实用程序

为了便于测试,我在下面提供了一个测试脚本,以及一些关于我自己的实验的评论。详细信息将在代码清单后解释。运行前请确保您已pv安装且内存至少256M!

#!/bin/sh

producer() {
    while [ 1 ]; do
    dd if=/dev/zero bs=64M count=1 iflag=fullblock status=none
    sleep 4
    done
}

buffer() {
    # Works, but long
    # Must at least fill 32M before consumer starts
    # So, must choose small obs and chain more to look
    # more like a proper "buffer"
    dd …
Run Code Online (Sandbox Code Playgroud)

linux bash command-line dd pipe

5
推荐指数
1
解决办法
4611
查看次数

标签 统计

bash ×1

command-line ×1

dd ×1

linux ×1

pipe ×1