Saída de piping entre dois programas simultâneos e independentes

1

Digamos que eu tenha dois programas que jogam xadrez: chess_1 e chess_2 . Eles rastreiam o tabuleiro e tomam como entrada movimentos opostos, e então produzem seus movimentos. Por exemplo, se eu quisesse jogar contra chess_1 , faria o seguinte:

Eu começaria o programa (assumindo que sou branco)

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

E o bot iria acompanhar o tabuleiro do jogo. Minha pergunta é: como posso fazer chess_1 jogar contra chess_2 ?

    
por Liam 19.04.2016 / 03:31

1 resposta

1

Você não especificou o shell, portanto, em geral, os pipes nomeados seriam o caminho mais fácil. No entanto, se o seu shell os suportar, isso pode ser um bom caso de uso para coprocessos.

Como você usa o comando coproc no Bash

In a | cmd | b, a feeds data to cmd and b reads its output. Running cmd as a co-process allows the shell to be both a and b.

No bash:

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

O post vinculado também fala sobre as desvantagens dos coprocessos e tem exemplos de uso de pipes nomeados (via mkfifo ).

    
por 19.04.2016 / 04:21

Tags