Нужно ли закрывать очередь сообщений systemv?
Я использую систему 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 ответ
Нет, ты не
Очереди сообщений SYSV не выделяют определенные ресурсы (кроме самой очереди и размещенных там сообщений) для клиентов, которые должны быть освобождены. Эти ресурсы являются "глобальными" для системы, а не для каждого процесса. msgget
просто возвращает ключ как системный глобальный дескриптор.
Однако уничтожение самой очереди сообщений следует выполнять, когда она больше не нужна, поскольку она занимает системные ресурсы. Однако, как вы говорите, этим занимается "другой процесс".
Обратите внимание, что очереди сообщений POSIX (mq_open, mq_close
) ведут себя по-разному.