Как к ограничению скорости канал в соответствии с Linux?

Существует ли фильтр, который я мог использовать для ограничения скорости канал на Linux? Если это существует, позвольте, называют это ограничением скорости, я хочу смочь ввести в терминале что-то как

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

для отправки потока случайных байтов к стандартному входу нечто на уровне (ниже, чем) 3 кбайта/с.

63
задан 11.09.2014, 00:42

2 ответа

Средство просмотра канала имеет эту функцию.

cat /dev/urandom | pv -L 3k | foo
91
ответ дан 07.12.2019, 08:16

Я сказал бы, что у Juliano есть правильный ответ, если бы у Вас есть тот инструмент, но я также предположил бы, что это - аккуратное небольшое осуществление стиля K&R: просто запишите специализированную версию кошки, которая читает один символ за один раз из stdin, выводы каждый к stdout и затем usleeps перед хождением дальше. Обязательно освободите буфер стандартный вывод, или это будет работать скорее рывками.

Я назвал это 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
17
ответ дан 07.12.2019, 08:16

Теги

Похожие вопросы