如何将消息写入FIFO并同时从另一个过程中读取它



在unix系统中,我只知道我们可以在两个过程之间使用FIFO文件进行通信,并且我已经使用C项目进行了测试。

现在我想知道我们是否可以这样做:

  • 打开两个终端。
  • 使用一个将消息写入FIFO并使用其他阅读它。
  • 当我在第一个终端将某些东西放入FIFO时,第二端子将立即显示。

我已经尝试了以下内容,但它不起作用。在一个端子上:

mkfifo fifo.file
echo "hello world" > fifo.file

在另一个终端上:

cat fifo.file

现在我可以看到"hello world"。但是,这两个过程都立即完成,我无法继续键入/阅读fifo.file

来自 info mkfifo

以这种方式创建了一个FIFO特殊文件后,任何过程 可以以与普通文件相同的方式打开它供阅读或写作。 但是,它必须同时在两端打开,然后 继续对其进行任何输入或输出操作。为FIFO打开 读数通常会阻止,直到其他一些过程打开相同的FIFO 写作,反之亦然。

因此,您应该打开文件以在一个过程(终端)中读取的文件:

cat fifo.file

并打开文件以在另一个过程(终端)中写作:

echo 'hello' > fifo.file

cat在文件结束(输入)发生时,上面的示例中停止读取文件。如果要继续从文件中读取,请使用tail -F命令,例如:

tail -F fifo.file

如果要同时写入并将字符串发送到管道的另一端,请使用cat,如下:

cat > fifo.file

当您输入时,字符串将发送到管道的另一端。按 ctrl - d 停止写作。

最新更新