以下の小さなテストスクリプトがあります。
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を開くことはブロックモードと非ブロックモードの両方で成功します。 FIFO自身と通信するには、デッドロックを避けるために接続に非常に注意する必要があります。
答え2
1つの解決策は、同じ行にリーダーを追加することです。
echo "unlocked" > "$fifo" > >(read line; echo "$line")
しかし、私はそれの正しい構文を知りません。私が知っているのは、最初の書き込み呼び出しブロックの前に読み取るために開く必要があることです。上記はうまくいかないようです。