![FIFO有時需要兩次寫入才能滿足讀取](https://rvso.com/image/178490/FIFO%E6%9C%89%E6%99%82%E9%9C%80%E8%A6%81%E5%85%A9%E6%AC%A1%E5%AF%AB%E5%85%A5%E6%89%8D%E8%83%BD%E6%BB%BF%E8%B6%B3%E8%AE%80%E5%8F%96.png)
我在 Ubuntu 18.04.4 LTS 上發現了一些令人困惑的行為。
在一個終端中,我想將私鑰寫入 FIFO。
$ mkfifo /tmp/fifo
$ chmod o-rwx /tmp/fifo
$ chmod g-rwx /tmp/fifo
$ cat id_rsa > /tmp/fifo
在另一個終端中,我想讀取 FIFO 以取得金鑰的內容。
$ ssh -i /tmp/fifo -o StrictHostKeyChecking=no <<user@address>>
我希望第一個終端機中的寫入會阻塞,直到第二個終端機中發生讀取,此時兩者都會被釋放。這種情況確實經常發生。
不幸的是,有時需要兩次寫入(cat 操作)才能使讀取成功;讀取將釋放第一次寫入,但讀取本身不會被釋放,直到發生另一次寫入。
以前有人觀察過這種現象嗎?任何資訊將不勝感激。