두 개의 동시 독립 프로그램 간의 파이프 출력

두 개의 동시 독립 프로그램 간의 파이프 출력

체스를 두는 프로그램이 두 개 있다고 가정해 chess_1보겠습니다 chess_2. 그들은 보드 자체를 추적하고 반대 움직임을 입력으로 받아들인 다음 자신의 움직임을 출력합니다. 예를 들어 와 일치시키려면 chess_1다음을 수행합니다.

프로그램을 시작하겠습니다(내가 백인이라고 가정)

$ ./chess_1                  # program starts and hangs for input
  <my move>                  # my input
  <the bot's move>           # bot output
  <my next move>             # my input
.... < etc. > .....

로봇은 게임 보드를 추적합니다. 제 질문은 이 문제와 어떻게 chess_1싸울 수 있느냐는 것입니다 chess_2.

답변1

쉘을 지정하지 않았으므로 일반적으로 명명된 파이프가 가장 쉬운 방법입니다. 그러나 쉘이 이를 지원한다면 이는 코프로세스의 좋은 사용 사례가 될 수 있습니다.

Bash에서 coproc 명령을 사용하는 방법은 무엇입니까?

에서는 데이터를 공급 a | cmd | b하고 출력을 읽습니다 . 코프로세스로 실행하면 쉘 이 .acmdbcmdab

배쉬에서:

coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"

링크된 게시물에서는 보조 프로세스의 단점에 대해서도 설명하고 명명된 파이프(를 통해)를 사용하는 예를 제공합니다 mkfifo.

관련 정보