【问题标题】:Does a systemv message queue need to be closedsystemv消息队列是否需要关闭
【发布时间】:2018-11-02 05:53:45
【问题描述】:

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

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

【问题讨论】:

  • 消息队列标识符是否必须“关闭”?在做什么之前?

标签: c linux message-queue system-calls


【解决方案1】:

不,你没有。

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

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

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

【讨论】:

  • 我不认为 OP 在询问是否删除队列。正如他们所提到的,创建和删除由另一个进程处理。问题是关于在这个过程中关闭句柄。
  • 是的,没错。队列的删除在其他进程中完成
猜你喜欢
  • 2014-02-13
  • 2023-03-08
  • 2019-09-18
  • 1970-01-01
  • 2021-03-25
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
相关资源
最近更新 更多