.\" -*- coding: UTF-8 -*- .\" Copyright 1993 Giorgio Ciucci .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Added correction due to Nick Duffek , aeb, 960426 .\" Modified Wed Nov 6 04:00:31 1996 by Eric S. Raymond .\" Modified, 8 Jan 2003, Michael Kerrisk, .\" Removed EIDRM from errors - that can't happen... .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" Modified, 11 Nov 2004, Michael Kerrisk .\" Language and formatting clean-ups .\" Added notes on /proc files .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH msgget 2 "23 июля 2024 г." "Linux man\-pages 6.12" .SH НАИМЕНОВАНИЕ msgget \- возвращает идентификатор очереди сообщений System V .SH БИБЛИОТЕКА Standard C library (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBint msgget(key_t \fP\fIkey\fP\fB, int \fP\fImsgflg\fP\fB);\fP .fi .SH ОПИСАНИЕ Системный вызов \fBmsgget\fP() возвращает идентификатор очереди сообщений System\ V, связанный со значением аргумента \fIkey\fP. Его можно использовать для получения идентификатора уже созданной очереди сообщений (если \fImsgflg\fP равно нулю и значение \fIkey\fP не равно \fBIPC_PRIVATE\fP) или для создания новой. .P Новая очередь сообщений создаётся, если значение \fIkey\fP равно \fBIPC_PRIVATE\fP, или если \fIkey\fP не равно \fBIPC_PRIVATE\fP,не существует ни одной очереди сообщений с заданным ключом \fIkey\fP и в поле \fImsgflg\fP указан флаг \fBIPC_CREAT\fP. .P Если в \fImsgflg\fP одновременно заданы \fBIPC_CREAT\fP и \fBIPC_EXCL\fP и с таким \fIkey\fP очередь сообщений уже существует, то \fBmsgget\fP() завершится с ошибкой и \fIerrno\fP будет равно \fBEEXIST\fP (тот же эффект как для комбинации \fBO_CREAT | O_EXCL\fP у \fBopen\fP(2)). .P При создании права доступа к очереди сообщений определяются младшими битами параметра \fImsgflg\fP. Эти биты прав имеют тот же формат и значение, что и права в аргументе \fImode\fP у вызова \fBopen\fP(2) (право на исполнение не используется). .P Если создаётся новая очередь сообщений, то этот системный вызов инициализирует структуру данных \fImsqid_ds\fP (смотрите \fBmsgctl\fP(2)) следующим образом: .IP \[bu] 3 Полям \fImsg_perm.cuid\fP и \fImsg_perm.uid\fP присваивается эффективный идентификатор пользователя вызывающего процесса. .IP \[bu] Полям \fImsg_perm.cgid\fP и \fImsg_perm.gid\fP присваивается эффективный идентификатор группы вызывающего процесса. .IP \[bu] Младшим 9 битам \fImsg_perm.mode\fP присваивается значение младших 9 битов \fImsgflg\fP. .IP \[bu] \fImsg_qnum\fP, \fImsg_lspid\fP, \fImsg_lrpid\fP, \fImsg_stime\fP и \fImsg_rtime\fP присваивается 0. .IP \[bu] В поле \fImsg_ctime\fP записывается текущее время. .IP \[bu] В поле \fImsg_qbytes\fP записывается системное ограничение \fBMSGMNB\fP. .P Если очередь сообщений уже существует, то проверяются права доступа к ней и не помечена ли она для удаления. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" В случае успеха \fBmsgget\fP() возвращает идентификатор очереди сообщений (неотрицательное целое число). В случае неудачи возвращается \-1, а \fIerrno\fP устанавливается для указания ошибки. .SH ОШИБКИ .TP \fBEACCES\fP Очередь сообщений для ключа \fIkey\fP существует, но вызывающий процесс не имеет прав доступа к ней и не имеет мандата \fBCAP_IPC_OWNER\fP, который управляет его пространством имён IPC. .TP \fBEEXIST\fP В \fImsgflg\fP указаны \fBIPC_CREAT\fP и \fBIPC_EXCL\fP, но очередь сообщений уже существует для \fIkey\fP. .TP \fBENOENT\fP Для ключа \fIkey\fP не существует очереди сообщений, но в \fImsgflg\fP нет флага \fBIPC_CREAT\fP. .TP \fBENOMEM\fP Очередь сообщений необходимо создать, но системе не хватает памяти для хранения новой структуры данных. .TP \fBENOSPC\fP Очередь сообщений необходимо создать, но лимит, определяющий количество очередей сообщений (\fBMSGMNI\fP), уже достигнут. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001, SVr4. .SS Linux До Linux 2.3.20 Linux возвращал \fBEIDRM\fP для \fBmsgget\fP() в очереди сообщений, запланированных для удаления. .SH ПРИМЕЧАНИЯ \fBIPC_PRIVATE\fP является не полем с флагами, а имеет тип \fIkey_t\fP. Если при работе с \fIkey\fP используется это специальное значение, то системный вызов игнорирует всё, кроме 9\-ти младших битов в \fImsgflg\fP и создаёт новую очередь сообщений (если это возможно). .P На вызов \fBmsgget\fP() влияет системное ограничение по очередям сообщений: .TP \fBMSGMNI\fP .\" commit 0050ee059f7fc86b1df2527aaa14ed5dc72f9973 Системное ограничение на максимальное количество очередей сообщений. В системах Linux до версии 3.19, значением по умолчанию этого ограничения рассчитывалось на основе формулы зависящей от доступной системной памяти. Начиная с Linux 3.19, значение по умолчанию равно 32000. В Linux это ограничение можно прочитать и изменять через \fI/proc/sys/kernel/msgmni\fP). .SH ОШИБКИ Имя \fBIPC_PRIVATE\fP, возможно, было выбрано неудачно, \fBIPC_NEW\fP отражает смысл действия более ясно. .SH "СМОТРИТЕ ТАКЖЕ" \fBmsgctl\fP(2), \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBftok\fP(3), \fBcapabilities\fP(7), \fBmq_overview\fP(7), \fBsysvipc\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) aereiae , Alexey , Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , ITriskTI , Max Is , Yuri Kozlov , Иван Павлов , Малянов Евгений Викторович и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .