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 によって行います。 以下の cmds が指定可能。
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] Cmd が 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.1C