doc/ja_JP.eucJP/man/man3/msgrcv.3
Kazuo Horikawa cb5d1a9147 Replace jpman project specific RCS keyword with $FreeBSD.
jpman project specific RCS keyword (jpman %Id) is obsolete,
after manual entries are stored in freefall CVS repository.
This old Id is useless and more worse it confuses users and bug reporters.
So, this old Id is removed.

Submitted by:jpman project <man-jp@jp.FreeBSD.org>
2001-05-14 01:10:24 +00:00

216 lines
5.5 KiB
Groff

.\" %NetBSD: msgrcv.2,v 1.1 1995/10/16 23:49:20 jtc Exp %
.\"
.\" Copyright (c) 1995 Frank van der Linden
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed for the NetBSD Project
.\" by Frank van der Linden
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\" %Id: msgrcv.3,v 1.5 1997/11/23 17:58:38 bde Exp %
.\"
.\"/
.\" $FreeBSD$
.Dd November 24, 1997
.Dt MSGRCV 3
.Os FreeBSD
.Sh 名称
.Nm msgrcv
.Nd メッセージキューからメッセージを受信
.Sh 書式
.Fd #include <sys/types.h>
.Fd #include <sys/ipc.h>
.Fd #include <sys/msg.h>
.Ft int
.Fn msgrcv "int msqid" "void *msgp" "size_t msgsz" "long msgtyp" "int msgflg"
.Sh 解説
.Fn msgrcv
関数は、
.Fa msqid
で指定したメッセージキューからメッセージを受信し、
.Fa msgp
が指す構造体に配置します。この構造体は、以下のメンバから
構成されている必要があります。
.Bd -literal
long mtype; /* メッセージタイプ */
char mtext[1]; /* メッセージ本体 */
.Ed
.Pp
.Va mtype
は 0 より大きい整数で、メッセージの選択に使用されます。
.Va mtext
はバイトの配列で、システム制限
.Pf ( Dv MSGMAX )
までのサイズです。
.Pp
.Fa msgtyp
の値には以下のような意味があります。
.Bl -bullet
.It
.Fa msgtyp
が 0 より大きい場合、タイプが
.Fa msgtyp
である最初のメッセージが受信されます。
.It
.Fa msgtyp
が 0 と等しい場合、キューの最初のメッセージが受信されます。
.It
.Fa msgtyp
が 0 より小さい場合、最低メッセージタイプが
.Fa msgtyp
の絶対値以下であるメッセージのうち最初のものが受信されます。
.El
.Pp
.Fa msgsz
は、要求したメッセージの最大長を指定します。受信したメッセージが
.Fa msgsz
より長い場合、
.Fa msgflg
.Dv MSG_NOERROR
フラグが設定されていると、メッセージはエラー通知なしで切り捨てられます。
.Dv MSG_NOERROR
フラグが設定されていないと、エラーが戻されます。
.Pp
.Fa msqid
が指定するメッセージキューに、一致するメッセージが存在しない場合、
.Fn msgrcv
の動作は、
.Fa msgflg
.Dv IPC_NOWAIT
フラグが設定されているかどうかによって決まります。
.Dv IPC_NOWAIT
が設定されていると、
.Fn msgrcv
はすぐに -1 を戻し、
.Va errno
.Er EAGAIN
に設定します。
.Dv IPC_NOWAIT
が設定されていないと、呼び出しプロセスは、以下の状態になるまでブロック
されます。
.Bl -bullet
.It
要求されたタイプのメッセージがメッセージキューで
使用できるようになるまで。
.It
メッセージキューが削除されるまで。この場合は -1 が戻され、
.Va errno
.Er EINVAL
に設定されます。
.It
シグナルが受信されるまで。この場合は -1 が戻され、
.Va errno
.Er EINTR
に設定されます。
.El
.Pp
メッセージが問題なく受信されると、
.Fa msqid
に関連するデータ構造体は、以下のように更新されます。
.Bl -bullet
.It
.Va msg_cbytes
が、そのメッセージのサイズだけ小さくなります。
.It
.Va msg_lrpid
が、呼出し側のプロセス ID に設定されます。
.It
.Va msg_lrtime
が、現在の時刻に設定されます。
.It
.Va msg_qnum
から 1 が引かれます。
.El
.Sh 戻り値
問題なく終了すると、
.Fn msgrcv
は、
.Fa msgp
が指す構造体の
.Va mtext
フィールドに受信したバイト数を戻します。
問題なく終了しない場合 -1 が戻され、
.Va errno
がそのエラーを示すように設定されます。
.Sh エラー
.Fn msgrcv
は、以下のような場合にエラーとなります。
.Bl -tag -width Er
.It Bq Er EINVAL
.Fa msqid
が正しいメッセージキュー ID でない場合。
.Pp
要求されたタイプのメッセージが使用できるようになる状態を
.Fn msgrcv
が待っている間にメッセージキューが削除された場合。
.Pp
.Fa msgsz
が 0 より小さい場合。
.It Bq Er E2BIG
一致するメッセージが受信されたが、サイズが
.Fa msgsz
より大きく、
.Fa msgflg
.Dv MSG_NOERROR
フラグが設定されていない場合。
.It Bq Er EACCES
呼び出しプロセスに、メッセージキューの読込み権がない場合。
.It Bq Er EFAULT
.Fa msgp
が、正しいアドレスを指していない場合。
.It Bq Er EINTR
システムコールが、シグナルの配送によって割り込まれた場合。
.It Bq Er EAGAIN
要求されたタイプのメッセージがメッセージキューになく、
.Fa msgflg
.Dv IPC_NOWAIT
が設定されている場合。
.Sh 関連項目
.Xr msgctl 3 ,
.Xr msgget 3 ,
.Xr msgsnd 3
.Sh バグ
.Tn NetBSD
.Tn FreeBSD
では、メッセージキューが削除された場合に使用すべきエラー値
.Er EIDRM
が定義されていません。また、利用可能なメッセージがない状態で
.Dv IPC_NOWAIT
が設定されている場合に使用すべきエラー値
.Er ENOMSG
が定義されていません。
.Sh 歴史
メッセージキューは、
AT&T Unix System V
の最初のリリースに
追加されました。
.\"kuma 1999-11-12