gpt4 book ai didi

创建多个消息队列,并使用队列的唯一键

转载 作者:行者123 更新时间:2023-11-30 16:53:20 28 4
gpt4 key购买 nike

我们创建多个队列,用于将消息从一个进程传递到另一个进程。但有时消息队列的键会重叠(不同队列的键相同)。为了避免这种情况,我想到将 IPC_PRIVATE 与函数 msgget() 一起使用,该函数用于创建消息队列。

这个link说我应该使用IPC_PRIVATE,我的应用程序很关键,所以我必须避免当前的情况。此 msgget 的语法为 int msgget(key_t key, int msgflg);。请告诉我带有 IPC_PRIVATE 的 msgget 语法以及它是否能解决我的问题?

最佳答案

Please tell me the syntax for msgget with IPC_PRIVATE

IPC_PRIVATEkey_t 类型的值。您将其作为文字键值传递:

int flags = /* ... permission bits ... */;
int my_mq = msgget(IPC_PRIVATE, flags);

当您使用IPC_PRIVATE时,您不需要在标志中包含IPC_CREATIPC_EXCL;如果您确实包含它们,那么它们将被忽略。

and wether it will solve my issue ?

每次使用IPC_PRIVATE键成功调用msgget()都会创建一个新的消息队列并返回其标识符,因此这种方法肯定会防止无意的队列共享。然而,它也使得执行有意的队列共享变得更加困难,这可能会给您带来自己的问题。毕竟,消息队列是一种 IPC 机制,因此您似乎确实希望某些进程共享队列。促进这一点是基于 key 的队列访问的全部意义。

作为替代方案,访问队列的常用方法是根据众所周知的或可计算的文件名,使用 ftok() 生成 key 。文件名可能是工作目录、中央可执行文件或配置文件的名称。通过适当选择区分文件,不同组的协作可执行文件可以获得不同的 key 。 ftok() 的第二个参数使协作进程能够生成(相同的)最多 256 个公共(public) key 集。

关于创建多个消息队列,并使用队列的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896238/

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