MSGSND(3) FreeBSD ライブラリ関数マニュアル MSGSND(3)
名称
msgsnd |
ライブラリ
標準 C ライブラリ (libc, −lc) − メッセージキューにメッセージを送信 |
書式
#include <sys/types.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_qbytes 。 msgctl(3) 参照) より大きい場合、また はシステム全体のすべてのキューに存在するメッセージ数がシステム制限にすで に等しくなっている場合は、 msgflg が msgsnd() の動作を決めます。 msgflg で IPC_NOWAIT マスクが設定されている場合、呼び出しはすぐに戻されます。 msgflg で IPC_NOWAIT が設定されていない場合、呼出しは以下の状態になるまで ブロックされます。 |
• 呼出しがブロックされる条件がなくなるまで。この条件がなくなると、メッセージが送信されます。
• メッセージキューが削除されるまで。この場合は -1 が戻され、 errno が EINVAL に設定されます。 • 呼び出し側がシグナルを受信するまで。呼び出しは、 errno が EINTR に設 定された状態で戻ります。 呼び出しで問題が発生しなかった場合、メッセージキューに関連するデータ構造 は以下のように更新されます。 • msg_cbytes が、メッセージのサイズだけ大きくなります。 • msg_qnum に 1 が加えられます。 • msg_lspid が呼び出しプロセスのプロセス ID に設定されます。 • msg_stime が現在の時刻に設定されます。 戻り値 |
関数 msgsnd() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。 |
エラー
msgsnd() は、以下のような場合にエラーとなります。 |
[EINVAL]
msqid が正しいメッセージキュー ID でない場合。 リソースが使用できるようになり、メッセージを送信できる 状態になることを msgsnd() が待っている間に、メッセージ キューが削除された場合。 msgsz が 0 より小さいか、 msg_qbytes より大きい場合。 mtype が 0 より大きくない場合。 [EACCES] [EAGAIN] [EFAULT] [EINTR] バグ |
NetBSD と FreeBSD は、メッセージキューが削除された場合に使用すべきエラー 値 EIDRM を定義していません。 |
歴史
メッセージキューは、 AT&T Unix System V の最初のリリースに追加されまし た。 FreeBSD 10.0 November 24, 1997 FreeBSD 10.0 |