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 より大きいユニークな整数です。key が IPC_PRIVATE と等しいか、または key に関連するメッセージキュー識別子がなく、 IPC_CREAT ビットが、 msgflg に設定されているなら、メッセージキューは、作成されます。
新しいメッセージキューが作成されるなら、関連するデータ構造体 ( msqid_ds 構造体、 msgctl(2) 参照) は、次のように初期化されます:
- msg_perm.cuid と msg_perm.uid は、呼び出しプロセスの実効 uid に設定されます。
- msg_perm.gid と msg_perm.cgid は、呼び出しプロセスの実効 gid に設定されます。
- msg_perm.mode は、 msgflg の下位 9 ビットに設定されます。
- msg_cbytes, msg_qnum, msg_lspid, msg_lrpid, msg_rtime と msg_stime は、0 に設定されます。
- msg_qbytes は、キューのバイト数 ( MSGMNB) のためのシステム全体の最大値に設定されます。
- msg_ctime は、現在の時刻に設定されます。
戻り値
成功して終了するなら、正のメッセージキュー識別子が返されます。そうでなければ、-1 が返され、グローバル変数 errno にエラーを示す値が設定されます。エラー
- [ EACCES]
- メッセージキューが既に key に関連していて、呼出し側には、それにアクセスするパーミションがありません。
- [ EEXIST]
- IPC_CREAT と IPC_EXCL の両方が msgflg に設定され、メッセージキューが既に key に関連しています。
- [ ENOSPC]
- メッセージキューの数に対するシステム制限に到達しているために、新しいメッセージキューを作成することができませんでした。
- [ ENOENT]
- IPC_CREAT が msgflg に設定されていなくて、 key に関連するメッセージキューが見つかりません。
歴史
メッセージキューは、 AT&T System V UNIX の最初のリリースで登場しました。July 9, 2009 | FreeBSD |