パイプに無制限のデータをバッファリングするユーティリティ?

パイプに無制限のデータをバッファリングするユーティリティ?

読み書き速度を分離するためにパイプラインに接続できるユーティリティはありますか?

$ producer | buf | consumer

buf基本的に、私はできるだけ早く入力を読み取ってメモリに保存し、できるだけ早く実行しながらconsumer楽しい時間を過ごすことができるユーティリティを望んでいます。producer

答え1

これpv(パイプラインビューア)ユーティリティは、進捗-Bレポートの提供など、この操作(オプションを使用)などを実行できます。

答え2

あなたはそれを使用することができますdd

producer | dd obs=64K | consumer

すべてのUNIXで使用できます。

答え3

見てバッファー。メモリまたはメモリにマップされたファイル(-t/ -T)にバッファリングできます。

答え4

非標準移動:ソケットバッファを使用します。

例:

# echo 2000000000 > /proc/sys/net/core/wmem_max
$ socat -u system:'pv -c -N i /dev/zero',sndbuf=1000000000 - | pv -L 100k -c -N o > /dev/null
        i:  468MB 0:00:16 [ 129kB/s] [  <=>                        ]
        o: 1.56MB 0:00:16 [ 101kB/s] [       <=>                   ]

この目的のために、2つの追加のツールが実装された。緩衝管そしてopentounixsocketマッピング

$ ./buffered_pipeline ! pv -i 10 -c -N 1 /dev/zero ! $((20*1000*1000)) ! pv -i 10 -L 100k -c -N 2 ! > /dev/zero
        1: 13.4MB 0:00:40 [ 103kB/s] [         <=>      ]
        2: 3.91MB 0:00:40 [ 100kB/s] [         <=>      ]

関連情報