2

mkfifo fifo
echo 1 >fifo は最後のコマンドでブロックします。

これについての説明はgnu libcにあります

ただし、入出力操作を行う前に、両端を同時に開いておく必要があります。通常、読み取り用に FIFO を開くと、他のプロセスが書き込み用に同じ FIFO を開くまでブロックされます。逆の場合も同様です。

しかし

>mkfifo fifo  
>exec 5<>fifo  
>echo 1 >&5

ブロックせず、うまく機能します。繰り返しになりますが、AFAIKシェルはdup2を使用してリダイレクトを行いますが、これはどのように違いますか?

実際、質問を定式化したときに答えを見つけました。以下に掲載します。

4

1 に答える 1

1

さて、答えは短いです。

私のLinuxディストリビューションからman 7 fifo

Linux では、読み書き用に FIFO を開くと、ブロッキング モードとノンブロッキング モードの両方で成功します。POSIX では、この動作は未定義のままです。

したがって<>、リダイレクトが原因です。

于 2012-07-19T05:54:43.290 に答える