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.