Man page - mq_setattr(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

mq_getattr

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
ВЕРСИИ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕРЫ
Исходный код программы
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

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

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).

Image grohtml-631363-1.png

ВЕРСИИ

В 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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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