gpt4 book ai didi

posix - 如何获得唯一的 POSIX 消息队列?

转载 作者:行者123 更新时间:2023-12-04 20:54:49 27 4
gpt4 key购买 nike

我正在开发一个简单的并行应用程序,我想在其中使用单个进程来维护有关一系列工作进程的状态信息。设置一个 POSIX 消息队列似乎相对容易,其中所有工蜂都可以向状态维护者发送定期更新。我的问题? POSIX 消息队列必须有一个名称。我不想取名字;我所关心的是获得一个唯一的消息队列,就像我使用带有 IPC_PRIVATE 的 SYSV 消息队列一样。 .对于唯一的文件名,我可以使用 mkstemp(3)或者对于唯一的打开文件描述符,我可以使用 tmpfile(3) . 我应该如何获得唯一的 POSIX 消息队列?

最佳答案

I don't want to pick a name; all I care about is getting a unique message queue, much as I would using SYSV message queues with IPC_PRIVATE



好吧,使用 POSIX 消息队列,您必须指定一个名称,但您不必保留它,也不必允许其他人使用该名称使用相同的队列。

IPC_PRIVATE 模仿

做什么 mkstemptmpfile在引擎盖下做。借用任何“tmp”/“temp”名称选择算法来生成“/reasonably_unique”, mq_open它是 O_CREAT|O_EXCL,然后是 mq_unlink它。然后子工作进程可以继承消息队列描述符。

警告:root 或您的 EUID 流氓可能会弄清楚您在做什么并跳入 mq_open 之间和 mq_unlink ?是的。

替代实现

或者,使用 SOCK_DGRAM socketpairpipe反而。这些提供与 POSIX 消息队列相似的语义 — attr.mq_msgsize变为 SO_SNDBUF/SO_RCVBUF 或遵守 PIPE_BUF 的协议(protocol), mq_notify变成 I/O 选择性(可能已经是这种情况了)——尽管你确实失去了消息优先级。

关于posix - 如何获得唯一的 POSIX 消息队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com