Existe-t-il un filtre que je pourrais utiliser pour limiter le taux d’un tuyau sous Linux? Si cela existe, appelez-le limite de taux, je veux être capable de taper dans un terminal quelque chose comme
cat /dev/urandom | rate-limit 3 -k | foo
afin d'envoyer un flux d'octets aléatoires à l'entrée standard de foo à un débit (inférieur à) 3 Ko/s.
Pipe Viewer possède cette fonctionnalité.
cat /dev/urandom | pv -L 3k | foo
Je dirais que Juliano a la bonne réponse si vous avez cet outil, mais je suggérerais également qu'il s'agit d'un petit exercice de style K & R soigné. : écrivez simplement une version spécialisée de cat qui lit un caractère à la fois, à partir de stdin
, les édite chacun en stdout
, puis usleep
s avant de poursuivre. Assurez-vous de supprimer la mémoire tampon de la sortie standard , sinon cela fonctionnera plutôt rapidement.
J'ai appelé ce 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;
}
Compilez-le et essayez avec
$ ./slowcat 10 < slowcat.c
étranglement semble conçu spécifiquement pour cela. par exemple.
cat /dev/urandom | throttle -k 3 | foo
Voici une solution 100% Shell qui ne perdra pas sa contribution (cf. l’idée principale -1 de 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
Rapide et sale, tout Shell tout le temps (j'ai CentOS et pv ne vient pas avec elle par défaut):
hexdump -c /dev/urandom | while true; do head -1; sleep 1; done | \
your_program_that_reads_stdin -your_argument_list
... sale parce que même si son taux est limité, il est rapide à un taux que je ne peux pas vous dire :-). Mais c’est pratique lorsque vous avez juste besoin d’envoyer des données d’un endroit à un autre (j’ai fait quelques tests socat) et que vous ne voulez pas submerger votre écran de déchets.