读取FIFO不是第一次显示

时间:2016-12-09 10:42:25

标签: linux unix cat tail fifo

在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,则会在第一个过程中立即打印此字符串。< / p>

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

1 个答案:

答案 0 :(得分:0)

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

含义无论开关tail仍然需要EOF输出任何东西。

为了测试这一点,您可以使用简单的cat代替tail

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

...

term_2$ cat > fifo.file