Как записать что-то в именованный канал, даже если нет читателей

Как записать что-то в именованный канал, даже если нет читателей

У меня есть небольшой тестовый скрипт:

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")

но я не знаю правильный синтаксис для него... Все, что я знаю, это то, что мне нужно открыть его для чтения до того, как первый вызов записи заблокируется. Вышеуказанное, похоже, не работает.

Связанный контент