Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       mq_getattr, mq_setattr - возвращает/изменяет атрибуты очереди сообщений

БИБЛИОТЕКА

       Библиотека реального времени (librt, -lrt)

ОБЗОР

       #include <mqueue.h>

       int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
       int mq_setattr(mqd_t mqdes, const struct mq_attr *restrict newattr,
                      struct mq_attr *restrict oldattr);

ОПИСАНИЕ

       Функция mq_getattr() и mq_setattr(), соответственно, возвращает и изменяет атрибуты очереди сообщений, на
       которую ссылается дескриптор очереди сообщений mqdes.

       Функция  mq_getattr()  возвращает  структуру  mq_attr в буфер, указанный в attr. Эта структура определена
       следующим образом:

           struct mq_attr {
               long mq_flags;       /* флаги: 0 или O_NONBLOCK */
               long mq_maxmsg;      /* макс. кол-во сообщений в очереди */
               long mq_msgsize;     /* макс. размер сообщения (в байтах) */
               long mq_curmsgs;     /* кол-во сообщений в очереди в данный момент */
           };

       В  поле  mq_flags  содержатся  флаги,  связанные  с  открытым  описанием  очереди  сообщений.  Это   поле
       инициализируется  при  создании  очереди  с помощью mq_open(3). В этом поле может содержаться только флаг
       O_NONBLOCK.

       Поля mq_maxmsg и mq_msgsize заполняются при создании очереди  сообщений  с  помощью  mq_open(3).  В  поле
       mq_maxmsg  содержится  верхний  предел  на  количество  сообщений,  которое может поместиться в очереди с
       помощью mq_send(3). В поле  mq_msgsize содержится верхний  предел  на  размер  сообщений,  которые  могут
       помещаться  в  очередь.  Значение  обоих  полей  должно  быть  больше  нуля. Два файла в /proc, в которых
       размещаются значения этих полей, описаны в mq_overview(7).

       В поле mq_curmsgs возвращается количество сообщений в очереди в текущей момент времени.

       Функция mq_setattr() изменяет атрибуты очереди согласно информации из передаваемой структуры mq_attr,  на
       которую  указывает  newattr.  Единственным  атрибутом, который можно изменить, является флаг O_NONBLOCK в
       mq_flags. Остальные поля в newattr игнорируются. Если поле oldattr не равно NULL, то  буфер,  на  который
       оно  указывает,  используется  для  возврата  структуры  mq_attr,  с  той же информацией как после вызова
       mq_getattr().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении  mq_getattr() и mq_setattr()  возвращается 0; при ошибке  возвращается  -1,  а  в
       errno помещается код ошибки.

ОШИБКИ

       EBADF  В mqdes размещён некорректный дескриптор очереди сообщений.

       EINVAL В newattr->mq_flags содержится набор битов, отличный от O_NONBLOCK.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ mq_getattr(), mq_setattr()                                          │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

       В  Linux,  mq_getattr()  и  mq_setattr()   является  библиотечными  функциями,  реализованными  на основе
       системного вызова mq_getsetattr(2).

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.

ПРИМЕРЫ

       Программу, представленную ниже, можно использовать  для  просмотра  значений  по  умолчанию  mq_maxmsg  и
       mq_msgsize,  которые  назначаются  очереди  сообщений,  создаваемой вызовом mq_open(3) с аргументом attr,
       равным NULL. Пример работы программы:

           $ ./a.out /testq
           Максимальное количество сообщений в очереди:   10
           Максимальный размер сообщения:             8192

       Начиная с Linux 3.5 для управления значениями по умолчанию можно использовать  следующие  файлы  в  /proc
       (описаны в mq_overview(7)):

           $ uname -sr
           Linux 3.8.0
           $ cat /proc/sys/fs/mqueue/msg_default
           10
           $ cat /proc/sys/fs/mqueue/msgsize_default
           8192

   Исходный код программы

       #include <fcntl.h>
       #include <mqueue.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/stat.h>
       #include <unistd.h>

       #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                               } while (0)

       int
       main(int argc, char *argv[])
       {
           mqd_t mqd;
           struct mq_attr attr;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s mq-name\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           mqd = mq_open(argv[1], O_CREAT | O_EXCL, 0600, NULL);
           if (mqd == (mqd_t) -1)
               errExit("mq_open");

           if (mq_getattr(mqd, &attr) == -1)
               errExit("mq_getattr");

           printf("Maximum # of messages on queue:   %ld\n", attr.mq_maxmsg);
           printf("Maximum message size:             %ld\n", attr.mq_msgsize);

           if (mq_unlink(argv[1]) == -1)
               errExit("mq_unlink");

           exit(EXIT_SUCCESS);
       }

СМОТРИТЕ ТАКЖЕ

       mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства   разработал(и)   aereiae  <aereiae@gmail.com>,  Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>,
       Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>,  Max  Is  <ismax799@gmail.com>,
       Yuri   Kozlov   <yuray@komyakino.ru>,   Иван   Павлов  <pavia00@gmail.com>,  Малянов  Евгений  Викторович
       <maljanow@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  15 июня 2024 г.                                   mq_getattr(3)