![FIFO에 쓰는 대신 프로그램을 실행하시겠습니까? [폐쇄]](https://linux55.com/image/153764/FIFO%EC%97%90%20%EC%93%B0%EB%8A%94%20%EB%8C%80%EC%8B%A0%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
매초마다 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)가 실제로 필요하지 않고 |
셸에서 사용하기만 하면 됩니다. 또한 특정 파이프를 자신의 프로그램에 하드코딩할 필요가 없으며 리디렉션을 사용하기만 하면 됩니다.