<ブロック引用>
Linux
デフォルトのパイプ容量を超える書き込みには、引き続きダウンストリーム コマンドを起動する必要があります
ダウンストリーム コマンドをあまり頻繁に起動しないことが目標である場合は、-p
を使用してみましたか? buffer
へのオプション ? buffer
が発生するはずです バッファが特定の割合に達するまで書き込みを保持します。 -s
が必要な場合があります 大きなチャンクを書き込むオプションもあります。
更新:おっと、コマンド間のパイプはまだ物事を制限しています。次のアダプタ プログラムを試してみてください:
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char** argv)
{
fcntl(atoi(argv[1]), F_SETPIPE_SZ, atoi(argv[2]));
execvp(argv[3],argv+3);
while (1);
}
のように:
adapter 1 (BIGSIZE) cmd1 | cmd2
または:
adapter 1 (BIGSIZE) cmd1 | adapter 1 (BIGSIZE) buffer [args] | cmd2
cmd1
の場合
DepressedDaniel と Stéphane Chazelas の提案に基づいて、見つけたワンライナーに最も近いものに落ち着きました。
function hugepipe {
perl -MFcntl -e 'fcntl(STDOUT, 1031, 1048576) or die $!; exec { $ARGV[0] } @ARGV or die $!' "[email protected]"
}
これにより、次のことが可能になります:
hugepipe <command> | <command>
2 つのコマンド間のパイプには、fcntl
で指定された容量が割り当てられます。