msgctl サブルーチン

目的

メッセージ制御操作を提供します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <sys/msg.h>

int msgctl (MessageQueueID,Command,Buffer)
int  MessageQueueID,  Command;
struct msqid_ds * Buffer;

説明

msgctl サブルーチンは、 Command パラメーターによって指定され、 Buffer パラメーターが指す構造に保管される、さまざまなメッセージ制御操作を提供します。 msqid_ds 構造体は、 sys/msg.h ファイルに定義されます。

メッセージ・キューには、以下の制限が適用されます。

  • 最大メッセージ・サイズは 4 メガバイトです。
  • キュー当たりのメッセージの最大数は 524288 です。
  • メッセージ・キュー ID の最大数は 1048576 です。
  • キュー内の最大バイト数は、 vmo コマンドの ipc_msgmnb チューナブル・パラメーターによって制御されます。

パラメーター

項目 説明
MessageQueueID メッセージ・キュー ID を指定します。
Command Command パラメーターには、以下の値を使用できます。
IPC_STAT
MessageQueueIDパラメータに関連付けられているデータ構造の上記のフィールドの現在値を、Bufferパラメータが指す msqid_ds構造体に格納します。

この操作を実行するには、現在のプロセスに読み取り許可がなければなりません。

IPC_SET
MessageQueueIDパラメータに関連付けられているデータ構造の以下のフィールドの値を、Bufferパラメータが指す構造内の対応する値に設定します:
msg_perm.uid
msg_perm.gid
msg_perm.mode/*Only the low-order 
nine bits*/
msg_qbytes

現行プロセスの実効ユーザー ID は、root ユーザー権限を持っているか、または以下の値と等しくなければなりません。 msg_perm.uidまたはmsg_perm.cuidこの操作を実行するために、MessageQueueIDパラメータに関連付けられているデータ構造のフィールドを指定します。 msg_qbytes フィールドの値を大きくするには、現行プロセスの実効ユーザー ID に root ユーザー権限がなければなりません。

IPC_RMID
MessageQueueIDパラメータで指定されたメッセージキュー識別子をシステムから削除し、メッセージキューとそれに関連するデータ構造を破棄する。 現行プロセスの実効ユーザー ID は、root ユーザー権限を持っているか、以下の値と等しくなければなりません。msg_perm.uidまたはmsg_perm.cuidフィールドで、MessageQueueID操作を実行する。
buffer msqid_ds 構造体を指します。

戻り値

正常終了すると、 msgctl サブルーチンは値 0 を戻します。 そうでない場合は-1が返され、エラーを示すerrnoグローバル変数が設定される。

エラー・コード

以下のいずれかの条件に該当する場合、 msgctl サブルーチンは失敗します。

項目 説明
EINVAL CommandまたはMessageQueueIDパラメータが無効です。
EACCES Command パラメーターが IPC_STAT 値と等しく、呼び出しプロセスが読み取り許可を拒否されました。
EPERM Command パラメーターは IPC_RMID 値と等しく、呼び出しプロセスの実効ユーザー ID には root ユーザー権限がありません。 または、 Command パラメーターが IPC_SET 値と等しく、呼び出し側プロセスの実効ユーザー ID が、msg_perm.uidフィールドまたはmsg_perm.cuidフィールドを持つMessageQueueID
EPERM Command パラメーターが IPC_SET 値と等しい場合は、以下の値を増やそうとしました。msg_qbytes呼び出しプロセスの実効ユーザー ID には root ユーザー権限がありません。
EFAULT Buffer パラメーターは、プロセス・アドレス・スペースの外部を指しています。