FIFO有时需要两次写入才能满足读取

FIFO有时需要两次写入才能满足读取

我在 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 操作)才能使读取成功;读取将释放第一次写入,但读取本身不会被释放,直到发生另一次写入。

以前有人观察过这种现象吗?任何信息将不胜感激。

相关内容