\fB int \fP\fImsgflg\fP\fB);\fP
.fi
.SH 説明
-ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83« \fBmsgsnd\fP() ã\81¨ \fBmsgrcv\fP() ã\81¯ã\81\9dã\82\8cã\81\9eã\82\8cã\80\81 System\ V ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81¸ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81®é\80\81ä¿¡ã\81¨ã\80\81
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81®å\8f\97ä¿¡ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bã\80\82å\91¼ã\81³å\87ºã\81\97å\85\83ã\83\97ã\83ã\82»ã\82¹ã\81¯ã\80\81 ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92é\80\81ä¿¡ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81«å¯¾ã\81\99ã\82\8bæ\9b¸ã\81\8dè¾¼ã\81¿è¨±å\8f¯ã\82\92ã\80\81
+システムコール \fBmsgsnd\fP() と \fBmsgrcv\fP() はそれぞれ、 System\ V メッセージキューへのメッセージの送信と、
+メッセージの受信に使用される。呼び出し元プロセスは、 メッセージを送信するためにはメッセージキューに対する書き込み許可を、
メッセージを受信するためには読み出し許可を持っていなければならない。
.PP
呼び出し元プロセスは以下に示す構造体を用意し、この構造体への ポインタを \fImsgp\fP 引き数として渡す。
この値は、メッセージを受信するプロセスでメッセージを選択するために 使用される (下記の \fBmsgrcv\fP() の説明を参照のこと)。
.SS msgsnd()
\fBmsgsnd\fP() システムコールは \fImsgp\fP 引き数で指定されたメッセージのコピーを \fImsqid\fP
-ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fè\98å\88¥å\90ã\82\92æ\8c\81ã\81¤ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81¸è¿½å\8a ã\81\99ã\82\8bã\80\82
+で指定された識別子を持つメッセージキューへ追加する。
.PP
-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:
+キューに十分な空き容量がある場合、 \fBmsgsnd\fP() は直ちに成功する。 キューの容量は、メッセージキューのデータ構造体の
+\fImsg_qbytes\fP フィールドで制御される。 キュー作成時にこのフィールドは \fBMSGMNB\fP に初期化されるが、この制限は
+\fBmsgctl\fP(2) を使って変更できる。 次のいずれかの条件が成立する場合に、メッセージキューは一杯と判断される。
.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).
+新しいメッセージをそのキューに追加すると、 そのキューの全バイト数がキューの最大サイズ (\fImsg_qbytes\fP フィールド)
+を超過してしまう場合。
.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.
+そのキューにもう一つメッセージを追加すると、 そのキューが全メッセージ数がキューの最大サイズ (\fImsg_qbytes\fP フィールド)
+を超過してしまう場合。 このチェックは、無限個の長さ 0 のメッセージをそのキューに追加するのを防ぐために必要である。 長さ 0
+のメッセージはデータを含まないが、 (ロックされた) カーネルメモリを消費するからである。
.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() は停止 (block) する。
+\fImsgflg\fP に \fBIPC_NOWAIT\fP が指定された場合、 \fBmsgsnd\fP() はエラー \fBEAGAIN\fP で失敗する。
停止している \fBmsgsnd\fP() は以下の場合にも失敗する。
.IP * 2
は、たとえシグナルハンドラの設定時に \fBSA_RESTART\fP を指定していたとしても、シグナルハンドラによって割り込まれた後で
自動的に再スタートすることは決してない。)
.PP
-æ£å¸¸ã\81«çµ\82äº\86ã\81\97ã\81\9få ´å\90\88ã\80\81ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81®ã\83\87ã\83¼ã\82¿æ§\8bé\80 ä½\93ã\81¯ä»¥ä¸\8bã\81®ã\82\88ã\81\86ã\81« æ\9b´æ\96°ã\81\95ã\82\8cã\82\8b:
+正常に終了した場合、メッセージキューのデータ構造体は以下のように 更新される:
.IP
\fImsg_lspid\fP には呼び出し元プロセスのプロセス ID が設定される。
.IP
.IP * 2
要求している型のメッセージがキューへ入れられた。
.IP *
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81\8cã\82·ã\82¹ã\83\86ã\83 ã\81\8bã\82\89å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\80\82 ã\81\93ã\81®å ´å\90\88ã\80\81ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯å¤±æ\95\97ã\81\97ã\80\81 \fIerrno\fP ã\81« \fBEIDRM\fP ã\81\8cè¨å®\9aã\81\95ã\82\8cã\82\8bã\80\82
+メッセージキューがシステムから削除された。 この場合、システムコールは失敗し、 \fIerrno\fP に \fBEIDRM\fP が設定される。
.IP *
呼び出し元プロセスがシグナルを捕獲した。 この場合、システムコールは失敗し、 \fIerrno\fP に \fBEINTR\fP が設定される。
(\fBmsgrcv\fP() は、たとえシグナルハンドラの設定時に \fBSA_RESTART\fP
を指定していたとしても、シグナルハンドラによって割り込まれた後で 自動的に再スタートすることは決してない。)
.PP
-æ£å¸¸ã\81«çµ\82äº\86ã\81\97ã\81\9få ´å\90\88ã\80\81ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81®ã\83\87ã\83¼ã\82¿æ§\8bé\80 ä½\93ã\81¯ä»¥ä¸\8bã\81®ã\82\88ã\81\86ã\81« æ\9b´æ\96°ã\81\95ã\82\8cã\82\8b:
+正常に終了した場合、メッセージキューのデータ構造体は以下のように 更新される:
.IP
\fImsg_lrpid\fP には呼び出し元プロセスのプロセス ID が設定される。
.IP
\fBmsgsnd\fP() が失敗した場合、 \fBerrno\fP に以下の値のいずれかが設定される:
.TP
\fBEACCES\fP
-å\91¼ã\81³å\87ºã\81\97å\85\83ã\83\97ã\83ã\82»ã\82¹ã\81«ã\81¯ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81«å¯¾ã\81\99ã\82\8bæ\9b¸ã\81\8dè¾¼ã\81¿è¨±å\8f¯ã\81\8cã\81ªã\81\8fã\80\81 \fBCAP_IPC_OWNER\fP ã\82±ã\83¼ã\83\91ã\83\93ã\83ªã\83\86ã\82£ã\82\82ã\81ªã\81\84ã\80\82
+呼び出し元プロセスにはメッセージキューに対する書き込み許可がなく、 \fBCAP_IPC_OWNER\fP ケーパビリティもない。
.TP
\fBEAGAIN\fP
\fImsg_qbytes\fP がキューの制限を超えていたため、メッセージを送ることができず、かつ \fImsgflg\fP に \fBIPC_NOWAIT\fP
\fImsgp\fP が指しているアドレスがアクセス可能でない。
.TP
\fBEIDRM\fP
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81\8cå\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\80\82
+メッセージキューが削除された。
.TP
\fBEINTR\fP
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81\8cè¦\81æ±\82ã\81\97ã\81\9fæ\9d¡ä»¶ã\82\92æº\80ã\81\9fã\81\99ã\81¾ã\81§å\81\9cæ¢ã\81\97ã\81¦ã\81\84ã\82\8bæ\99\82ã\81«ã\80\81 ã\83\97ã\83ã\82»ã\82¹ã\81\8cã\82·ã\82°ã\83\8aã\83«ã\82\92æ\8d\95ç\8d²ã\81\97ã\81\9fã\80\82
+メッセージキューが要求した条件を満たすまで停止している時に、 プロセスがシグナルを捕獲した。
.TP
\fBEINVAL\fP
\fImsqid\fP が不適切な値であるか、 \fImtype\fP が正の値でないか、 \fImsgsz\fP が不適切な値 (0 以下か、システムで決まる値
メッセージのテキストの長さが \fImsgsz\fP よりも大きく、 \fImsgflg\fP に \fBMSG_NOERROR\fP が設定されていなかった。
.TP
\fBEACCES\fP
-å\91¼ã\81³å\87ºã\81\97å\85\83ã\83\97ã\83ã\82»ã\82¹ã\81«ã\81¯ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81«å¯¾ã\81\99ã\82\8bèªã\81¿è¾¼ã\81¿è¨±å\8f¯ã\81\8cã\81ªã\81\8fã\80\81 \fBCAP_IPC_OWNER\fP ã\82±ã\83¼ã\83\91ã\83\93ã\83ªã\83\86ã\82£ã\82\82ã\81ªã\81\84ã\80\82
+呼び出し元プロセスにはメッセージキューに対する読み込み許可がなく、 \fBCAP_IPC_OWNER\fP ケーパビリティもない。
.TP
\fBEAGAIN\fP
キューにはメッセージがなく、 \fImsgflg\fP に \fBIPC_NOWAIT\fP が指定された。
\fImsgp\fP が指しているアドレスがアクセス可能でない。
.TP
\fBEIDRM\fP
-ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92å\8f\97ä¿¡ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\83\97ã\83ã\82»ã\82¹ã\81\8cå\81\9cæ¢ã\81\97ã\81¦ã\81\84ã\82\8bé\96\93ã\81«ã\80\81 ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81\8cå\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\80\82
+メッセージを受信するためにプロセスが停止している間に、 メッセージキューが削除された。
.TP
\fBEINTR\fP
メッセージを受けるためにプロセスが停止している間に、 プロセスがシグナルを捕獲した。 \fBsignal\fP(7) 参照。
\fImsgflg\fP に \fBMSG_COPY\fP と \fBMSG_EXCEPT\fP の両方が指定された。
.TP
\fBENOMSG\fP
-\fImsgflg\fP ã\81« \fBIPC_NOWAIT\fP ã\81\8cè¨å®\9aã\81\95ã\82\8cã\81¦ã\81\8aã\82\8aã\80\81 ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\83»ã\82ã\83¥ã\83¼ã\81«è¦\81æ±\82ã\81\95ã\82\8cã\81\9få\9e\8bã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81\8cå\98å\9c¨ã\81\97ã\81ªã\81\8bã\81£ã\81\9fã\80\82
+\fImsgflg\fP に \fBIPC_NOWAIT\fP が設定されており、 メッセージキューに要求された型のメッセージが存在しなかった。
.TP
\fBENOMSG\fP
\fBIPC_NOWAIT\fP と \fBMSG_COPY\fP が \fImsgflg\fP に指定されたが、 キューには \fImsgtyp\fP
経由で読み出したり変更したりできる)。
.TP
\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.
+バイト単位でのメッセージキューのデフォルトの最大サイズ : 16384 バイト。 (Linux では、この制限値は
+\fI/proc/sys/kernel/msgmnb\fP 経由で読み出したり変更したりできる)。 特権プロセス (Linux ではケーパビリティ
+\fBCAP_SYS_RESOURCE\fP を持ったプロセス) は \fBmsgctl\fP(2) システムコールでメッセージキューのサイズを
+\fBMSGMNB\fP よりも大きい値に増やすことができる。
.PP
-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).
+現在の実装では、システム全体のメッセージ・ヘッダーの上限数 (\fBMSGTQL\fP) と、システム全体のメッセージ・プールの最大バイト数
+(\fBMSGPOOL\fP) に関して実装依存の制限はない。
.SH バグ
.\" FIXME http://marc.info/?l=linux-kernel&m=139048542803605&w=2
.\" commit 4f87dac386cc43d5525da7a939d4b4e7edbea22c