GNU/Linux >> Belajar Linux >  >> Linux

Atur kapasitas pipa di Linux

menulis di atas kapasitas pipa default masih memerlukan pengaktifan perintah downstream

Jika tujuan Anda adalah untuk tidak membangunkan perintah downstream terlalu sering, apakah Anda mencoba menggunakan -p opsi untuk buffer ? Seharusnya menyebabkan buffer untuk menahan tulis sampai buffer terisi hingga persentase tertentu. Anda mungkin membutuhkan -s opsi juga untuk menulis potongan besar.

Pembaruan:D'oh, pipa di antara perintah masih membatasi banyak hal. Mungkin coba gunakan program adaptor berikut:

#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);
}

seperti pada:

adapter 1 (BIGSIZE) cmd1 | cmd2

atau bahkan:

adapter 1 (BIGSIZE) cmd1 | adapter 1 (BIGSIZE) buffer [args] | cmd2

jika cmd1 masih membuat tulisan kecil.


Berdasarkan saran DepressedDaniel dan Stéphane Chazelas, saya menetapkan hal yang paling dekat dengan oneliner yang dapat saya temukan:

function hugepipe {
  perl -MFcntl -e 'fcntl(STDOUT, 1031, 1048576) or die $!; exec { $ARGV[0] } @ARGV or die $!' "[email protected]"
}

Hal ini memungkinkan untuk melakukan:

hugepipe <command> | <command>

dan pipa antara dua perintah akan memiliki kapasitas yang ditentukan melalui fcntl dalam skrip perl.


Linux
  1. Perintah Chattr di Linux (Setel Bit yang Tidak Dapat Diubah)

  2. Perintah Linux dmesg - Cetak Kernel Ring Buffer

  3. Bagaimana cara mem-pipe ke perintah split Linux?

  1. Perintah mv Linux

  2. Linux du perintah

  3. Perintah ip Linux

  1. Pengantar pipa dan pipa bernama di Linux

  2. Perintah cd Linux

  3. Linux:tetapkan tanggal melalui baris perintah