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.

The most important thing in the programming language is the name. A language will not succeed without a good name. I have recently invented a very good name and now I am looking for a suitable language.
— Donald Knuth