bionic (2) msgget.2.gz

Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

       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 の場合、または keyIPC_PRIVATE  でなくても、  key  に対応するメッセージキューが存在せず、
       msgflgIPC_CREAT が指定されている場合、 新しいメッセージキューが作成される。

       msgflgIPC_CREATIPC_EXCL の両方が指定された場合、 key に対応するメッセージキューが既に存在すると、
       msgget()  は失敗し、 errnoEEXIST が設定される。 (これは open(2)  に O_CREAT | O_EXCL を指定した場合の
       動作と同じである)

       メッセージキューの作成時に、  msgflg 引き数の下位 9 ビットは、 そのメッセージキューのアクセス許可の定義と
       して使用される。 これらの許可ビットは open(2)  の引き数 mode と同じ形式で同じ意味である。 や creat(2)  シ
       ステムコールのアクセス許可パラメーターと同じ形式で、同じ意味を持つ。 (但し、実行 (execute) 許可は使用され
       ない。)

       新規のメッセージキューを作成する際、 msgget()  システムコールはメッセージキューのデータ構造体 msqid_ds を
       以下のように初期化する (msqid_ds については msgctl(2)  を参照):

              msg_perm.cuidmsg_perm.uid に呼び出し元プロセスの実効 (effective) ユーザーID を設定する。

              msg_perm.cgidmsg_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 msgflgIPC_CREATIPC_EXCL が指定されたが、 key に対応するメッセージキューがすでに存在する。

       ENOENT key に対応するメッセージキューが存在せず、 msgflgIPC_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.79 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。