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

ИМЯ

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

LIBRARY

       Real-time library (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  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

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

ПРИМЕРЫ

       Программу, представленную ниже, можно использовать для  просмотра  значений  по  умолчанию
       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, "Использование: %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("Максимальное количество сообщений в очереди:   %ld\n", attr.mq_maxmsg);
           printf("Максимальный размер сообщения:             %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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.