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
在 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