MSGCTL(2)

名前
msgctl - メッセージ制御操作

書式
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>

int msgctl ( int msqid, int cmd, struct msqid_ds *buf )

説明
この関数は msqid で指定されたメッセージ・キュー(message queue)に対して cmd で指定された制御操作を行なう。 cmd に使える値は:

IPC_STAT
    メッセージ・キュー・データ構造体から buf で指定された構造体にデータをコピーする。 ユーザーはメッセージ・キューに対する読み込み許可を持っていなければ ならない。

IPC_SET
    buf で指定された msqid_ds 構造体のメンバーの値をメッセージ・キュー・データ構造体に書き込み、 msg_ctime メンバーも更新する。 buf で指定された msqid_ds 構造体 のユーザーが与えたメンバーのうち以下のものが考慮される:

    	msg_perm.uid
    	msg_perm.gid
    	msg_perm.mode	/* 下位 9 ビットのみ */
    	msg_qbytes

    呼び出してプロセスの実効(effective)ユーザー ID はスーパー・ユーザー、 メッセージ・キューの作成者(creator)、所有者(owner)のいずれかでなれ ばならない。スーパー・ユーザーのみが msg_qbytes をシステム・パラメーターの MSGMNB を超えて設定することができる。

IPC_RMID
    メッセージ・キューとそのデータ構造体をただちに削除する。全ての 読み込みや書き込みを待っていたプロセスは (エラーとなり errno に EIDRM が設定されて、) 再開(awake)される。 呼び出したプロセスの実効ユーザー ID はスーパー・ユーザー、 メッセージ・キューの作成者(creator)、所有者(owner)のいずれかでなれ ばならない。

返り値
成功した場合は 0 が返される。そうでなければ -1 が返され、 errno がそのエラーを示すように設定される。

エラー
失敗して返された場合は errno に以下の値の中のどれか一つが設定される:

EACCES
    引き数 cmd が IPC_STAT に等しいが、呼び出したプロセスがメッセージ・キュー msqid に対する読み込み許可を持っていない。

EFAULT
    引き数 cmd が IPC_SET か IPC_STAT で、 buf で指されているアドレスがアクセス可能でない。

EIDRM
    メッセージ・キューが削除された。

EINVAL
    cmd または msqid に不正な値が設定された。

EPERM
    引き数 cmd が IPC_SET か IPC_RMID で、呼び出したプロセスの実効ユーザー ID がそのコマンドを実行する 権利を持たない。これはスーパー・ユーザー以外のプロセスが msg_qbytes をシステム・パラメーターの MSGMNB で指定された値を超える増加させようとした場合にも発生するとに注意すること。

注意
IPC_INFO, MSG_STAT, MSG_INFO 制御コールは ipcs(8) プログラムで資源の割り当て情報を提供するために使用されている。 将来的にこれらは proc ファイル・システム・インターフェースを使うように 修正されるかもしれない。

準拠
SVr4, SVID. SVID には EIDRM エラーについての記述はない。

関連項目
ipc(5), msgget(2), msgsnd(2), msgrcv(2).