Ваша программа в конечном итоге прочитает больше данных, чем необходимо для разрешения первого вызова read_user_input
, если он доступен, что приведет к __fpurge
отбрасыванию остальных. Чтобы избежать этого, попробуйте sleep
:
(echo 3; sleep 1; echo HelloWorld) | program
. Это приведет к тому, что вторая строка не будет отправлена на program
до тех пор, пока не выполнится __fpurge
, поэтому она будет доступна для второго вызова. на read_user_input
.
Конечно, это несколько agile и хакерское, так что если бы это была ваша собственная программа, а не CTF, исходный код которой вы не можете редактировать, вам следовало бы ее переработать не делать __fpurge
.