在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
后看到打印的消息?
答案 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