writes over the default pipe capacity will still require waking up the downstream command
Se sua meta não for acordar o comando downstream com muita frequência, você tentou usar a opção -p
para buffer
? Isso deve fazer com que buffer
mantenha as gravações até que o buffer seja preenchido com uma determinada porcentagem. Você pode precisar da opção -s
para escrever grandes blocos.
Atualização: D'oh, os canos entre os comandos ainda limitam as coisas. Talvez tente usar o seguinte programa de adaptador:
#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);
}
como em:
adapter 1 (BIGSIZE) cmd1 | cmd2
ou até mesmo:
adapter 1 (BIGSIZE) cmd1 | adapter 1 (BIGSIZE) buffer [args] | cmd2
se cmd1
ainda faz pequenas gravações.