Reading FIFO 第一次不显示

Reading FIFO doesn't show for the first time

在 Unix 中,我创建了一个 FIFO 并尝试用 tail:

读取它
mkfifo fifo.file
tail -f fifo.file

然后我尝试从另一个进程向其中写入消息,所以我按如下操作:

cat > fifo.file

然后我输入如下消息:

abc
def

在我键入 Ctrl-D 之前,第一个进程 (tail -f fifo.file) 没有打印任何内容。
然后我输入Ctrl-D,打印上面的两行。

现在如果我再次执行 cat > fifo.file 并键入一行 qwe 并在行尾键入 Enter ,该字符串将在第一个过程中立即打印.

我想知道为什么我使用同一个命令会得到两种不同的行为。
是否可以在没有第一个行为的情况下使其成为第二个行为,这意味着当我第一次 cat 时,我可以在输入 Enter 后看到打印的消息,而不是 Ctrl-D?

这就是 tail 的工作原理。基本上它只在 EOF 发生时输出指定的文件内容,Ctrl-D 有效地发送到终端。 -f 开关只是让 tail 不退出并在发生这种情况时继续阅读。

意味着无论开关 tail 仍然需要 EOF 才能输出任何内容。

只是为了测试这个你可以使用简单的 cat 而不是 tail:

term_1$ mkfifo fifo.file
term_1$ cat < fifo.file

...

term_2$ cat > fifo.file