【问题标题】:How to write messages into a FIFO and read it from another process simultaneously如何将消息写入 FIFO 并同时从另一个进程读取它
【发布时间】:2017-04-24 17:32:13
【问题描述】:

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

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

  • 打开两个终端。
  • 使用 1 将消息写入 FIFO 并使用 其他人阅读。
  • 当我在第一个终端向 FIFO 中放入一些东西时,第二个终端会立即显示出来。

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

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

在另一个终端上:

cat fifo.file

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

【问题讨论】:

  • 错误信息是什么?

标签: linux shell unix cat fifo


【解决方案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 停止写入。

【讨论】:

  • 谢谢。现在可以了!你能再读一遍我的问题吗,因为我有一个新问题。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多