【问题标题】:mkfifo Alternativemkfifo 替代品
【发布时间】:2010-10-23 09:30:07
【问题描述】:

我有一个持续需要写入信息的过程。此外,还有第二个进程有时会连接到写入进程的“信息通道”,并且应该读取连接后写入的信息。此过程也可能会断开连接并重新连接几次。

我目前正在通过在我的 c++ 程序中使用 mkfifo() 来使用命名管道来实现这一点。不幸的是,如果我在这个 fifo 上调用 open(),它会阻塞,直到一个进程打开 fifo 进行读取。这对于命名管道来说是很正常的,但我需要这个 open 命令是非阻塞的。

您知道在这种情况下可以替代 mkfifo 吗?

海因里希

【问题讨论】:

  • 我发现 mqueue.h 看起来很有趣。有人知道这是否是一个合适的解决方案?
  • 您最终将不得不阻止或丢弃数据,那么您更喜欢哪一个?

标签: c++ c unix


【解决方案1】:

您可以在环回接口上使用 Unix 域套接字或常规 TCP 套接字。

【讨论】:

  • 这不是一个解决方案,因为我作为服务器的编写器在发送之前必须等待客户端,并且会卡在 accept() 方法中。
【解决方案2】:

您可以使用共享内存或 mmap。它应该包含最旧数据的偏移量,以及数据的内存块

fifo 限制为 64k(取决于分布和某些设置)。

【讨论】:

    【解决方案3】:

    我终于用上了unix消息队列,Reader和Writer可以完全独立启动,一切都可以非阻塞执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 2011-06-10
      • 2014-04-18
      • 2012-04-08
      • 2012-07-09
      • 2011-03-31
      • 2023-03-12
      • 2017-02-26
      相关资源
      最近更新 更多