Manpages

名 前

mq_open − メ ッ セ ー ジ キ ュ ー を オ ー プ ン す る

書 式

#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h>
/* For mode constants */
#include <mqueue.h>

mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *
name, int oflag, mode_t mode,
struct mq_attr *
attr);

−lrt で リ ン ク す る 。

説 明

mq_open() は 、 新 し い POSIX メ ッ セ ー ジ キ ュ ー を 作 成 す る か 、 既 存 の キ ュ ー を オ ー プ ン す る 。 キ ュ ー は name で 識 別 さ れ る 。 name の 構 成 の 詳 細 に つ い て は mq_overview (7) を 参 照 。

oflag 引 き 数 に は 、 関 数 呼 び 出 し の 操 作 を 制 御 す る フ ラ グ を 指 定 す る (oflag の 値 の 定 義 は <fcntl.h> の イ ン ク ル ー ド に よ り 得 ら れ る )。 oflag に は 、 以 下 の う ち い ず れ か 一 つ を 必 ず 指 定 し な け れ ば な ら な い 。
O_RDONLY
メ ッ セ ー ジ の 受 信 専 用 と し て キ ュ ー を オ ー プ ン す る 。
O_WRONLY
メ ッ セ ー ジ の 送 信 専 用 と し て キ ュ ー を オ ー プ ン す る 。

O_RDWR メ ッ セ ー ジ の 送 受 信 両 用 と し て キ ュ ー を オ ー プ ン す る 。

0 個 以 上 の 下 記 の フ ラ グ を 、 ビ ッ ト 単 位 の OR (論 理 和 ) で oflag に 追 加 で 指 定 で き る 。
O_CLOEXEC
(Linux 2.6.26 以 降 ) メ ッ セ ー ジ キ ュ ー 記 述 子 に close−on−exec フ ラ グ を セ ッ ト す る 。 な ぜ こ の フ ラ グ が 有 用 か に つ い て の 議 論 は open(2) を 参 照 。
O_CREAT
存 在 し な い 場 合 、 メ ッ セ ー ジ キ ュ ー を 作 成 す る 。 メ ッ セ ー ジ キ ュ ー の 所 有 者 (ユ ー ザ ー ID) と グ ル ー プ 所 有 権 (グ ル ー プ ID) は 、 そ れ ぞ れ 呼 び 出 し 元 プ ロ セ ス の 実 効 ユ ー ザ ー ID と 実 効 グ ル ー プ ID に 設 定 さ れ る 。

O_EXCL

O_CREAToflag に 指 定 さ れ 、 か つ 指 定 さ れ た 名 前 name を 持 つ キ ュ ー が す で に 存 在 す る 場 合 、 エ ラ ー EEXIST で 失 敗 す る 。

O_NONBLOCK 非 停 止 (nonblocking) モ ー ド で キ ュ ー を オ ー プ ン す る 。 mq_receive(3)mq_send(3) は 、 通 常 は 停 止 (block) す る 状 況 に お い て 、 エ ラ ー EAGAIN で 失 敗 す る よ う に な る 。

oflagO_CREAT を 指 定 す る 場 合 、 追 加 で 2つ の 引 き 数 を 与 え る 必 要 が あ る 。 mode 引 き 数 は 、 新 し い キ ュ ー に 適 用 さ れ る 許 可 設 定 (permission) を 、 open(2) と 同 じ よ う に 指 定 す る (許 可 ビ ッ ト の シ ン ボ ル 定 義 は <sys/stat.h> の イ ン ク ル ー ド に よ り 得 ら れ る )。 許 可 設 定 は プ ロ セ ス の umask で マ ス ク さ れ る 。

attr 引 き 数 は 、 キ ュ ー の 属 性 を 指 定 す る 。 詳 細 は 、 mq_getattr(3) を 参 照 。 attr が NULL の 場 合 、 キ ュ ー は 実 装 で 定 義 さ れ た デ フ ォ ル ト 属 性 で 作 成 さ れ る 。 Linux 3.5 以 降 で は 、 2 つ の /proc フ ァ イ ル が あ り 、 こ れ ら の デ フ ォ ル ト 値 を 制 御 で き る 。 詳 細 は mq_overview(7) を 参 照 。

返 り 値

成 功 す る と 、 mq_open() は メ ッ セ ー ジ キ ュ ー 記 述 子 (message queue descriptor) を 返 す 。 メ ッ セ ー ジ キ ュ ー 記 述 子 は 他 の メ ッ セ ー ジ キ ュ ー 関 連 の 関 数 で 使 用 さ れ る 。 エ ラ ー の 場 合 、 mq_open() は (mqd_t) −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を 設 定 す る 。

エ ラ ー

EACCES キ ュ ー は 存 在 す る が 、 呼 び 出 し 元 が 指 定 さ れ た モ ー ド で そ の キ ュ ー を オ ー プ ン す る 許 可 を 持 た な い 。

EACCES

name に ス ラ ッ シ ュ が 2 個 以 上 含 ま れ て い た 。

EEXIST

oflagO_CREATO_EXCL の 両 方 が 指 定 さ れ た が 、 指 定 さ れ た 名 前 name を 持 つ キ ュ ー が す で に 存 在 す る 。

EINVAL

oflagO_CREAT が 指 定 さ れ 、 か つ attr が NULL 以 外 だ が 、 attr−>mq_maxmsgattr−>mq_msqsize が 不 正 で あ っ た 。 こ れ ら の フ ィ ー ル ド は 両 方 と も 0 よ り 大 き く な け れ ば な ら な い 。 プ ロ セ ス が 特 権 を 持 た な い (CAP_SYS_RESOURCE ケ ー パ ビ リ テ ィ を 持 た な い ) 場 合 、 attr−>mq_maxmsgattr−>mq_msgsize は 、 そ れ ぞ れ 上 限 msg_maxmsgsize_max 以 下 で な け れ ば な ら な い 。 ま た 、 特 権 プ ロ セ ス の 場 合 で も 、 attr−>mq_maxmsgHARD_MAX 上 限 を 超 え る こ と は で き な い 。 (こ れ ら の 上 限 に 関 す る 詳 細 は mq_overview(7) を 参 照 。 )

EMFILE

そ の プ ロ セ ス が オ ー プ ン し て い る フ ァ イ ル と メ ッ セ ー ジ キ ュ ー の 数 が プ ロ セ ス 毎 の 上 限 に 達 し て い る 。

ENAMETOOLONG

name が 長 過 ぎ る 。

ENFILE シ ス テ ム 全 体 で オ ー プ ン し て い る フ ァ イ ル と メ ッ セ ー ジ キ ュ ー の 合 計 数 が シ ス テ ム 上 限 に 達 し て い る 。

ENOENT

O_CREAT フ ラ グ が oflag に 指 定 さ れ な か っ た が 、 指 定 さ れ た 名 前 name を 持 つ キ ュ ー が 存 在 し な い 。

ENOENT

name が "/" だ け で 、 そ の 後 ろ に 他 の 文 字 が 続 い て い な か っ た 。

ENOMEM

十 分 な メ モ リ ー が な い 。

ENOSPC 新 し い メ ッ セ ー ジ キ ュ ー を 作 成 す る の に 十 分 な 空 間 が な い 。 こ の エ ラ ー は お そ ら く

queues_max 上 限 に 抵 触 し た た め 起 こ っ た の だ ろ う 。 mq_overview(7) を 参 照 。

属 性

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

準 拠

POSIX.1−2001.

バ グ

2.6.14 よ り 前 の カ ー ネ ル に は 、 プ ロ セ ス の umask が mode で 指 定 さ れ た 許 可 設 定 に 適 用 さ れ な か っ た 。

関 連 項 目

mq_close(3), mq_getattr(3), mq_notify(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/ に 書 か れ て い る 。