tail head cat sleep
QR code linking to this page

manページ  — MSGRCV

名称

msgrcv – メッセージキューからメッセージを受信

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int
msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

解説

msgrcv() 関数は、 msqid で指定したメッセージキューからメッセージを受信し、 msgp が指す構造体に配置します。この構造体は、以下のメンバから 構成されている必要があります。
    long mtype;    /* メッセージタイプ */
    char mtext[1]; /* メッセージ本体 */

mtype は 0 より大きい整数で、メッセージの選択に使用されます。 mtext はバイトの配列で、システム制限 ( MSGMAX) までのサイズです。

msgtyp の値には以下のような意味があります。

msgsz は、要求したメッセージの最大長を指定します。受信したメッセージが msgsz より長い場合、 msgflg MSG_NOERROR フラグが設定されていると、メッセージはエラー通知なしで切り捨てられます。 MSG_NOERROR フラグが設定されていないと、エラーが戻されます。

msqid が指定するメッセージキューに、一致するメッセージが存在しない場合、 msgrcv() の動作は、 msgflg IPC_NOWAIT フラグが設定されているかどうかによって決まります。 IPC_NOWAIT が設定されていると、 msgrcv() はすぐに -1 を戻し、 errnoEAGAIN に設定します。 IPC_NOWAIT が設定されていないと、呼び出しプロセスは、以下の状態になるまでブロック されます。

メッセージが問題なく受信されると、 msqid に関連するデータ構造体は、以下のように更新されます。

戻り値

問題なく終了すると、 msgrcv() は、 msgp が指す構造体の mtext フィールドに受信したバイト数を戻します。 問題なく終了しない場合 -1 が戻され、 errno がそのエラーを示すように設定されます。

エラー

msgrcv() は、以下のような場合にエラーとなります。
[EINVAL]
  msqid が正しいメッセージキュー ID でない場合。

要求されたタイプのメッセージが使用できるようになる状態を msgrcv() が待っている間にメッセージキューが削除された場合。

msgsz が 0 より小さい場合。

[E2BIG]
  一致するメッセージが受信されたが、サイズが msgsz より大きく、 msgflg MSG_NOERROR フラグが設定されていない場合。
[EACCES]
  呼び出しプロセスに、メッセージキューの読込み権がない場合。
[EFAULT]
  msgp が、正しいアドレスを指していない場合。
[EINTR]
  システムコールが、シグナルの配送によって割り込まれた場合。
[EAGAIN]
  要求されたタイプのメッセージがメッセージキューになく、 msgflg IPC_NOWAIT が設定されている場合。

関連項目

msgctl(3), msgget(3), msgsnd(3)

バグ

NetBSD と FreeBSD では、メッセージキューが削除された場合に使用すべきエラー値 EIDRM が定義されていません。また、利用可能なメッセージがない状態で IPC_NOWAIT が設定されている場合に使用すべきエラー値 ENOMSG が定義されていません。

歴史

メッセージキューは、 AT&T Unix System V の最初のリリースに 追加されました。

MSGRCV (3) November 24, 1997

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.