Нужно ли закрывать очередь сообщений systemv? - PullRequest
0 голосов
/ 23 мая 2018

Я использую систему 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 голосов
/ 23 мая 2018

Нет, вы этого не делаете.

Очереди сообщений SYSV не выделяют определенные ресурсы (кроме самой очереди и сообщений, размещенных там) для клиентов, которые должны быть освобождены.Эти ресурсы являются «глобальными» для системы, а не для каждого процесса.msgget просто возвращает ключ как системный глобальный дескриптор.

Однако уничтожение самой очереди сообщений следует выполнять, когда она больше не нужна, поскольку она занимает системные ресурсы.Однако, как вы говорите, это обрабатывается «другим процессом».

Обратите внимание, что очереди сообщений POSIX (mq_open, mq_close) ведут себя по-разному.

...