msgget サブルーチン

目的

メッセージ・キュー ID を取得します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <sys/msg.h>
int msgget ( Key,  MessageFlag)
key_t Key;
int MessageFlag;

説明

メッセージ取得 サブルーチンは、指定された キー パラメーターに関連したメッセージ・キュー ID を戻します。

以下のいずれかの条件が該当する場合、 キー パラメーターの値に対してメッセージ・キュー ID、関連メッセージ・キュー、およびデータ構造が作成されます。

  • キー パラメーターは、 _ 翻訳不要 _IPC_PRIVATE 値と等しくなります。
  • キー パラメーターにメッセージ・キュー ID がまだ関連付けられておらず、 _ 翻訳不要 _IPC_CREAT 値が設定されている。

作成時に、新しいメッセージ・キュー ID に関連付けられたデータ構造は、以下のように初期化されます。

  • msg_perm.cuid,msg_perm.uid,msg_perm.cgidおよびmsg_perm.gidフィールドは、呼び出しプロセスの有効ユーザー ID と有効グループ ID にそれぞれ等しく設定されます。
  • 以下の下位 9 ビット。msg_perm.modeフィールドは、 MessageFlag パラメーターの下位 9 ビットに等しく設定されます。
  • msg_qnum,msg_lspid,msg_lrpid,msg_stimeおよびmsg_rtimeフィールドは 0 に設定されます。
  • msg_ctimeフィールドは現在時刻と等しい値に設定されます。
  • msg_qbytesフィールドはシステムしきい値と等しい値に設定されます。

メッセージ取得 サブルーチンは、以下のアクションを実行します。

  • msgget サブルーチンは、 Key パラメーターを持つキューを ( MessageFlag パラメーターの値に応じて) 検索または作成します。
  • メッセージ取得 サブルーチンは、キュー・ヘッダーの ID を呼び出し元に戻します。

メッセージ・サイズとキュー内のメッセージ数の制限については、 プログラミングの一般概念: プログラムの作成とデバッグを参照してください。

パラメーター

項目 説明
キー FTOK サブルーチン (または同様のアルゴリズム) によって構成される値 _ 翻訳不要 _IPC_PRIVATE またはプロセス間通信 (IPC) キーのいずれかを指定します。
MessageFlag 以下の 1 つ以上の値を論理 OR することによって構成されます。
IPC_CREAT
データ構造がまだ存在しない場合は作成します。
IPC_EXCL
_ 翻訳不要 _IPC_CREAT 値も設定されていて、データ構造が既に存在している場合、 メッセージ取得 サブルーチンは失敗します。
S_IRUSR
データ構造を所有するプロセスがそれを読み取ることを許可します。
S_IWUSR
データ構造を所有するプロセスがデータ構造を変更できるようにします。
S_IRGRP
データ構造に関連付けられたグループがそれを読み取ることを許可します。
S_IWGRP
データ構造に関連付けられたグループが変更できるようにします。
S_IROTH
他のユーザーにデータ構造の読み取りを許可します。
S_IWOTH
他のユーザーがデータ構造を変更することを許可します。

S_I で始まる値は sys/mode.h ファイルに定義され、ファイルに適用されるアクセス権のサブセットです。

戻り値

正常終了すると、 メッセージ取得 サブルーチンはメッセージ・キュー ID を戻します。 そうでない場合は-1が返され、エラーを示すerrnoグローバル変数が設定される。

エラー・コード

以下のいずれかの条件に該当する場合、 メッセージ取得 サブルーチンは失敗します。

項目 説明
EACCES Key パラメーターにはメッセージ・キュー ID が存在しますが、 MessageFlag パラメーターの下位 9 ビットによって指定された操作許可が付与されていません。
ENOENT キー パラメーターのメッセージ・キュー ID が存在せず、 _ 翻訳不要 _IPC_CREAT 値が設定されていません。
ENOSPC メッセージ・キュー ID が作成されますが、システム全体で許可されるメッセージ・キュー ID の最大数に対するシステムの制限を超えます。
EEXIST キー パラメーターのメッセージ・キュー ID が存在し、 _ 翻訳不要 _IPC_CREAT_ 翻訳不要 _IPC_EXCL の両方の値が設定されている。