MSGGET(3)

名称
msgget - メッセージキューの取得

ライブラリ
libc

書式
<sys/types.h> <sys/ipc.h> <sys/msg.h> int msgget(key_t key, int msgflg)

解説
msgget() は、 key に関連するメッセージキュー ID を戻します。メッセージキュー ID は、 0 より大きい一意的な整数です。

メッセージキューは、 key が IPC_PRIVATE と等しい場合、または key に関連するメッセージキュー ID が存在せず、かつ、 IPC_CREAT ビットが msgflg で設定されている場合に作成されます。

新しいメッセージキューが作成された場合、関連するデータ構造 ( msqid_ds 構造体。 msgctl(3) 参照) は、以下のように初期化されます。

•   msg_perm.cuid と msg_perm.uid は、呼び出しプロセスの実効ユーザ ID に設定されます。

•   msg_perm.gid と msg_perm.cgid は、呼び出しプロセスの実効グループ ID に設定されます。

•   msg_perm.mode は、 msgflg の下位 9 ビットが設定されます。

•   msg_cbytes, msg_qnum, msg_lspid, msg_lrpid, msg_rtime, msg_stime には 0 が設定されます。

•   msg_qbytes は、キューのバイト数 (MSGMNB) についてのシステムの最大値が設定されます。

•   msg_ctime は、現在の時刻に設定されます。

戻り値
問題なく終了すると、正のメッセージキュー ID が戻されます。問題なく 終了しないと -1 が戻され、グローバル変数 errno がそのエラーを示すように設定されます。

エラー

[EACESS]
    メッセージキューが key とすでに関連していますが、呼出し側にアクセス権がありません。

[EEXIST]
    IPC_CREAT と IPC_EXCL の両方が msgflg で設定されており、メッセージキューが key とすでに関連しています。

[ENOSPC]
    メッセージキューの数に関するシステム制限に達しているため、 新しいメッセージキューを作成できません。

[ENOENT]
    msgflg に IPC_CREAT が設定されていない状況で、 key に関連するメッセージキューが見つかりません。

関連項目
msgctl(3), msgrcv(3), msgsnd(3)

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