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 替代品的主要内容,如果未能解决你的问题,请参考以下文章