MSGCTL(2V) — NEWS-OS Programmer’s Manual
名称
msgctl − メッセージの制御
形式
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgctl (msqid, cmd, buf)
int msqid, cmd;
struct msqid_ds ∗buf;
解説
msgctl は各種メッセージの制御動作を cmd によって行います。 以下の cmd が指定可能。
IPC_STAT msqid に関連するデータ構造体の各メンバ のカレント値を buf によって示す構造体に設定 します。 この構造体の内容は intro(2) で指定されます。 {READ}
IPC_SET msqid に関連するデータ構造体の以下の メンバの値を buf で示す構造体の対応する値に設定します。
msg_perm.uid
msg_perm.gid
msg_perm.mode /∗ 下位9ビットのみ ∗/
msg_qbytes
この cmd は スーパーユーザの ID または msqid に関連するデータ構造体の msg_perm.uid の値と同じ有効ユーザ ID を持つ プロセスによってのみ 実行できます。
IPC_RMID msqid で指定される メッセージキュー識別子を システムから 取り除き、 メッセージキューと 関連するデータ構造体を 破壊します。 この cmd は スーパーユーザ のユーザ ID または msqid に関するデータ構造体の msg_perm.uid の値を持つ プロセスによってのみ 実行します。
msgctl は以下の 1 つでも該当する場合、 失敗します。
[EINVAL]
msqid は有効なメッセージキュー識別子 ではない。
[EINVAL] cmd は有効なコマンドではない。
[EACCES] mmd が IPC_STAT で、読み出し動作が呼びしたプロセス に対して許されていない。 (intro(2) 参照)
[EPERM] cmd が IPC_RMID または IPC_SET で、 呼び出しプロセス の有効ユーザ ID が スーパーユーザの ユーザ ID でなく、 また msqid に関する データ構造体の msg_perm.uid の値とも同じではない。
[EPERM] cmd が IPC_SET であり、 msg_qbytes の値を増加させようとしたが、 呼び出しプロセス の有効ユーザ ID が スーパーユーザのものと異なる。
[EFAULT] buf が不正アドレスを示している。
リターン値
コマンドの実行に 成功した場合、 ゼロが返されます。 そうでなければ、 −1 が返され、 エラーを示す errno が設定されます。
関連事項
intro(2), msgget(2V), msgop(2V).
NEWS-OSRelease 4.2.1R