tail head cat sleep
QR code linking to this page

manページ  — MSGSND

名称

msgsnd

内容

ライブラリ

Standard C Library (libc, -lc)– メッセージキューにメッセージを送信

書式

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

int
msgsnd(int msqid, void *msgp, size_t msgsz, int msgflg);

解説

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

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

メッセージキューにすでに存在するバイト数と msgsz の合計が、メッセージキューの最大バイト数 ( msg_qbytesmsgctl(3) 参照) より大きい場合、またはシステム全体のすべてのキューに存在する メッセージ数がシステム制限にすでに等しくなっている場合は、 msgflgmsgsnd() の動作を決めます。 msgflg IPC_NOWAIT マスクが設定されている場合、呼び出しはすぐに戻されます。 msgflg IPC_NOWAIT が設定されていない場合、呼出しは以下の状態になるまでブロックされます。

呼び出しで問題が発生しなかった場合、メッセージキューに関連する データ構造は以下のように更新されます。

戻り値

The msgsnd function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

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

リソースが使用できるようになり、メッセージを送信できる 状態になることを msgsnd() が待っている間に、メッセージキューが削除された場合。

msgsz が 0 より小さいか、 msg_qbytes より大きい場合。

mtype が 0 より大きくない場合。

[EACCES]
  呼出しプロセスにメッセージキューの書込み権がない場合。
[EAGAIN]
  キューかシステム全体にメッセージ用のスペースがなく、 msgflg IPC_NOWAIT が設定されている場合。
[EFAULT]
  msgp が正しいアドレスを指していない場合。
[EINTR]
  システムコールが、シグナルの配送によって割り込まれた場合。

バグ

NetBSD と FreeBSD は、メッセージキューが削除された場合に使用すべきエラー値 EIDRM を定義していません。

歴史

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

MSGSND (3) November 24, 1997

tail head cat sleep
QR code linking to this page


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

The last good thing written in C was Franz Schubert's Symphony #9.
— Erwin Dietrich