OSDN Git Service

(split) LDP: Update draft pages (with po4a --force)
[linuxjm/LDP_man-pages.git] / draft / man7 / mq_overview.7
1 .\" t
2 .\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .\"*******************************************************************
27 .\"
28 .\" This file was generated with po4a. Translate the source file.
29 .\"
30 .\"*******************************************************************
31 .TH MQ_OVERVIEW 7 2009\-09\-27 Linux "Linux Programmer's Manual"
32 .SH 名前
33 mq_overview \- POSIX メッセージキューの概要
34 .SH 説明
35 POSIX メッセージキューを使用すると、プロセス間で メッセージの形でのデータのやり取りを行うことができる。 この API は System V
36 メッセージキューの API (\fBmsgget\fP(2), \fBmsgsnd\fP(2), \fBmsgrcv\fP(2)  など)
37 とは異なるものだが、同様の機能を提供する。
38
39 メッセージキューの作成とオープンは \fBmq_open\fP(3)  を使って行う。この関数は \fIメッセージキュー記述子 (message queue
40 descriptor)\fP (\fImqd_t\fP)  を返す。これ以降のコールでは、オープンされたメッセージキューは \fIメッセージキュー記述子\fP
41 を使って参照される。 各メッセージキューは \fI/somename\fP の形の名前で区別することができる。 その名前は、最大で \fBNAME_MAX\fP
42 (すなわち 255) 文字の NULL 終端された文字列で、 スラッシュで始まり、スラッシュ以外の文字が 1 文字以上続く形式である。
43 \fBmq_open\fP(3)  に同じ名前を渡すことで、2つのプロセスで同一のキューを 操作することができる。
44
45 メッセージのキューへの送受信は \fBmq_send\fP(3)  と \fBmq_receive\fP(3)
46 を使って行う。プロセスがキューの使用を終えるときには、 \fBmq_close\fP(3)
47 を使ってキューをクローズする。キューがもはや不要となった場合には、 \fBmq_unlink\fP(3)  を使ってキューを削除できる。キューの属性は
48 \fBmq_getattr\fP(3)  で取得でき、 (制限はあるが)  \fBmq_setattr\fP(3)  で変更できる。 \fBmq_notify\fP(3)
49 を使うことで、空のキューへのメッセージ到着を非同期で 通知するように要求することもできる。
50
51 メッセージキュー記述子は \fIオープンメッセージキュー記述 (open message queue description)\fP への参照である
52 (\fBopen\fP(2)  も参照)。 \fBfork\fP(2)  実行後は、子プロセスは親プロセスのメッセージキュー記述子のコピーを継承する。
53 これらの記述子は、親プロセスの対応する記述子と同じオープンメッセージキュー 記述を参照している。親プロセスと子プロセスの対応する記述子は、フラグ
54 (\fImq_flags\fP)  を共有する。なぜなら、フラグはオープンメッセージキュー記述に 関連付けられているからである。
55
56 各メッセージにはそれぞれ \fI優先度 (priority)\fP があり、メッセージの受信プロセスへの配送は常に 優先度の高いメッセージから順に行われる。
57 メッセージの優先度は 0 (低優先) から \fIsysconf(_SC_MQ_PRIO_MAX)\ \-\ 1\fP (高優先) の値を持つ。 Linux
58 では、 \fIsysconf(_SC_MQ_PRIO_MAX)\fP は 32768 を返すが、 POSIX.1\-2001 で要求されているのは 0 から
59 31 までの優先度を 実装することだけであり、実装によってはこの範囲の優先度しか 対応していない。
60 .PP
61 この節の残りでは、POSIX メッセージキューの Linux の実装の詳細 について説明する。
62 .SS ライブラリインタフェースとシステムコール
63 ほとんどの場合、上記の \fBmq_*()\fP ライブラリインタフェースは、同じ名前の下位層のシステムコールを
64 使って実装されている。この枠組みにあてはまらないものを 以下の表に示す。
65 .in +4n
66 .TS
67 lB lB
68 l l.
69 Library interface       System call
70 mq_close(3)     close(2)
71 mq_getattr(3)   mq_getsetattr(2)
72 mq_notify(3)    mq_notify(2)
73 mq_open(3)      mq_open(2)
74 mq_receive(3)   mq_timedreceive(2)
75 mq_send(3)      mq_timedsend(2)
76 mq_setattr(3)   mq_getsetattr(2)
77 mq_timedreceive(3)      mq_timedreceive(2)
78 mq_timedsend(3) mq_timedsend(2)
79 mq_unlink(3)    mq_unlink(2)
80 .TE
81 .in
82 .SS バージョン
83 Linux では POSIX メッセージキューはカーネル 2.6.6 以降でサポートされている。 glibc ではバージョン 2.3.4
84 以降でサポートされている。
85 .SS カーネルの設定
86 POSIX メッセージキューのサポートは、カーネルの設定 (configuration)  オプション \fBCONFIG_POSIX_MQUEUE\fP
87 で設定可能である。このオプションはデフォルトでは有効である。
88 .SS 持続性
89 POSIX メッセージキューはカーネル内で保持される。 \fBmq_unlink\fP(3)  で削除されなければ、メッセージキューは
90 システムがシャットダウンされるまで存在し続ける。
91 .SS リンク
92 POSIX メッセージキュー API を使用したプログラムは \fIcc \-lrt\fP でコンパイルし、リアルタイムライブラリ \fIlibrt\fP
93 とリンクしなければならない。
94 .SS "/proc インタフェース"
95 以下のインタフェースを使って、POSIX メッセージキューが消費するカーネル メモリの量を制限することができる。
96 .TP 
97 \fI/proc/sys/fs/mqueue/msg_max\fP
98 このファイルを使って、一つのキューに入れられるメッセージの最大数の 上限値を参照したり変更したりできる。この値は、 \fBmq_open\fP(3)  に渡す
99 \fIattr\->mq_maxmsg\fP 引き数に対する上限値として機能する。 \fImsg_max\fP のデフォルト値は 10 で、 最小値は 1
100 (2.6.28 より前のカーネルでは 10) である。 上限は「埋め込みの固定値」 (\fBHARD_MAX\fP)  で \fI(131072\ /\ sizeof(void\ *))\fP (Linux/86 では 32768) である。 この上限は特権プロセス (\fBCAP_SYS_RESOURCE\fP)
101 では無視されるが、埋め込みの固定値による上限は どんな場合にでも適用される。
102 .TP 
103 \fI/proc/sys/fs/mqueue/msgsize_max\fP
104 このファイルを使って、メッセージの最大サイズの上限値を        参照したり変更したりできる。      この値は、         \fBmq_open\fP(3)        に渡す      
105 \fIattr\->mq_msgsize\fP 引き数に対する上限値として機能する。   \fImsgsize_max \fP のデフォルト値は 8192
106 バイトで、 最小値は 128 (2.6.28 より前のカーネルでは 8192) である。 \fImsgsize_max\fP の上限は 1,048,576
107 である (2.6.28 より前のカーネルでは、上限は \fBINT_MAX\fP (Linux/86 では 2,147,483,647) であった)。
108 この上限は特権プロセス        (\fBCAP_SYS_RESOURCE\fP)        では無視される。
109 .TP 
110 \fI/proc/sys/fs/mqueue/queues_max\fP
111 このファイルを使って、作成することができるメッセージキューの数に         対するシステム全体での制限を参照したり変更したりできる。   
112 一度この上限に達すると、新しいメッセージキューを作成できるのは    特権プロセス      (\fBCAP_SYS_RESOURCE\fP)        だけとなる。     
113 \fIqueues_max   \fP のデフォルト値は 256 であり、    0 から INT_MAX の範囲の任意の値に変更することができる。
114 .SS リソース制限
115 リソース上限 \fBRLIMIT_MSGQUEUE\fP は、プロセスの実 UID に対応する全メッセージキューが消費する
116 メモリ空間の量に対して上限を設定する。 \fBgetrlimit\fP(2)  を参照。
117 .SS メッセージキュー・ファイルシステムのマウント
118 Linux では、メッセージキューは仮想ファイルシステム内に作成される (他の実装でも同様の機能が提供されているものもあるが、
119 詳細は違っているだろう)。 以下のコマンドを使うことで (スーパーユーザは)  このファイルシステムをマウントできる:
120 .in +4n
121 .nf
122
123 #\fB mkdir /dev/mqueue\fP
124 #\fB mount \-t mqueue none /dev/mqueue\fP
125
126 .fi
127 .in
128 マウントしたディレクトリのスティッキービット (sticky bit) は 自動的にオンとなる。
129
130 メッセージキュー・ファイルシステムのマウント後は、ファイルに対して 通常使うコマンド (例えば \fBls\fP(1)  や \fBrm\fP(1))
131 を使って、システム上のメッセージキューを表示したり 操作したりできる。
132
133 ディレクトリ内の各ファイルの内容は 1行であり、 キューに関する情報が表示される。
134 .in +4n
135 .nf
136
137 $\fB cat /dev/mqueue/mymq\fP
138 QSIZE:129     NOTIFY:2    SIGNO:0    NOTIFY_PID:8260
139
140 .fi
141 .in
142 各フィールドの詳細は以下の通りである:
143 .TP 
144 \fBQSIZE\fP
145 キューに入っている全メッセージの合計バイト数。
146 .TP 
147 \fBNOTIFY_PID\fP
148 この値が 0 以外の場合、この値の PID を持つプロセスが \fBmq_notify\fP(3)
149 を使って、非同期のメッセージ通知を行うように設定したことを示す。 どのように通知が行われるかは、以下のフィールドにより決定される。
150 .TP 
151 \fBNOTIFY\fP
152 通知方法: 0 は \fBSIGEV_SIGNAL\fP; 1 は \fBSIGEV_NONE\fP; 2 は \fBSIGEV_THREAD\fP
153 .TP 
154 \fBSIGNO\fP
155 \fBSIGEV_SIGNAL\fP に使用されるシグナル番号。
156 .SS メッセージキュー記述子のポーリング
157 Linux では、メッセージキュー記述子は実際はファイル記述子 (file descriptor)  であり、 \fBselect\fP(2),
158 \fBpoll\fP(2), \fBepoll\fP(7)  を使って監視することができる。 この機能の移植性はない。
159 .SH 準拠
160 POSIX.1\-2001.
161 .SH 注意
162 System V メッセージキュー (\fBmsgget\fP(2), \fBmsgsnd\fP(2), \fBmsgrcv\fP(2)  など)
163 はプロセス間でメッセージをやり取りするための古い API である。 POSIX メッセージキューは System V メッセージキューよりもうまく
164 設計されたインタフェースを提供している。 一方で、POSIX メッセージキューは System V メッセージキューと比べると
165 利用できるシステムが少ない (特に、古いシステムでは少ない)。
166
167 現在のことろ (バージョン 2.6.26 時点)、 Linux は POSIX メッセージキューに対するアクセス制御リスト (ACL) に
168 対応していない。
169 .SH 例
170 各種のメッセージキュー関数を使用した例が \fBmq_notify\fP(3)  に記載されている。
171 .SH 関連項目
172 \fBgetrlimit\fP(2), \fBmq_getsetattr\fP(2), \fBpoll\fP(2), \fBselect\fP(2),
173 \fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_notify\fP(3), \fBmq_open\fP(3),
174 \fBmq_receive\fP(3), \fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBepoll\fP(7)
175 .SH この文書について
176 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
177 である。プロジェクトの説明とバグ報告に関する情報は
178 http://www.kernel.org/doc/man\-pages/ に書かれている。