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

时间:2016-12-09 09:24:03

标签: linux shell unix cat fifo

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

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

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

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

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

在另一个终端上:

cat fifo.file

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

1 个答案:

答案 0 :(得分:1)

来自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 停止写入。