Операционная система UNIX. Руководство программиста


Использование очередей сообщений - часть 2


Последнее определение находится во включаемом файле <sys/ipc.h>, общем для всех средств межпроцессной связи.

Если в аргументе msgflg системного вызова msgget(2) установлен только флаг IPC_CREAT, выполняется одно из двух действий:

  • Порождается новый идентификатор msqid и создаются ассоциированные с ним очередь сообщений и структура данных.
  • Возвращается существующий идентификатор msqid, с которым уже ассоциированы очередь сообщений и структура данных.

Действие определяется по значению аргумента key. Если еще не существует идентификатора msqid со значением ключа key, выполняется первое действие, то есть для данного ключа выделяется новый уникальный идентификатор и создаются ассоциированные с ним очередь сообщений и структура данных (при условии, что не будет превышен соответствующий системный лимит).

Кроме того, можно специфицировать ключ key со значением IPC_P-RIVATE (0). Если указан такой "личный" ключ, для него обязательно выделяется новый уникальный идентификатор и создаются ассоциированные с ним очередь сообщений и структура данных (при условии, что это не приведет к превышению системного лимита). При выполнении утилиты ipcs поле KEY для подобного идентификатора msqid из соображений секретности содержит нули.

Если идентификатор msqid со специфицированным значением ключа key уже существует, выполняется второе действие, то есть возвращается ассоциированный идентификатор. Если Вы желаете трактовать возвращение существующего идентификатора как ошибку, в передаваемом системному вызову аргументе msgflg нужно установить флаг IPC_EXCL.

Более детально использование данного системного вызова обсуждается в пункте Использование msgget.

При выполнении первого действия процесс, вызвавший msgget(2), становится владельцем/создателем очереди сообщений; соответственно этому инициализируется ассоциированная структура данных. Напомним, что владелец очереди может быть изменен, однако процесс-создатель всегда остается создателем; см. пункт Управление очередями сообщений. При создании очереди сообщений определяются также начальные права на выполнение операций над ней.




Начало  Назад  Вперед



Книжный магазин