EN JA
MSGGET(2)
MSGGET(2) FreeBSD System Calls Manual MSGGET(2)

名称

msggetメッセージキューを取得する

ライブラリ

Standard C Library (libc, -lc)

書式

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

int
msgget( key_t key, int msgflg);

解説

msgget() 関数は、 key に関連するメッセージキュー識別子を返します。メッセージキュー識別子は、0 より大きいユニークな整数です。

keyIPC_PRIVATE と等しいか、または key に関連するメッセージキュー識別子がなく、 IPC_CREAT ビットが、 msgflg に設定されているなら、メッセージキューは、作成されます。

新しいメッセージキューが作成されるなら、関連するデータ構造体 ( msqid_ds 構造体、 msgctl(2) 参照) は、次のように初期化されます:

  • msg_perm.cuidmsg_perm.uid は、呼び出しプロセスの実効 uid に設定されます。
  • msg_perm.gidmsg_perm.cgid は、呼び出しプロセスの実効 gid に設定されます。
  • msg_perm.mode は、 msgflg の下位 9 ビットに設定されます。
  • msg_cbytes, msg_qnum, msg_lspid, msg_lrpid, msg_rtimemsg_stime は、0 に設定されます。
  • msg_qbytes は、キューのバイト数 ( MSGMNB) のためのシステム全体の最大値に設定されます。
  • msg_ctime は、現在の時刻に設定されます。

戻り値

成功して終了するなら、正のメッセージキュー識別子が返されます。そうでなければ、-1 が返され、グローバル変数 errno にエラーを示す値が設定されます。

エラー

[ EACCES]
メッセージキューが既に key に関連していて、呼出し側には、それにアクセスするパーミションがありません。
[ EEXIST]
IPC_CREATIPC_EXCL の両方が msgflg に設定され、メッセージキューが既に key に関連しています。
[ ENOSPC]
メッセージキューの数に対するシステム制限に到達しているために、新しいメッセージキューを作成することができませんでした。
[ ENOENT]
IPC_CREATmsgflg に設定されていなくて、 key に関連するメッセージキューが見つかりません。

関連項目

msgctl(2), msgrcv(2), msgsnd(2)

歴史

メッセージキューは、 AT&T System V UNIX の最初のリリースで登場しました。
July 9, 2009 FreeBSD