次のような小さなテスト スクリプトがあります。
rm fooo | cat
mkfifo fooo
echo 'bar' > fooo # blocks here
echo 'done'
名前付きパイプから読み取る人がいないため、書き込み呼び出しはそれまでブロックされるのではないかと推測しています。
読者がいない場合でも書き込む方法、または読者がいないかどうかを確認する方法はありますか?
答え1
によると参考::
「Linux では、FIFO を読み取りと書き込み用に開くと、ブロッキング モードと非ブロッキング モードの両方で成功します。POSIX ではこの動作は未定義のままです。これを使用すると、読み取りが利用できないときに FIFO を書き込み用に開くことができます。接続の両端を使用して自分自身と通信するプロセスは、デッドロックを回避するために細心の注意を払う必要があります。」
答え2
1 つの解決策は、同じ行にリーダーを追加することです。
echo "unlocked" > "$fifo" > >(read line; echo "$line")
しかし、正しい構文がわかりません...最初の書き込み呼び出しがブロックされる前に、読み取り用に開く必要があることはわかっています。上記は機能しないようです。