Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Is there a filter which I could use to rate-limit a pipe on linux? If this exists, let call it rate-limit, I want to be able to type in a terminal something like

cat /dev/urandom | rate-limit 3 -k | foo

in order to send a a stream of random bytes to foo's standard input at a rate (lower than) 3 kbytes/s.

share

migrated from stackoverflow.com Jan 31 '11 at 10:51

This question came from our site for professional and enthusiast programmers.

1  
I asked here because I want to use it in a programme, not for troubleshooting. But it's my very first question here so I apologize if I made an error. –  Frédéric Grosshans Mar 17 '10 at 17:54
    
BTW, the above is an unnecessary use of cat, you could do rate-limit 3k < /dev/urandom | foo. –  dmckee Mar 17 '10 at 18:15

2 Answers 2

up vote 30 down vote accepted

Pipe Viewer has this feature.

cat /dev/urandom | pv -L 3k | foo
share
    
Thanks for your answer ! –  Frédéric Grosshans Mar 17 '10 at 17:59

I'd say that Juliano has got the right answer if you have that tool, but I'd also suggest that this is a neat little K&R style exercise: just write a specialized version of cat that reads one character at a time from stdin, outputs each to stdout and then usleeps before moving on. Be sure to unbuffer the standard output, or this will run rather jerkily.

I called this 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 it and try with

$ ./slowcat 10 < slowcat.c
share
7  
Now I'm feeling the horrible temptation to add a "clack" noise to each character an set the default speed to 40 CPS, with an extra delay for newlines. –  dmckee Mar 17 '10 at 19:19

This site is currently not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .