linux блок FIFO при чтении

Я выполняю упражнение net0 на https://exploit-exercises.com/protostar/. Содержание упражнения состоит в том, чтобы отправить запрошенное число как 32-битное целое число с прямым порядком байтов на сервер. Я придумал следующие командные строки.

mkfifo /tmp/pipe  
cat /tmp/pipe | netcat 127.0.0.1 2999 |tee -a /tmp/log | cut -d ' ' -f 3 | xargs -I{} python -c "import struct; print struct.pack('I',int({}))" > /tmp/pipe

Вторая командная строка не завершается, и я обнаружил блокировку cat /tmp/pipe при чтении (не при открытии) при использовании strace для отладки.


person dcnh35    schedule 16.04.2018    source источник
comment
Вы что-то написали в трубу?   -  person a.l.    schedule 16.04.2018
comment
@aLeX да, /tmp/log не пуст   -  person dcnh35    schedule 16.04.2018
comment
@aLeX и тестовая командная строка echo "Please send '220419784' as a little endian 32bit int" | cut -d ' ' -f 3 | xargs -I{} python -c "import struct; print struct.pack('I',int({}))" выводят правильный ответ.   -  person dcnh35    schedule 16.04.2018


Ответы (1)


Я нашел причину. когда вывод не терминал, cut буферизует вывод. python print также необходимо очистить. https://unix.stackexchange.com/a/226675/194577

person dcnh35    schedule 16.04.2018