GNU/Linux >> Linux の 問題 >  >> Linux

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 で指定された容量が割り当てられます。


Linux
  1. LinuxのChattrコマンド(不変ビットの設定)

  2. Linuxmvコマンド

  3. Linuxduコマンド

  1. Linuxipコマンド

  2. Linuxcdコマンド

  3. Linux 分割コマ​​ンドにパイプするにはどうすればよいですか?

  1. Linuxでのパイプと名前付きパイプの概要

  2. Linuxdmesgコマンド-カーネルリングバッファの印刷

  3. Linux:コマンドラインから日付を設定