是否需要关闭 systemv 消息队列

Does a systemv message queue need to be closed

我正在使用系统 v 消息队列。队列由其他进程创建和删除。所以在这个例子中,我使用的是已经创建的消息队列:

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
...
key = ftok(path,project);
msqid = msgget(key,0);
msgsnd(msqid,data,size,0);
//Must be the "handle" msgqid closed?
...

我找不到任何关于关闭消息队列 handle/identifier 的信息。消息队列标识符是否必须是 "closed"?

不,你不知道。

SYSV 消息队列不会为需要释放的客户端分配特定资源(除了队列本身和其中发布的消息)。这些资源是 "global" 给系统的,而不是每个进程。 msgget 只是将密钥作为系统全局句柄返回。

然而,销毁消息队列本身应该在不再需要时完成,因为它占用系统资源。但是,正如您所说,这是由 "the other process" 处理的。

请注意,POSIX 个消息队列 (mq_open, mq_close) 的行为不同。