리눅스에서 파이프를 속도 제한하는 방법?


63

리눅스에서 파이프를 속도 제한하는 데 사용할 수있는 필터가 있습니까? 이것이 존재한다면, 그것을 rate-limit라고 부르십시오.

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

임의의 바이트 스트림을 3 kbytes / s보다 낮은 속도로 foo의 표준 입력으로 전송합니다.


1
문제 해결이 아닌 프로그램에서 사용하고 싶기 때문에 여기에 물었습니다. 그러나 그것은 나의 첫 번째 질문이므로 오류가 있으면 사과드립니다.

1
BTW, 위의 고양이를 불필요하게 사용하면 할 수 rate-limit 3k < /dev/urandom | foo있습니다.
dmckee

답변:


91

파이프 뷰어 에는이 기능이 있습니다.

cat /dev/urandom | pv -L 3k | foo

1
작업 출력을 보면서 사용하는 것도 편리합니다 -q. 예 :command 2>&1 | pv -q -L 3k
Attie

17

나는 말할 것 줄리아노는 정답을 가지고 당신이 그 도구가 있다면,하지만 난이 깔끔한 작은 K & R 스타일의 운동 것을 건의 할 것입니다 : 단지에서 한 번에 하나 개의 문자를 읽어 고양이의 전문 버전 쓰기 stdin출력을, 각 stdout다음과가 usleep이동하기 전에이야. 반드시 표준 출력을 버퍼 해제하기 위해 , 또는이 오히려 jerkily 실행됩니다.

나는 이것을 불렀다 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

18
이제 각 문자에 "충돌"잡음을 추가하고 기본 속도를 40 CPS로 설정하고 줄 바꿈을 추가 지연시키는 끔찍한 유혹을 느끼고 있습니다.
dmckee

리눅스 박스에 스피커가 부착되어 있다면 복고풍 터미널 스크린 세이버 중 하나를 사용하여 낄낄 거립니다.
Benny Mackney

4

스로틀 은이를 위해 특별히 설계된 것 같습니다 . 예 :

cat /dev/urandom | throttle -k 3 | foo

1
나는 이것에 동의하지만 우분투의 표준 패키지는없는 것 같습니다. 또한 소스 코드도 보지 못했습니다. 이 유틸리티를 어디서 구할 수 있는지 아십니까?
Benjamin Leinweber

1
@BenjaminLeinweber 일반적으로 코드를 호스팅 하는 웹 사이트 는 오프라인 상태이지만 freebsd에는 ftp 서버 에서 1.2에 대한 소스가 있습니다 . 거기에서 다운로드해야합니다 ./configure && make.
Ponkadoodle

3

다음은 입력을 잃지 않는 올쉘 솔루션입니다 (참조 : Mike S의 헤드 -1 아이디어).

hexdump -c /dev/urandom | (lines=0; while read line; do echo $line; if [ $((++lines % 10)) -eq 0 ]; then sleep 1; fi; done) | cat -n

2

빠르고 셸, 항상 셸 (CentOS가 있고 pv에는 기본적으로 제공되지 않음) :

hexdump -c /dev/urandom | while true; do head -1; sleep 1; done | \
your_program_that_reads_stdin  -your_argument_list

... 속도가 제한되어 있지만 내가 말할 수없는 속도로 파열하기 때문에 더럽습니다. :-). 그러나 한 곳에서 다른 곳으로 데이터를 보내야 할 때 편리합니다 (소 카트 테스트를하고있었습니다). 화면을 쓰레기로 늪으로 옮기고 싶지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.