Выход трубопровода между двумя одновременными независимыми программами

Скажем, у меня есть две программы, которые играют в шахматы: 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_2 против chess_2 ?

One Solution collect form web for “Выход трубопровода между двумя одновременными независимыми программами”

Вы не указали оболочку, поэтому, в общем, именованные каналы были бы проще всего. Однако, если ваша оболочка поддерживает их, это может быть хорошим вариантом использования для сопроцессов.

Как вы используете команду coproc в Bash?

В a | cmd | b a | cmd | b a | cmd | b , передает данные в cmd и b считывает свой вывод. Выполнение cmd в качестве совместного процесса позволяет оболочке быть как a и b .

В bash:

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

Связанная почта также говорит о недостатках сопроцессов и содержит примеры использования именованных каналов (через mkfifo ).

  • Запретить stdin ждать первого сообщения из именованного канала
  • Что происходит, когда перенаправление и перенаправление ввода выполняется по команде
  • Гонки при соединении двух команд с именованным каналом
  • cat SQL-файлы и перейти к схеме импорта
  • Cygwin - хвост останавливает чтение входной трубы после первой записи
  • Как вызвать редактор vim и вывод канала в bash
  • Почему именованный канал не удаляется после перезапуска системы?
  • Как загрузить пакет RPM и установить его в одной строке?
  • tar: параметр требует аргумента - 'f'
  • Утилита для буферизации неограниченного объема данных в конвейере?
  • Как подключить вывод ffmpeg?
  • Interesting Posts

    Как выводятся статистические данные с помощью `free -l`?

    Как автоматически выполнить «netctl start tq84-wifi» при загрузке?

    Смонтируйте и скопируйте / var в хранилище экземпляров EC2 во время первой загрузки

    Self cache-проксирование всех исходящих запросов http / https

    можем ли мы просмотреть содержимое файлов журнала поверх, отправленных с удаленного компьютера на локальный

    Отключить защиту стека в Ubuntu для переполнения буфера без флагов C-компилятора

    Множественное назначение переменных из разных частей одного командного конвейера

    Что такое «контроль доступа» с X Server?

    Как работает перенаправление этой команды?

    grep: Как найти консоль для закрытия?

    Сообщение об установке Cygwin

    Запуск gnome-keyring-daemon в CentOS?

    Команда pdftotext не работает с несколькими файлами

    lvs показывает ошибку ввода / вывода

    Копирование файлов из одной вспомогательной директории в другую

    Linux и Unix - лучшая ОС в мире.