설정:
소스 코드가 없기 때문에 "편집할 수 없는" 실행 파일이 있습니다. 프로그램을 실행하면 계산할 숫자를 제공하는 게임이 표시되고 stdout
, 계산이 끝나면 대답을 제공할 수 stdin
있으며 계산이 올바른지 알려줍니다. 그런 다음 새로운 계산을 받고 모든 것이 반복됩니다.
질문:
이 게임을 수동으로 플레이할 수 있지만 프로그래밍 방식으로 자동화하고 싶습니다. 시스템에서 사용할 수 있는 도구는 Bash
및 입니다 C-compiler
. 이 프로그램과 상호작용하는 가장 쉬운 방법은 무엇입니까?
지금까지 내가 한 일:
저는 파이프를 살펴보고 C
프로세스를 분기하고 파이프를 사용하여 두 프로세스 간에 통신하는 작은 프로그램을 실행했습니다. (이 같은프로그램). 하지만 하위 프로세스에서 외부 바이너리를 호출하면 작동하게 할 수 없습니다.
답변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에서 산술 연산을 허용합니다.