是否需要关闭systemv消息队列

时间:2018-05-23 09:45:06

标签: c linux message-queue system-calls

我正在使用系统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?
...

我找不到关于关闭消息队列的句柄/标识符的任何信息。消息队列标识符是否必须“关闭”?

1 个答案:

答案 0 :(得分:1)

不,你没有。

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

但是,一旦不再需要,就应该销毁消息队列本身,因为它占用了系统资源。然而,正如你所说,这是由“另一个过程”处理的。

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