設定:
ソースコードがないため、「編集できない」実行可能ファイルがあります。プログラムを実行すると、計算する数値を提供するゲームが表示され、stdout
計算が終わったら答えを提供でき、stdin
計算が正しいかどうかを知らせます。その後、新しい計算を受け、すべてが繰り返されます。
質問:
このゲームは手動でプレイできますが、プログラムで自動化したいと思います。システムで使用できるツールはBash
と ですC-compiler
。このプログラムと対話する最も簡単な方法は何ですか?
これまで私がしたこと:
私はパイプを見て、C
プロセスを分岐し、パイプを使って2つのプロセス間で通信する小さなプログラムを実行しました。 (このようなプログラム)。しかし、子プロセスで外部バイナリを呼び出すと、動作させることはできません。
答え1
パイプとFIFOを使用してこれを行うことができます。
たとえば、これは私のテストスクリプトですblackbox.sh
。
#!/bin/bash
# Here i output the value to be added.
echo "10 30"
# Here i read the result and depending on it, write good or not good in a file
read result
if [ "${result}" -eq 40 ]; then
echo good > result.txt
else
echo not good > result.txt
fi
手動で実行:
$ ./blackbox.sh
10 30 <~~~~ Script output
40 <~~~~~~~ My input
$ cat result.txt
good
$
mkfifo coin
次に、次の行を使用してFIFOを作成して再実行します。
$ rm result.txt && cat coin |./blackbox.sh | ( read a b ; echo $((a+b)) > coin )
$ cat result.txt
good
気づく:
- FIFO が読み取り用に開かない限り、FIFO へのすべての書き込みはブロックされます。
- 明らかに'sの出力を
blackbox.sh
何かにパイプすると、それは見えなくなります。 - blackbox.shの出力を簡単に解析できる簡単な例を選択しました。必要に応じて調整できます。
$(( ))
Bashで算術演算を許可します。