【问题标题】:How to create a linux fifo "pipe" (or something), which does not block writer and reader?如何创建一个不阻塞写入器和读取器的linux fifo“管道”(或其他东西)?
【发布时间】:2011-10-04 10:37:43
【问题描述】:

我创建了一个 fifo 管道

$ mkfifo pipename

现在,如果我在其中写入一些东西,命令将不会返回,

$ echo "foo" > pipename

直到我读到它:

$ cat < pipename 
foo

另外,读取命令在写入内容之前不会返回。

现在,我想创建一个这样的东西(实际上,也许这个东西不应该被认为是管道,而是某种缓冲区)

  • 无论管道中有没有东西,读取命令都会立即返回(如果管道为空,则读取应立即返回零字节)
  • 写命令立即返回

谢谢

【问题讨论】:

  • 这种行为很难实现。最好知道为什么您担心将数据写入磁盘以及您试图通过此实现的目标。可能会有更好的设计,它以不同的方式做你想做的事。

标签: linux buffer pipe


【解决方案1】:

使用先进先出,但编写您自己的阅读器和作家。打开设置了O_NONBLOCK的fifo,如果没有其他进程打开对方,open会立即返回。您的写入命令将立即返回(按要求),但数据将丢失。如果您希望数据持久保存,请使用常规文件。

【讨论】:

  • 谢谢。我希望数据一直存在,直到盒子打开。常规文件将数据写入磁盘,不是吗?有没有办法在内存中实现同样的效果?
  • 是的,使用常规文件将数据写入磁盘。如果您需要某种缓冲,通常很难确保数据只存储在内存中,而不是存储在磁盘上(它可能会被换出)。如果您只是关心写入/读取周期和速度,您可以使用 ramdisk(通常在所有发行版的某个目录下都可用)。
  • 我想用它来创建一个“虚拟设备”。所以我想创建一个带缓冲区的FIFO。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
相关资源
最近更新 更多