【发布时间】:2015-01-13 11:35:12
【问题描述】:
一个 POSIX 消息队列可以由 mq_open() 创建,它返回 mqd_t 形式的消息队列描述符。如果其他进程必须通过 mq_notify() 或 mq_receive() 接收消息,它需要消息队列描述符作为参数。
有没有办法使用队列名称获取消息队列描述符?
如果不是,消息队列描述符是如何与其他进程通信的,然后才能开始使用消息队列?
【问题讨论】:
标签: posix ipc message-queue
一个 POSIX 消息队列可以由 mq_open() 创建,它返回 mqd_t 形式的消息队列描述符。如果其他进程必须通过 mq_notify() 或 mq_receive() 接收消息,它需要消息队列描述符作为参数。
有没有办法使用队列名称获取消息队列描述符?
如果不是,消息队列描述符是如何与其他进程通信的,然后才能开始使用消息队列?
【问题讨论】:
标签: posix ipc message-queue
mqd_t mq_open(const char *name, int oflag);
消息队列由两个进程通过“名称”标识,即调用 mq_open 的第一个参数。
打算共享消息队列的两个进程必须事先知道要共享的队列的名称。
如果你使用
int msgget(key_t key, int msgflg);
key:用户定义的值。
这里“key”的值标识了一个跨多个进程的消息队列。
总结一下:
如果两个进程需要共享一个消息队列,它们需要知道“名称”(以防
mq_open)和“key”(如果是 msgget)提前。
【讨论】: