독립 프로그램을 위한 다대일 통신

독립 프로그램을 위한 다대일 통신

저는 3가지 다른 프로그램을 가지고 있는데, 서로 소통할 수 있기를 바랍니다.

2개의 로봇과 로봇이 엔진과 통신해야 하는 엔진이 있습니다. 엔진은 C++로 작성되었으며 로봇은 모든 언어로 작성될 수 있습니다. 엔진은 출력을 표준 출력에 기록하고 두 로봇 모두 출력을 읽어야 합니다. 엔진의 출력에 따라 봇 중 하나가 표준 출력에 대한 응답을 작성합니다(이것은 턴 기반 게임입니다). 다음은 내가 의미하는 바를 설명하기 위한 대략적인 다이어그램입니다. 여기에 이미지 설명을 입력하세요.

내 현재 접근 방식은 다음과 같습니다.

mkfifo fifo0 fifo1 fifo2
./engine | tee fifo1 fifo2 < fifo0 &
./bot1 > fifo0 < fifo1 &
./bot2 > fifo0 < fifo2

나는 읽었다이것Circular I/O에 게시된 글에서 tail과 tee를 사용하는 것이 제안되었지만 내 요구 사항에 어떻게 맞추는지 잘 모르겠습니다. 파이프를 사용하여 이 작업을 수행할 수 있습니까? 이를 달성하기 위해 파이프를 사용하면 어떻게 될까요?

답변1

당신은 < fifo0그것을 잘못 놓았습니다. stdin engine이 아닌 stdin 이기를 원합니다 tee.

mkfifo fifo0 fifo1 fifo2
< fifo0 ./engine | tee fifo1 fifo2 &
./bot1 > fifo0 < fifo1 &
./bot2 > fifo0 < fifo2

많은 유틸리티는 출력이 tty 장치(이 경우 파이프(또는 쉘이 ksh93인 경우 소켓 쌍))에 도달하지 않을 때 출력 버퍼링을 시작합니다. GNU 시스템과 FreeBSD에서는 stdbuf다음 명령을 사용하여 이 버퍼링을 비활성화 할 수 있습니다 :

mkfifo fifo0 fifo1 fifo2
< fifo0 stdbuf -o0 ./engine | tee fifo1 fifo2 &
stdbuf -o0 ./bot1 > fifo0 < fifo1 &
stdbuf -o0 ./bot2 > fifo0 < fifo2

관련 정보