.\" 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 2009\-09\-27 Linux "Linux Programmer's Manual"
+.TH MQ_OVERVIEW 7 2014\-09\-21 Linux "Linux Programmer's Manual"
.SH 名前
mq_overview \- POSIX メッセージキューの概要
.SH 説明
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 メッセージキュー記述子のポーリング
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.68 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。