mkfifo 替代品

Posted

技术标签:

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

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

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

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

海因里希

【问题讨论】:

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

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

【讨论】:

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于mkfifo 替代品的主要内容,如果未能解决你的问题,请参考以下文章

XCTAssertEqualObjects 的替代品是啥?

arcmap在mac上的替代品

$.browser 的替代品是啥

在经过认证的航空平台上有 Qt 的替代品吗?

雪花中的Bytea替代品是啥

UIScrollView 的开源替代品