OSDN Git Service

Update release for LDP 3.67
[linuxjm/LDP_man-pages.git] / release / man2 / msgop.2
index 53ce960..8236597 100644 (file)
@@ -53,7 +53,7 @@
 .\" Updated 2008-08-09, Akihiro MOTOKI, LDP v3.05
 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH MSGOP 2 2012\-05\-31 Linux "Linux Programmer's Manual"
+.TH MSGOP 2 2014\-05\-16 Linux "Linux Programmer's Manual"
 .SH 名前
 msgrcv, msgsnd \- System V メッセージキュー操作
 .SH 書式
@@ -68,7 +68,7 @@ msgrcv, msgsnd \- System V メッセージキュー操作
 \fB               int \fP\fImsgflg\fP\fB);\fP
 .fi
 .SH 説明
-システムコール \fBmsgsnd\fP()  と \fBmsgrcv\fP()  はそれぞれ、 System V メッセージ・キューへのメッセージの送信と、
+システムコール \fBmsgsnd\fP()  と \fBmsgrcv\fP()  はそれぞれ、 System\ V メッセージ・キューへのメッセージの送信と、
 メッセージの受信に使用される。呼び出し元プロセスは、 メッセージを送信するためにはメッセージ・キューに対する書き込み許可を、
 メッセージを受信するためには読み出し許可を持っていなければならない。
 .PP
@@ -90,11 +90,26 @@ struct msgbuf {
 \fBmsgsnd\fP()  システムコールは \fImsgp\fP 引き数で指定されたメッセージのコピーを \fImsqid\fP
 で指定された識別子を持つメッセージ・キューへ追加する。
 .PP
-キューに十分な空き容量がある場合、 \fBmsgsnd\fP()  は直ちに成功する。 (キューの容量は、メッセージ・キューのデータ構造体の
-\fImsg_qbytes\fP フィールドで定義される。 キュー作成時にこのフィールドは \fBMSGMNB\fP に初期化されるが、この制限は
-\fBmsgctl\fP(2)  を使って変更できる。)  キューに十分な空き容量がない場合、 デフォルトでは \fBmsgsnd\fP()
-は空き容量ができるまで停止 (block) する。 \fImsgflg\fP に \fBIPC_NOWAIT\fP が指定された場合は、エラー \fBEAGAIN\fP
-で失敗する。
+If sufficient space is available in the queue, \fBmsgsnd\fP()  succeeds
+immediately.  The queue capacity is governed by the \fImsg_qbytes\fP field in
+the associated data structure for the message queue.  During queue creation
+this field is initialized to \fBMSGMNB\fP bytes, but this limit can be modified
+using \fBmsgctl\fP(2).  A message queue is considered to be full if either of
+the following conditions is true:
+.IP * 2
+Adding a new message to the queue would cause the total number of bytes in
+the queue to exceed the queue's maximum size (the \fImsg_qbytes\fP field).
+.IP *
+Adding another message to the queue would cause the total number of messages
+in the queue to exceed the queue's maximum size (the \fImsg_qbytes\fP field).
+This check is necessary to prevent an unlimited number of zero\-length
+messages being placed on the queue.  Although such messages contain no data,
+they nevertheless consume (locked) kernel memory.
+.PP
+If insufficient space is available in the queue, then the default behavior
+of \fBmsgsnd\fP()  is to block until space becomes available.  If \fBIPC_NOWAIT\fP
+is specified in \fImsgflg\fP, then the call instead fails with the error
+\fBEAGAIN\fP.
 
 停止している \fBmsgsnd\fP()  は以下の場合にも失敗する。
 .IP * 2
@@ -121,7 +136,8 @@ struct msgbuf {
 (切り捨てられた部分は失われる)。 \fBMSG_NOERROR\fP が指定されていなければ、メッセージはキューから削除されず、 システムコールは \-1
 を返して失敗し、 \fIerrno\fP に \fBE2BIG\fP が設定される。
 .PP
-\fImsgtyp\fP 引き数には要求するメッセージの型を指定する。 型は以下のように指定する:
+\fBMSG_COPY\fP が \fImsgflg\fP に指定されていない場合 (下記参照)、 \fImsgtyp\fP 引き数には要求するメッセージの型を指定する。
+型は以下のように指定する:
 .IP * 2
 \fImsgtyp\fP が 0 ならば、キューの最初にあるメッセージが読み込まれる。
 .IP *
@@ -136,6 +152,18 @@ struct msgbuf {
 \fBIPC_NOWAIT\fP
 キューに要求された型のメッセージがない場合には直ちに返る。 システムコールは失敗し、 \fIerrno\fP には \fBENOMSG\fP が設定される。
 .TP 
+\fBMSG_COPY\fP (Linux 3.8 以降)
+.\" commit 4a674f34ba04a002244edaf891b5da7fc1473ae8
+キューの中で \fImsgtyp\fP で指定した位置にあるメッセージのコピーを、キューを変更せずに (非破壊的に) 取り出す (メッセージの位置は 0
+から順番に番号が割り当てられる)。
+
+このフラグは \fBIPC_NOWAIT\fP と組み合わせて指定しなければならない。 その結果、指定した位置にメッセージがなかった場合、呼び出しはエラー
+\fBENOMSG\fP ですぐに失敗する。 \fBMSG_COPY\fP と \fBMSG_EXCEPT\fP は \fImsgtyp\fP
+の意味を相容れない方法で使用するため、この二つのフラグの両方を \fImsgtyp\fP に指定することはできない。
+
+\fBMSG_COPY\fP フラグは、 カーネルのチェックポイント復元 (checkpoint\-restore) 機能の実装のために追加された。
+このフラグはカーネルが \fBCONFIG_CHECKPOINT_RESTORE\fP オプションを有効にして作成された場合にのみ利用できる。
+.TP 
 \fBMSG_EXCEPT\fP
 0 より大きな \fImsgtyp\fP と一緒に使用して、 \fImsgtyp\fP 以外のキューの最初のメッセージを読み込む。
 .TP 
@@ -212,10 +240,28 @@ struct msgbuf {
 \fBEINVAL\fP
 \fImsgqid\fP が不正か、 \fImsgsz\fP が 0 より小さい。
 .TP 
+\fBEINVAL\fP (Linux 3.14 以降)
+\fImsgflg\fP に \fBMSG_COPY\fP が指定されたが、 \fBIPC_NOWAIT\fP が指定されていない。
+.TP 
+\fBEINVAL\fP (Linux 3.14 以降)
+\fImsgflg\fP に \fBMSG_COPY\fP と \fBMSG_EXCEPT\fP の両方が指定された。
+.TP 
 \fBENOMSG\fP
 \fImsgflg\fP に \fBIPC_NOWAIT\fP が設定されており、 メッセージ・キューに要求された型のメッセージが存在しなかった。
+.TP 
+\fBENOMSG\fP
+\fBIPC_NOWAIT\fP と \fBMSG_COPY\fP が \fImsgflg\fP に指定されたが、 キューには \fImsgtyp\fP
+未満のメッセージしか入っていなかった。
+.TP 
+\fBENOSYS\fP (Linux 3.8 以降)
+\fImsgflg\fP に \fIMSG_COPY\fP が指定されたが、カーネルが \fBCONFIG_CHECKPOINT_RESTORE\fP
+なしで作成されている。
 .SH 準拠
 SVr4, POSIX.1\-2001.
+
+.\" MSG_COPY since glibc 2.18
+フラグ \fBMSG_EXCEPT\fP と \fBMSG_COPY\fP は Linux 固有である。 これらの定義を得るには、機能検査マクロ
+\fB_GNU_SOURCE\fP を定義する。
 .SH 注意
 .\" Like Linux, the FreeBSD man pages still document
 .\" the inclusion of these header files.
@@ -223,8 +269,8 @@ Linux や POSIX の全てのバージョンでは、 \fI<sys/types.h>\fP と \fI
 のインクルードは必要ない。しかしながら、いくつかの古い実装ではこれらのヘッダファイルのインクルードが必要であり、 SVID
 でもこれらのインクルードをするように記載されている。このような古いシステムへの移植性を意図したアプリケーションではこれらのファイルをインクルードする必要があるかもしれない。
 
-\fImsgp\fP 引き数は、 libc4, libc5, glibc 2.0, glibc 2.1 では \fIstruct msgbuf *\fP
-と宣言されている。glibc 2.2 以降では、 SUSv2 と SUSv3 の要求通り、\fIvoid *\fP と宣言されている。
+\fImsgp\fP 引き数は、 libc4, libc5, glibc 2.0, glibc 2.1 では \fIstruct msgbuf\ *\fP
+と宣言されている。glibc 2.2 以降では、 SUSv2 と SUSv3 の要求通り、\fIvoid\ *\fP と宣言されている。
 
 以下は \fBmsgsnd\fP システムコールに影響するシステム制限である:
 .TP 
@@ -233,16 +279,33 @@ Linux や POSIX の全てのバージョンでは、 \fI<sys/types.h>\fP と \fI
 経由で読み出したり変更したりできる)。
 .TP 
 \fBMSGMNB\fP
-バイト単位でのメッセージ・キューのデフォルトの最大サイズ : 16384 バイト。 (Linux では、この制限値は
-\fI/proc/sys/kernel/msgmnb\fP 経由で読み出したり変更したりできる)。 スーパーユーザーは \fBmsgctl\fP(2)
-システムコールでメッセージ・キューのサイズを \fBMSGMNB\fP よりも大きい値に増やすことができる。
+Default maximum size in bytes of a message queue: 16384 bytes (on Linux,
+this limit can be read and modified via \fI/proc/sys/kernel/msgmnb\fP).  A
+privileged process (Linux: a process with the \fBCAP_SYS_RESOURCE\fP
+capability)  can increase the size of a message queue beyond \fBMSGMNB\fP by a
+\fBmsgctl\fP(2)  system call.
 .PP
-現在の実装では、システム全体のメッセージ・ヘッダーの最大数 (\fBMSGTQL\fP)  と、システム全体のメッセージ・プールの最大バイト数
-(\fBMSGPOOL\fP)  に関して実装依存の制限はない。
+The implementation has no intrinsic system\-wide limits on the number of
+message headers (\fBMSGTQL\fP)  and the number of bytes in the message pool
+(\fBMSGPOOL\fP).
+.SH バグ
+.\" FIXME http://marc.info/?l=linux-kernel&m=139048542803605&w=2
+.\" commit 4f87dac386cc43d5525da7a939d4b4e7edbea22c
+Linux 3.13 以前では、 \fBmsgrcv\fP() の呼び出しで \fBMSG_COPY\fP フラグは指定されたが \fBIPC_NOWAIT\fP
+は指定されず、かつメッセージキューに \fImsgtyp\fP 未満のメッセージしかない場合に、 \fBmsgrcv\fP()
+の呼び出しはキューに次のメッセージが書き込まれるまで停止していた。 新しいメッセージが書き込まれた時点で、 そのメッセージが指定された位置
+\fImsgtyp\fP かどうかに\fI関わらず\fP、 \fBmsgrcv\fP() の呼び出しは新たに書き込まれたメッセージのコピーを返していた。 このバグは
+Linux 3.14で修正された。
+
+.\" FIXME http://marc.info/?l=linux-kernel&m=139048542803605&w=2
+.\" commit 4f87dac386cc43d5525da7a939d4b4e7edbea22c
+\fImsg_copy\fP に \fBMSG_COPY\fP と \fBMSG_EXCEPT\fP の両方を指定するのは、論理的なエラーである
+(なぜならこれらのフラグは \fImsgtyp\fP を別の意味で解釈するからである)。 Linux 3.13 以前では、\fBmsgrcv\fP()
+がこのエラーを検出しなかった。 このバグは Linux 3.14 で修正された。
 .SH 関連項目
 \fBmsgctl\fP(2), \fBmsgget\fP(2), \fBcapabilities\fP(7), \fBmq_overview\fP(7),
 \fBsvipc\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。