Существует ли фильтр, который я мог использовать для ограничения скорости канал на Linux? Если это существует, позвольте, называют это ограничением скорости, я хочу смочь ввести в терминале что-то как
cat /dev/urandom | rate-limit 3 -k | foo
для отправки потока случайных байтов к стандартному входу нечто на уровне (ниже, чем) 3 кбайта/с.
Средство просмотра канала имеет эту функцию.
cat /dev/urandom | pv -L 3k | foo
Я сказал бы, что у Juliano есть правильный ответ, если бы у Вас есть тот инструмент, но я также предположил бы, что это - аккуратное небольшое осуществление стиля K&R: просто запишите специализированную версию кошки, которая читает один символ за один раз из stdin
, выводы каждый к stdout
и затем usleep
s перед хождением дальше. Обязательно освободите буфер стандартный вывод, или это будет работать скорее рывками.
Я назвал это 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;
}
Скомпилируйте его и попробуйте
$ ./slowcat 10 < slowcat.c