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

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

  • Ошибка при замене даты в файле с помощью команды tr
  • Почему некоторые программы (например, readlink) не могут вводить данные из канала?
  • Печать stderr только в том случае, если в stdout ничего не записано, иначе распечатайте только stdout, отбрасывая stderr
  • Трубопровод Sox и FFMPEG вместе
  • Прочитайте до закрытия трубы
  • Не могли бы вы объяснить, почему эта команда (pgrep -d ',' -f cmdStr | top -c -p) не работает?
  • Автоматизация труб?
  • Читаемые комментарии по отдельным строкам в многострочной команде bash с конвейерами?
  • Что подразумевается под «поддержанием открытой трубы»?
  • Наличие дополнительных параметров в трубопроводе или перенаправлении
  • Следуйте за трубой, используя меньше?
  • Interesting Posts

    Как переключаться между сеансом tty и xorg

    Невозможно создать папки и файлы в любом месте, кроме моего / домашнего каталога

    Как настроить Linux для того, чтобы не требовать sudo для определенных команд для определенных пользователей?

    Постепенно заменяйте, как в Vim

    awk для цикла с ведущими нулями в переменной

    Как создать сиротский процесс без прерывания родительской оболочки?

    Как присоединиться к чату в Skype?

    установить псевдоним для каталога

    Сохраняет ли ключ ядра keych на диске?

    Проблема с openssl при установке apache 2.4.23

    Как рекурсивно распаковывать gz-файлы на удаленном хосте с ограниченными командами?

    Заменить значение в одинарных кавычках в строке, содержащей определенное слово, используя команду sed

    Сгруппированная агрегатная утилита (например, SQL GROUP BY)?

    не удается выполнить вход в rsyslog в системе archlinux

    Полноэкранные уведомления GNOME

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