원형 bash 파이프 (./progA | ./progB | ./progA) [중복]

원형 bash 파이프 (./progA | ./progB | ./progA) [중복]

두 개의 바이너리가 있는데 그 중 하나( questions.bin)는 "1+3이 무엇인가요?"와 같은 질문을 던집니다. STDOUT으로 전송하고 STDIN에서 답변을 얻습니다. 다른 하나는 answers.bin위 형식의 STDIN 질문을 수락하고 이를 STDOUT에 인쇄합니다.

나는 그들의 출력을 서로에게 파이프할 수 있기를 원합니다.

./questions.bin | ./answers.bin | ./questions.bin

파이프로 할 수 있는 방법이 있나요? 그렇지 않다면 달리 무엇을 하시겠습니까?

답변1

이는 단순한 사용 사례임이 밝혀졌습니다.명명된 파이프. 다음은 내가 얻은 것의 수정된 예입니다.이 답변:

mkfifo backpipe
./questions.bin 0<backpipe | ./answers.bin 1>backpipe

답변2

/dev/fd/xLinux에서는 명명된 파이프처럼 동작하는 파이프를 참조하는 fd x 속성을 사용할 수 있습니다 .

: | (./questions.bin | ./answers.bin) > /dev/fd/0

쉘에는 시스템 호출을 통한 yash기본 인터페이스가 있습니다.pipe()파이프 리디렉션특징:

(./questions.bin | ./answers.bin) >>|0

이는 명명된 파이프를 생성할 필요(및 독점 생성 보장, 이에 대한 액세스 제한, 이후 또는 신호 정리와 관련된 문제)를 방지합니다.

관련 정보