Visualizador de canais tem esse recurso.
cat /dev/urandom | pv -L 3k | foo
Existe algum filtro que eu possa usar para limitar um pipe no linux? Se isso existir, vamos chamá-lo de limite de taxa, eu quero ser capaz de digitar um terminal como
cat /dev/urandom | rate-limit 3 -k | foo
para enviar um fluxo de bytes aleatórios para a entrada padrão do foo a uma taxa (menor que) 3 kbytes / s.
Visualizador de canais tem esse recurso.
cat /dev/urandom | pv -L 3k | foo
Eu diria que Juliano tem o resposta certa se você tiver essa ferramenta, mas eu também sugiro que este é um pequeno exercício estilo K & R: basta escrever uma versão especializada de gato que leia um caractere de cada vez em stdin
, saídas cada um para stdout
e, em seguida, usleep
s antes de prosseguir. Certifique-se de descomprimir a saída padrão , ou isso será executado .
Eu chamei isso de slowcat.c
:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char**argv){
int c;
useconds_t stime=10000; // defaults to 100 Hz
if (argc>1) { // Argument is interperted as Hz
stime=1000000/atoi(argv[1]);
}
setvbuf(stdout,NULL,_IONBF,0);
while ((c=fgetc(stdin)) != EOF){
fputc(c,stdout);
usleep(stime);
}
return 0;
}
Compile e tente com
$ ./slowcat 10 < slowcat.c
Aqui está uma solução all-shell que não perderá a entrada (cf. a idéia da cabeça -1 do Mike S):
hexdump -c /dev/urandom | (lines=0; while read line; do echo $line; if [ $((++lines % 10)) -eq 0 ]; then sleep 1; fi; done) | cat -n
o acelerador parece projetado especificamente para isso. por exemplo,
cat /dev/urandom | throttle -k 3 | foo
Rápido e sujo, todo shell o tempo todo (eu tenho CentOS e pv não vem com ele por padrão):
hexdump -c /dev/urandom | while true; do head -1; sleep 1; done | \
your_program_that_reads_stdin -your_argument_list
... sujo porque, embora seja limitado em termos de taxa, está em uma velocidade que não posso lhe dizer :-). Mas é útil quando você só precisa enviar dados de um lugar para outro (eu estava fazendo alguns testes socat) e você não quer inundar sua tela com lixo.