MSGCTL
Section: Linux Programmer's Manual (2)
Updated: 2004-11-10
Index
JM Home Page
roff page
名前
msgctl - メッセージ制御操作
書式
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgctl(int msqid,
int cmd,
struct msqid_ds *buf);
説明
msgctl()
はメッセージ・キュー識別子
msqid
で指定されたメッセージ・キュー (message queue) に対して
cmd
で指定された制御操作を行なう。
msqid_ds
データ構造体は <sys/msg.h> で以下のように定義されている:
struct msqid_ds {
struct ipc_perm msg_perm; /* 所有権と許可 */
time_t msg_stime; /* 最後の msgsnd(2) の時刻 */
time_t msg_rtime; /* 最後の msgrcv(2) の時刻 */
time_t msg_ctime; /* 最後に変更が行われた時刻 */
unsigned long __msg_cbytes; /* キューにある現在のバイト数
(標準ではない) */
msgqnum_t msg_qnum; /* キューにある現在入っている
メッセージの数 */
msglen_t msg_qbytes; /* キューに許可されている
最大バイト数 */
pid_t msg_lspid; /* 最後の msgsnd(2) の PID */
pid_t msg_lrpid; /* 最後の msgrcv(2) の PID */
};
ipc_perm
構造体は <sys/ipc.h> で以下のように定義されている
(強調されたフィールドは
IPC_SET
を使って設定可能である):
struct ipc_perm {
key_t key; /* msgget(2) に与えるキー */
uid_t uid; /* 所有者の実効 UID */
gid_t gid; /* 所有者の実効 GID */
uid_t cuid; /* 作成者の実効 UID */
gid_t cgid; /* 作成者の実効 GID */
unsigned short mode; /* 許可 */
unsigned short seq; /* シーケンス番号 */
};
cmd
として有効な値は:
- IPC_STAT
-
msqid
に関連づけられたメッセージ・キュー・データ構造体から、ポインタ
buf
が指し示す
msqid_ds
構造体に情報をコピーする。
呼び出し側はメッセージ・キューに対する読み込み許可を持っていなければならない。
- IPC_SET
-
ポインタ
buf
が指し示す
msqid_ds
構造体のメンバーの値を、メッセージ・キューに関連づけられた
カーネル・データ構造体に書き込み、
msg_ctime
メンバーも更新する。
構造体のメンバーのうち、更新されるものを以下に示す:
msg_qbytes,
msg_perm.uid,
msg_perm.gid,
msg_perm.mode
(の下位 9 ビット)。
呼び出したプロセスの実効ユーザ ID が、メッセージ・キューの所有者
(msg_perm.uid)
または作成者
(msg_perm.cuid)
と一致するか、呼び出し元が特権を持たなければならない。
msg_qbytes
をシステム・パラメータの
MSGMNB
を超えて設定するには、適切な特権 (Linux では
CAP_IPC_RESOURCE
ケーパビリティ (capability)) が必要である。
- IPC_RMID
-
メッセージ・キューをただちに削除する。
同時にその構造体の読み書きの待ち状態にあったプロセスに通知する
(エラーが返り、
errno
が
EIDRM
に設定される)。
呼び出したプロセスが適切な特権を持っているか、
呼び出したプロセスの実効ユーザ ID がメッセージ・キューの作成者か
所有者の実効ユーザ ID でなければならない。
- IPC_INFO (Linux 固有)
-
システム全体でのメッセージ・キューの制限とパラメータに関する情報を、
buf
が指す構造体に入れて返す。
この構造体は
msginfo
型である (そのためキャストが必要である)。
msginfo
は
_GNU_SOURCE
機能検査マクロが定義された場合に
<sys/msg.h>
で以下のように定義される:
struct msginfo {
int msgpool; /* メッセージ・データの保持に使用される
バッファ・プールの大きさ (バイト単位) */
int msgmap; /* メッセージ・マップの最大エントリ数;
未使用 */
int msgmax; /* 一つのメッセージに書き込み可能な
最大バイト数 */
int msgmnb; /* 一つのキューに書き込み可能な最大バイト数;
(msgget(2) での) キュー作成中の msg_qbytes
の初期化に使用される */
int msgmni; /* メッセージ・キューの数の最大値 */
int msgssz; /* メッセージ・セグメントのサイズ; 未使用 */
int msgtql; /* システム上の全キューの最大メッセージ数;
未使用 */
unsigned short int msgseg;
/* 最大セグメント数; 未使用 */
};
設定
msgmni ,
msgmax ,
msgmnb
は
/proc
にある同じ名前のファイル経由で変更可能である。
詳しくは
proc(5)
を参照。
- MSG_INFO (Linux 固有)
-
IPC_INFO
のときと同じ情報を格納した
msginfo
構造体を返す。
但し、以下のフィールドにはメッセージ・キューが
消費しているシステム資源に関する情報が格納される点が異なる。
msgpool
フィールドは現在システム上に存在するメッセージ・キューの数を返す。
msgmap
フィールドはシステム上の全てのキューに入っているメッセージ総数を返す。
msgtql
フィールドはシステム上の全てのキューに入っている全メッセージの
総バイト数を返す。
- MSG_STAT (Linux 固有)
-
IPC_STAT
と同じく
msqid_ds
構造体を返す。
但し、
msqid
引き数は、キュー識別子ではなく、システム上の全てのメッセージ・キュー
に関する情報を管理するカーネルの内部配列へのインデックスである。
返り値
成功すると、
IPC_STAT,
IPC_SET,
IPC_RMID
は 0 を返す。
IPC_INFO
と
MSG_INFO
操作は、成功すると、全てのメッセージ・キューに関する情報を
管理しているカーネルの内部配列の使用中エントリのインデックスの
うち最大値を返す
(この情報は、システムの全てのメッセージ・キューに関する情報を
取得するために、
MSG_STAT
操作を繰り返し実行する際に使用できる)。
MSG_STAT
操作は、成功すると、
msqid
で指定されたインデックスを持つメッセージ・キューの識別子を返す。
エラーの場合は -1 を返し、
errno
を適切に設定する。
エラー
失敗した場合、
errno
は以下の値の中のどれか一つに設定される:
- EACCES
-
引き数
cmd
が
IPC_STAT
または
MSG_STAT
に等しいが、呼び出したプロセスがメッセージ・キュー
msqid
に対する読み込み許可を持っておらず、かつ
CAP_IPC_OWNER
ケーパビリティを持っていない。
- EFAULT
-
引き数
cmd
が
IPC_SET
か
IPC_STAT
で、ポインタ
buf
で指されているアドレスがアクセス可能でない。
- EIDRM
-
メッセージ・キューが削除された。
- EINVAL
-
cmd
または
msqid
に不正な値が設定された。
もしくは、
MSG_STAT
操作の場合に、
msqid
で指定されたインデックス値が現在未使用の配列のスロットを参照いていた。
- EPERM
-
引き数
cmd
が
IPC_SET
か
IPC_RMID
であるが、呼び出したプロセスの実効ユーザ ID がメッセージキューの
(msg_perm.cuid
として見つかる) 作成者
と
(msg_perm.uid
として見つかる) 所有者のいずれでもなく、
かつ呼び出したプロセスに特権 (Linux では
CAP_SYS_ADMIN
ケーパビリティ) がない。
準拠
SVr4, POSIX.1-2001.
注意
IPC_INFO,
MSG_STAT,
MSG_INFO
操作は、
ipcs(8)
プログラムで割り当て済の資源に関する情報を提供するために
使用されている。将来、これらの操作は変更されたり、
/proc ファイルシステムのインタフェースに移動されるかもしれない。
struct msqid_ds 内の多くのフィールドは、
Linux 2.2 では
short
だったが、Linux 2.4 では
long
になった。
この利点を生かすには、glibc-2.1.91 以降の環境下で
再コンパイルすれば十分である。
(カーネルは新しい形式の呼び出しと古い形式の呼び出しを
cmd
内の
IPC_64
フラグで区別する。)
関連項目
msgget(2),
msgrcv(2),
msgsnd(2),
capabilities(7),
mq_overview(7),
svipc(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:53 GMT, November 19, 2007