У меня есть небольшой тестовый скрипт:
rm fooo | cat
mkfifo fooo
echo 'bar' > fooo # blocks here
echo 'done'
Я предполагаю, что поскольку никто не читает данные из именованного канала, вызов записи будет заблокирован до тех пор.
Есть ли способ писать, даже если нет читателей, или проверять, есть ли таковые?
решение1
В соответствии сhttps://man7.org/linux/man-pages/man7/fifo.7.html:
«В Linux открытие FIFO для чтения и записи будет успешным как в блокирующем, так и в неблокирующем режиме. POSIX оставляет это поведение неопределенным. Это можно использовать для открытия FIFO для записи, когда нет доступных читателей. Процесс, который использует оба конца соединения для связи с самим собой, должен быть очень осторожным, чтобы избежать взаимоблокировок».
решение2
Одним из решений было бы добавление считывателя в ту же строку:
echo "unlocked" > "$fifo" > >(read line; echo "$line")
но я не знаю правильный синтаксис для него... Все, что я знаю, это то, что мне нужно открыть его для чтения до того, как первый вызов записи заблокируется. Вышеуказанное, похоже, не работает.