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.

To err is human...to really foul up requires the root password.