Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
msgget - System V メッセージ・キュー識別子を取得する
書式
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgget(key_t key, int msgflg);
説明
msgget() システムコールは key 引き数の値に対応する System V メッセージ・キューの識別子を 返す。 key の値が IPC_PRIVATE の場合、または key が IPC_PRIVATE でなくても、 key に対応す るメッセージ・キューが存在せず、 msgflg に IPC_CREAT が指定されている場合、 新しいメッセー ジ・キューが作成される。 msgflg に IPC_CREAT と IPC_EXCL の両方が指定された場合、 key に対応するメッセージ・キュー が既に存在すると、 msgget() は失敗し、 errno に EEXIST が設定される。 (これは open(2) に O_CREAT | O_EXCL を指定した場合の動作と同じである) メッセージ・キューの作成時に、 msgflg 引き数の下位 9 ビットは、 そのメッセージ・キューのア クセス許可の定義として使用される。 これらの許可ビットは open(2) の引き数 mode と同じ形式 で同じ意味である。 や creat(2) システム・コールのアクセス許可パラメータと同じ形式で、同じ 意味を持つ。 (但し、実行 (execute) 許可は使用されない。) 新規のメッセージ・キューを作成する際、 msgget() システム・コールはメッセージ・キューの データ構造体 msqid_ds を以下のように初期化する (msqid_ds については msgctl(2) を参照): msg_perm.cuid と msg_perm.uid に呼び出し元プロセスの実効 (effective) ユーザーID を 設定する。 msg_perm.cgid と msg_perm.gid に呼び出し元プロセスの実効 (effective) グループID を 設定する。 msg_perm.mode の下位 9 ビットは msgflg の下位 9 ビットを設定する。 msg_qnum, msg_lspid, msg_lrpid, msg_stime, msg_rtime に 0 を設定される。 msg_ctime に現在の時刻を設定する。 msg_qbytes に、システムで決められたメッセージ・キューの最大サイズ MSGMNB を設定す る。 メッセージ・キューがすでに存在する場合は、アクセス許可の検査と、 破棄 (destruction) マーク がないかの確認が行われる。
返り値
成功した場合、返り値はメッセージ・キュー識別子 (非負の整数) となる。 失敗した場合は -1 が 返され、 errno にそのエラーが示される。
エラー
失敗した場合、 errno に以下の値のいずれか一つが設定される: EACCES key に対応するメッセージ・キューは存在するが、 呼び出し元プロセスはそのキューに対す るアクセス許可がなく、 CAP_IPC_OWNER ケーパビリティも持っていない。 EEXIST key に対応するメッセージ・キューが存在し、 msgflg に IPC_CREAT と IPC_EXCL が指定さ れていた。 ENOENT key に対応するメッセージ・キューが存在せず、 msgflg に IPC_CREAT が指定されていな かった。 ENOMEM メッセージ・キューを作成しようとしたが、新しいデータ構造体を作成 するのに十分なメモ リがシステムに存在しない。 ENOSPC メッセージ・キューを作成しようとしたが、作成すると システム全体のメッセージ・キュー 数の最大値 (MSGMNI) を超えてしまう。
準拠
SVr4, POSIX.1-2001.
注意
Linux や POSIX の全てのバージョンでは、 <sys/types.h> と <sys/ipc.h> のインクルードは必要 ない。しかしながら、いくつかの古い実装ではこれらのヘッダファイルのインクルードが必要であ り、 SVID でもこれらのインクルードをするように記載されている。このような古いシステムへの移 植性を意図したアプリケーションではこれらのファイルをインクルードする必要があるかもしれな い。 IPC_PRIVATE はフラグではなく、 key_t 型である。 この特別な値が key として使用された場合、 msgget() システムコールは msgflg の下位 9 ビット以外の全てを無視して (成功した場合は) 新 しいメッセージ・キューを作成する。 msgget() システムコールに影響を及ぼすメッセージ・キューの資源の システムとしての制限を以 下に示す: MSGMNI システム全体のメッセージ・キュー数の最大値: 方針依存 (Linux では、この制限値は /proc/sys/kernel/msgmni 経由で参照したり、変更したりできる)。 Linux での注意 Linux 2.3.20 までは、削除が予定されているメッセージ・キューに対して msgget() を行うと EIDRM がエラーとして返されるようになっていた。
バグ
IPC_PRIVATE という名前を選んだのはおそらく失敗であろう。 IPC_NEW の方がより明確にその機能 を表しているだろう。
関連項目
msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), svipc(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。