Man page - mq_getattr(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

MQ_GETATTR

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠
注 意

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

mq_getattr, mq_setattr - メ ッ セ ー ジ キ ュ ー の 属 性 を 設 定 /取 得 す る

書 式

#include <mqueue.h>

int mq_getattr(mqd_t mqdes , struct mq_attr * attr );

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

-lrt で リ ン ク す る 。

説 明

mq_getattr () と mq_setattr () は 、 メ ッ セ ー ジ キ ュ ー 記 述 子 mqdes で 参 照 さ れ る メ ッ セ ー ジ キ ュ ー の 属 性 の 取 得 と 変 更 を そ れ ぞ れ 行 う 。

mq_getattr () は 、 attr が 指 す バ ッ フ ァ ー に mq_attr 構 造 体 を 格 納 し て 返 す 。 こ の 構 造 体 は 以 下 の よ う に 定 義 さ れ て い る :

struct mq_attr {
long mq_flags; /* フ ラ グ : 0 か O_NONBLOCK */
long mq_maxmsg; /* キ ュ ー の 最 大 メ ッ セ ー ジ 数 */
long mq_msgsize; /* 最 大 メ ッ セ ー ジ サ イ ズ (バ イ ト 単 位 ) */
long mq_curmsgs; /* キ ュ ー に 現 在 入 っ て い る メ ッ セ ー ジ 数 */
};

mq_flags フ ィ ー ル ド に は 、 オ ー プ ン メ ッ セ ー ジ キ ュ ー 記 述 (open message queue description) に 関 連 付 け ら れ て い る フ ラ グ が 格 納 さ れ る 。 こ の フ ィ ー ル ド は mq_open (3) で キ ュ ー が 作 成 さ れ る 際 に 初 期 化 さ れ る 。 こ の フ ィ ー ル ド に 現 れ る フ ラ グ は O_NONBLOCK だ け で あ る 。

mq_maxmsg mq_msgsize フ ィ ー ル ド は mq_open (3) で メ ッ セ ー ジ キ ュ ー が 作 成 さ れ る 際 に セ ッ ト さ れ る 。 mq_maxmsg フ ィ ー ル ド は 、 mq_send (3) を 使 っ て キ ュ ー に 入 れ る こ と が で き る メ ッ セ ー ジ 数 の 上 限 で あ る 。 mq_msgsize フ ィ ー ル ド は 、 キ ュ ー に 入 れ る こ と が で き る メ ッ セ ー ジ の 上 限 サ イ ズ で あ る 。 こ れ ら の フ ィ ー ル ド は ど ち ら も 0 よ り 大 き な 値 で な け れ ば な ら な い 。 こ れ ら の フ ィ ー ル ド に 設 定 で き る 値 の 上 限 は /proc フ ァ イ ル に よ り 決 ま る 。 /proc フ ァ イ ル の 詳 細 は mq_overview (7) に 説 明 さ れ て い る 。

mq_curmsgs フ ィ ー ル ド は キ ュ ー に 現 在 格 納 さ れ て い る メ ッ セ ー ジ 数 を 返 す 。

mq_setattr () は 、 newattr が 指 す mq_attr 構 造 体 で 与 え ら れ た 情 報 を 使 っ て 、 メ ッ セ ー ジ キ ュ ー の 属 性 を 設 定 す る 。 変 更 す る こ と が で き る 属 性 は 、 mq_flags O_NONBLOCK フ ラ グ の 設 定 だ け で あ る 。 newattr の 他 の フ ィ ー ル ド は 無 視 さ れ る 。 oldattr フ ィ ー ル ド が NULL 以 外 の 場 合 、 mq_getattr () が 返 す の と 同 じ 情 報 を 格 納 し た mq_attr 構 造 体 を oldattr が 指 す バ ッ フ ァ ー に 入 れ て 返 す 。

返 り 値

成 功 す る と 、 mq_getattr () mq_setattr () は 0 を 返 す 。 エ ラ ー の 場 合 、 -1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。

エ ラ ー

EBADF

mqdes に 指 定 さ れ た メ ッ セ ー ジ キ ュ ー 記 述 子 が 不 正 で あ る 。

EINVAL

newattr->mq_flags O_NONBLOCK 以 外 の ビ ッ ト が セ ッ ト さ れ て い た 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-21331-1.png

準 拠

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

注 意

Linux で は 、 mq_getattr () と mq_setattr () は ラ イ ブ ラ リ 関 数 で あ り 、 mq_getsetattr (2) シ ス テ ム コ ー ル を 用 い て 実 装 さ れ て い る 。

下 記 の プ ロ グ ラ ム を 使 う と 、 attr 引 数 に NULL を 指 定 し て mq_open (3) を 呼 び 出 し た 際 に 作 成 さ れ る メ ッ セ ー ジ キ ュ ー に 割 り 当 て ら れ る デ フ ォ ル ト の mq_maxmsg mq_msgsize の 値 を 表 示 で き る 。 こ の プ ロ グ ラ ム の 実 行 例 を 以 下 に 示 す 。

$ ./a.out /testq
Maximum # of messages on queue: 10
Maximum message size: 8192

Linux 3.5 以 降 で は 、 ( mq_overview (7) に 説 明 が あ る ) 以 下 の /proc フ ァ イ ル を 使 っ て デ フ ォ ル ト 値 を 制 御 で き る 。

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

プ ロ グ ラ ム の ソ ー ス

#include <mqueue.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.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, S_IRUSR | S_IWUSR, 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)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。