我正在使用系统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?
...
我找不到关于关闭消息队列的句柄/标识符的任何信息。消息队列标识符是否必须“关闭”?
答案 0 :(得分:1)
不,你没有。
SYSV消息队列不会为需要释放的客户端分配特定资源(队列本身和其中发布的消息除外)。这些资源对系统来说是“全局的”,而不是每个进程。 msgget
只是将密钥作为系统全局句柄返回。
但是,一旦不再需要,就应该销毁消息队列本身,因为它占用了系统资源。然而,正如你所说,这是由“另一个过程”处理的。
请注意,POSIX消息队列(mq_open, mq_close
)的行为方式不同。