.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH MQ_OVERVIEW 7 2009\-09\-27 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI all rights reserved.
+.\" Translated 2006-03-13, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2006-07-20, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.36
+.\" Updated 2009-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.19
+.\" Updated 2010-04-11, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.24
+.\"
+.TH MQ_OVERVIEW 7 2014\-09\-21 Linux "Linux Programmer's Manual"
.SH 名前
mq_overview \- POSIX メッセージキューの概要
.SH 説明
メッセージキューの作成とオープンは \fBmq_open\fP(3) を使って行う。この関数は \fIメッセージキュー記述子 (message queue
descriptor)\fP (\fImqd_t\fP) を返す。これ以降のコールでは、オープンされたメッセージキューは \fIメッセージキュー記述子\fP
を使って参照される。 各メッセージキューは \fI/somename\fP の形の名前で区別することができる。 その名前は、最大で \fBNAME_MAX\fP
-(すなわち 255) 文字の NULL 終端された文字列で、 スラッシュで始まり、スラッシュ以外の文字が 1 文字以上続く形式である。
+(すなわち 255) 文字のヌル終端された文字列で、 スラッシュで始まり、スラッシュ以外の文字が 1 文字以上続く形式である。
\fBmq_open\fP(3) に同じ名前を渡すことで、2つのプロセスで同一のキューを 操作することができる。
メッセージのキューへの送受信は \fBmq_send\fP(3) と \fBmq_receive\fP(3)
これらの記述子は、親プロセスの対応する記述子と同じオープンメッセージキュー 記述を参照している。親プロセスと子プロセスの対応する記述子は、フラグ
(\fImq_flags\fP) を共有する。なぜなら、フラグはオープンメッセージキュー記述に 関連付けられているからである。
-Each message has an associated \fIpriority\fP, and messages are always
-delivered to the receiving process highest priority first. Message
-priorities range from 0 (low) to \fIsysconf(_SC_MQ_PRIO_MAX)\ \-\ 1\fP (high).
-On Linux, \fIsysconf(_SC_MQ_PRIO_MAX)\fP returns 32768, but POSIX.1\-2001
-requires only that an implementation support at least priorities in the
-range 0 to 31; some implementations provide only this range.
+各メッセージにはそれぞれ \fI優先度 (priority)\fP があり、メッセージの受信プロセスへの配送は常に 優先度の高いメッセージから順に行われる。
+メッセージの優先度は 0 (低優先) から \fIsysconf(_SC_MQ_PRIO_MAX)\ \-\ 1\fP (高優先) の値を持つ。 Linux
+では、 \fIsysconf(_SC_MQ_PRIO_MAX)\fP は 32768 を返すが、 POSIX.1\-2001 で要求されているのは最低限 0
+から 31 までの優先度を実装することだけであり、実装によってはこの範囲の優先度しかサポートされていない。
.PP
この節の残りでは、POSIX メッセージキューの Linux の実装の詳細 について説明する。
.SS ライブラリインタフェースとシステムコール
-ほとんどの場合、上記の \fBmq_*()\fP ライブラリインタフェースは、同じ名前の下位層のシステムコールを
+ほとんどの場合、上記の \fBmq_*\fP() ライブラリインタフェースは、同じ名前の下位層のシステムコールを
使って実装されている。この枠組みにあてはまらないものを 以下の表に示す。
-.in +4n
+.RS
.TS
lB lB
l l.
mq_timedsend(3) mq_timedsend(2)
mq_unlink(3) mq_unlink(2)
.TE
-.in
+.RE
.SS バージョン
Linux では POSIX メッセージキューはカーネル 2.6.6 以降でサポートされている。 glibc ではバージョン 2.3.4
以降でサポートされている。
POSIX メッセージキュー API を使用したプログラムは \fIcc \-lrt\fP でコンパイルし、リアルタイムライブラリ \fIlibrt\fP
とリンクしなければならない。
.SS "/proc インタフェース"
-以下のインタフェースを使って、POSIX メッセージキューが消費するカーネル メモリの量を制限することができる。
+以下のインタフェースを使って、 POSIX メッセージキューが消費するカーネル メモリの量を制限したり、
+新規のメッセージキューのデフォルト属性を設定したりすることができる。
+.TP
+\fI/proc/sys/fs/mqueue/msg_default\fP (Linux 3.5 以降)
+このファイルは、\fIattr\fP に NULL を指定して \fBmq_open\fP(3) を呼び出してキューが作成された際に、 その新規キューの
+\fImq_maxmsg\fP 設定に使用される値を定めている。 このファイルのデフォルト値は 10 である。 最小値と最大値は
+\fI/proc/sys/fs/mqueue/msg_max\fP と同様である。 新規キューのデフォルトの \fImq_maxmsg\fP 値は
+\fImsg_default\fP と \fImsg_max\fP の小さい方となる。 Linux 2.6.28 より前は、デフォルトの \fImq_maxmsg\fP
+は 10 であった。 Linux 2.6.28 から Linux 3.4 までは、 デフォルト値は \fImsg_max\fP 上限で規定される値であった。
.TP
\fI/proc/sys/fs/mqueue/msg_max\fP
このファイルを使って、一つのキューに入れられるメッセージの最大数の 上限値を参照したり変更したりできる。この値は、 \fBmq_open\fP(3) に渡す
\fIattr\->mq_maxmsg\fP 引き数に対する上限値として機能する。 \fImsg_max\fP のデフォルト値は 10 で、 最小値は 1
-(2.6.28 より前のカーネルでは 10) である。 上限は「埋め込みの固定値」 (\fBHARD_MAX\fP) で \fI(131072\ /\ sizeof(void\ *))\fP (Linux/86 では 32768) である。 この上限は特権プロセス (\fBCAP_SYS_RESOURCE\fP)
-では無視されるが、埋め込みの固定値による上限は どんな場合にでも適用される。
+(2.6.28 より前のカーネルでは 10) である。 \fImsg_max\fP に指定できる上限値は \fBHARD_MSGMAX\fP である。
+\fImsg_max\fP 上限は特権プロセス (\fBCAP_SYS_RESOURCE\fP) では無視されるが、上限値 \fBHARD_MSGMAX\fP
+はどんな場合にでも適用される。
+
+\fBHARD_MSGMAX\fP の定義はカーネルのバージョンにより異なる。
+.RS
+.IP * 3
+Linux 2.6.32 以前: \fI131072\ /\ sizeof(void\ *)\fP
+.IP *
+Linux 2.6.33 以上 3.4 以下: \fI(32768\ *\ sizeof(void\ *) / 4)\fP
+.IP *
+.\" commit 5b5c4d1a1440e94994c73dddbad7be0676cd8b9a
+Linux 3.5 以降: 65,536
+.RE
+.TP
+\fI/proc/sys/fs/mqueue/msgsize_default\fP (Linux 3.5 以降)
+このファイルは、\fIattr\fP に NULL を指定して \fBmq_open\fP(3) を呼び出してキューが作成された際に、 その新規キューの
+\fImq_msgsize\fP 設定に使用される値を定めている。 このファイルのデフォルト値は 8192 バイトである。 最小値と最大値は
+\fI/proc/sys/fs/mqueue/msgsize_max\fP と同様である。
+\fImsgsize_default\fP が \fImsgsize_max\fP より大きい場合は、 新規キューのデフォルトの \fImq_msgsize\fP 値は
+\fImsgsize_max\fP 上限となる。 Linux 2.6.28 より前は、デフォルトの \fImq_msgsize\fP は 8192 であった。
+Linux 2.6.28 から Linux 3.4 までは、 デフォルト値は \fImsgsize_max\fP 上限で規定される値であった。
.TP
\fI/proc/sys/fs/mqueue/msgsize_max\fP
-このファイルを使って、メッセージの最大サイズの上限値を 参照したり変更したりできる。 この値は、 \fBmq_open\fP(3) に渡す
-\fIattr\->mq_msgsize\fP 引き数に対する上限値として機能する。 \fImsgsize_max \fP のデフォルト値は 8192
-バイトで、 最小値は 128 (2.6.28 より前のカーネルでは 8192) である。 \fImsgsize_max\fP の上限は 1,048,576
-である (2.6.28 より前のカーネルでは、上限は \fBINT_MAX\fP (Linux/86 では 2,147,483,647) であった)。
-この上限は特権プロセス (\fBCAP_SYS_RESOURCE\fP) では無視される。
+このファイルを使って、メッセージの最大サイズの上限値を参照したり変更したりできる。 この値は、 \fBmq_open\fP(3) に渡す
+\fIattr\->mq_msgsize\fP 引き数に対する上限値として機能する。 \fImsgsize_max\fP のデフォルト値は 8192
+バイトで、 最小値は 128 (2.6.28 より前のカーネルでは 8192) である。 \fImsgsize_max\fP
+の上限はカーネルのバージョンにより異なる。
+.RS
+.IP * 3
+Linux 2.6.28 より前のバージョンでは、上限は \fBINT_MAX\fP である。
+.IP *
+Linux 2.6.28 から 3.4 では、上限は 1,048,576 である。
+.IP *
+Linux 3.5 以降では、上限は 16,777,216 (\fBHARD_MSGSIZEMAX\fP) である。
+.RE
+.IP
+\fImsgsize_max\fP 上限は特権プロセス (\fBCAP_SYS_RESOURCE\fP) では無視されるが、 Linux 3.5
+以降では特権プロセスにも \fBHARD_MSGSIZEMAX\fP という上限が適用される。
.TP
\fI/proc/sys/fs/mqueue/queues_max\fP
-このファイルを使って、作成することができるメッセージキューの数に 対するシステム全体での制限を参照したり変更したりできる。
-一度この上限に達すると、新しいメッセージキューを作成できるのは 特権プロセス (\fBCAP_SYS_RESOURCE\fP) だけとなる。
-\fIqueues_max \fP のデフォルト値は 256 であり、 0 から INT_MAX の範囲の任意の値に変更することができる。
+このファイルを使って、作成可能なメッセージキュー数のシステム全体での制限を参照したり変更したりできる。 \fIqueues_max\fP のデフォルト値は
+256 である。 \fIqueues_max\fP に課される上限値はない。 特権プロセス (\fBCAP_SYS_RESOURCE\fP)
+はこの上限値を超えてメッセージキューを作成できる。
.SS リソース制限
リソース上限 \fBRLIMIT_MSGQUEUE\fP は、プロセスの実 UID に対応する全メッセージキューが消費する
メモリ空間の量に対して上限を設定する。 \fBgetrlimit\fP(2) を参照。
-.SS ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82ã\83¥ã\83¼ã\83»ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81®ã\83\9eã\82¦ã\83³ã\83\88
+.SS メッセージキューファイルシステムのマウント
Linux では、メッセージキューは仮想ファイルシステム内に作成される (他の実装でも同様の機能が提供されているものもあるが、
詳細は違っているだろう)。 以下のコマンドを使うことで (スーパーユーザは) このファイルシステムをマウントできる:
.in +4n
.in
マウントしたディレクトリのスティッキービット (sticky bit) は 自動的にオンとなる。
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82ã\83¥ã\83¼ã\83»ã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\81®ã\83\9eã\82¦ã\83³ã\83\88å¾\8cã\81¯ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\81«å¯¾ã\81\97ã\81¦ é\80\9a常使ã\81\86ã\82³ã\83\9eã\83³ã\83\89 (ä¾\8bã\81\88ã\81° \fBls\fP(1) ã\82\84 \fBrm\fP(1))
+メッセージキューファイルシステムのマウント後は、ファイルに対して 通常使うコマンド (例えば \fBls\fP(1) や \fBrm\fP(1))
を使って、システム上のメッセージキューを表示したり 操作したりできる。
ディレクトリ内の各ファイルの内容は 1行であり、 キューに関する情報が表示される。
.SS メッセージキュー記述子のポーリング
Linux では、メッセージキュー記述子は実際はファイル記述子 (file descriptor) であり、 \fBselect\fP(2),
\fBpoll\fP(2), \fBepoll\fP(7) を使って監視することができる。 この機能の移植性はない。
+.SS "IPC 名前空間"
+System V IPC オブジェクトと IPC 名前空間の相互の影響に関する議論は \fBnamespaces\fP(7) を参照。
.SH 準拠
POSIX.1\-2001.
.SH 注意
対応していない。
.SH 例
各種のメッセージキュー関数を使用した例が \fBmq_notify\fP(3) に記載されている。
+.SH バグ
+バージョン 3.5 以降 3.14 未満の Linux では、 \fIqueues_max\fP 上限を増やすことができる最大値として 1024
+(\fBHARD_QUEUESMAX\fP) という最大上限値がカーネルにより適用されていた。 この最大上限値は特権プロセスにも適用されていた。
+この最大上限値は Linux 3.14 で削除され、 パッチで安定版カーネル 3.5.x から 3.13.x からもこの最大上限値は削除された。
.SH 関連項目
\fBgetrlimit\fP(2), \fBmq_getsetattr\fP(2), \fBpoll\fP(2), \fBselect\fP(2),
\fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_notify\fP(3), \fBmq_open\fP(3),
-\fBmq_receive\fP(3), \fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBepoll\fP(7)
+\fBmq_receive\fP(3), \fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBepoll\fP(7),
+\fBnamespaces\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。