FIFO에 쓰는 대신 프로그램을 실행하시겠습니까? [폐쇄]

FIFO에 쓰는 대신 프로그램을 실행하시겠습니까? [폐쇄]

매초마다 FIFO에 데이터를 쓰는 프로그램이 있습니다. 이제 이 데이터 중 일부를 변경하여 다른 FIFO에 쓰고 싶습니다.

가장 좋은 접근 방식은 무엇입니까? 어떻게든 이것을 내 프로그램으로 직접 전송할 수 있습니까(원본 프로그램/소스 코드를 제어할 수 없습니다)? 아니면 백그라운드에서 실행되고 지속적으로 FIFO를 폴링하여 새로운 입력을 받는 프로그램을 만들어야 합니까?

답변1

권장되는 방법은 다음과 같습니다.

프로그램 수정의 예 yours.c(아무 작업도 수행하지 않음):

#include <stdio.h>

int main (int argc, char argv[])
{
  char buf[1024];
  int n;

  do {
    n = fread(buf, sizeof(char), sizeof(buf), stdin);
    fwrite (buf, sizeof(char), n, stdout);
  } while (n > 0);
}

원래 프로그램 설정:

mknod first.pipe
original_program first.pipe

이제 두 번째 터미널(또는 백그라운드)에서 실행하세요.

yours < first.pipe | other_programs

또는 명명된 파이프를 사용하려는 경우

mknod second.pipe
yours < first.pipe > second.pipe
other_prgrams < second.pipe

반복하자면: 대부분의 경우 명명된 파이프(fifo)가 실제로 필요하지 않고 |셸에서 사용하기만 하면 됩니다. 또한 특정 파이프를 자신의 프로그램에 하드코딩할 필요가 없으며 리디렉션을 사용하기만 하면 됩니다.

관련 정보