Manpages

名 前

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_maxmsgmq_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_flagsO_NONBLOCK フ ラ グ の 設 定 だ け で あ る 。 newattr の 他 の フ ィ ー ル ド は 無 視 さ れ る 。 oldattr フ ィ ー ル ド が NULL 以 外 の 場 合 、 mq_getattr() が 返 す の と 同 じ 情 報 を 格 納 し た mq_attr 構 造 体 を oldattr が 指 す バ ッ フ ァ ー に 入 れ て 返 す 。

返 り 値

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

エ ラ ー

EBADF

mqdes に 指 定 さ れ た デ ィ ス ク リ プ タ ー が 不 正 で あ る 。

EINVAL

newattr−>mq_flagsO_NONBLOCK 以 外 の ビ ッ ト が セ ッ ト さ れ て い た 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 mq_getattr() と mq_setattr() は ス レ ッ ド セ ー フ で あ る 。

準 拠

POSIX.1−2001.

注 意

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

下 記 の プ ロ グ ラ ム を 使 う と 、 attr 引 き 数 に NULL を 指 定 し て mq_open(3) を 呼 び 出 し た 際 に 作 成 さ れ る メ ッ セ ー ジ キ ュ ー に 割 り 当 て ら れ る デ フ ォ ル ト の mq_maxmsgmq_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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。