понял, что проблема возникает при вызове open()
Правильно понял. Цитата из
man 7 fifo:
Normally, opening the FIFO blocks until the other end is opened also.
Чтобы вызов open вернулся и программа продолжила выполняться нужно открыть второй конец fifo на чтение.