doc/ja_JP.eucJP/man/man3/msgctl.3
Kazuo Horikawa 996d2f02f9 Recent update of man3 entries
Submitted by:	Yuko Sasaki <yuko@veltec.co.jp>
2002-11-03 06:38:28 +00:00

206 lines
6 KiB
Groff

.\" $NetBSD: msgctl.2,v 1.1 1995/10/16 23:49:15 jtc Exp $
.\"
.\" Copyright (c) 1995 Frank van der Linden
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed for the NetBSD Project
.\" by Frank van der Linden
.\" 4. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/lib/libc/gen/msgctl.3,v 1.8.2.6 2001/12/14 18:33:51 ru Exp %
.\"/
.\" $FreeBSD$
.Dd November 24, 1997
.Dt MSGCTL 3
.Os
.Sh 名称
.Nm msgctl
.Nd メッセージ制御オペレーション
.Sh ライブラリ
.Lb libc
.Sh 書式
.In sys/types.h
.In sys/ipc.h
.In sys/msg.h
.Ft int
.Fn msgctl "int msqid" "int cmd" "struct msqid_ds *buf"
.Sh 解説
.Fn msgctl
システムコールは、
.Fa msqid
が指定するメッセージキューに対して制御オペレーションを実行します。
.Pp
各メッセージキューには、それに関連したデータ構造体があります。
その一部は
.Fn msgctl
で変更できます。
.Fn msgctl
のアクションを決めるデータ構造もあります。このデータ構造体は
.Aq Pa sys/msg.h
で定義され、以下のようなメンバが含まれています (その他のメンバも
あります)。
.Bd -literal
struct msqid_ds {
struct ipc_perm msg_perm; /* メッセージキューのパーミッションビット */
struct msg *msg_first; /* キューの最初のメッセージ */
struct msg *msg_last; /* キューの最後のメッセージ */
u_long msg_cbytes; /* キューで使用しているバイト数 */
u_long msg_qnum; /* キューで使用しているメッセージ数 */
u_long msg_qbytes; /* キューで使用する最大バイト数 */
pid_t msg_lspid; /* 最後の msgsnd のプロセスID */
pid_t msg_lrpid; /* 最後の msgrcv のプロセスID */
time_t msg_stime; /* 最後の msgsnd の時間 */
long msg_pad1;
time_t msg_rtime; /* 最後の msgrcv の時間 */
long msg_pad2;
time_t msg_ctime; /* 最後の msgctl の時間 */
long msg_pad3;
long msg_pad4[4];
};
.Ed
.Pp
.Vt shmid_ds
構造体の中で使用される
.Vt ipc_perm
構造体は、
.Aq Pa sys/ipc.h
で以下のように定義されています。
.Bd -literal
struct ipc_perm {
ushort cuid; /* 生成者のユーザID */
ushort cgid; /* 生成者のグループID */
ushort uid; /* ユーザID */
ushort gid; /* グループID */
ushort mode; /* r/w パーミッション */
ushort seq; /* シーケンス番号 (一意に生成された msg/sem/shm ID) */
key_t key; /* ユーザが指定した msg/sem/shm キー */
};
.Ed
.Pp
.Fn msgctl
が実行するオペレーションは、以下のうちの 1 つで
.Fa cmd
で指定されます。
.Bl -tag -width IPC_RMIDX
.It Dv IPC_STAT
メッセージキューの情報を集め、
.Fa buf
が指す構造体に配置します。
.It Dv IPC_SET
.Fa msqid
に関連する構造体の
.Va msg_perm.uid
フィールド、
.Va msg_perm.gid
フィールド、
.Va msg_perm.mode
フィールド、
.Va msg_qbytes
フィールドの値を設定します。この値は、
.Fa buf
が指す構造体で対応するフィールドから取られます。このオペレーションを
実行できるのは、スーパユーザ、またはメッセージキューに関連する
データ構造体の
.Va msg_perm.cuid
.Va msg_perm.uid
と等しい実効ユーザ ID を持つプロセスのみです。
.Va msg_qbytes
の値を増やせるのは、スーパユーザのみです。システム制限
(
.Aq Pa sys/msg.h
の MSGMNB) を越えた
.Va msg_qbytes
の値は、その制限に切り捨てられます。
.It Dv IPC_RMID
.Fa msqid
が指定するメッセージキューを削除し、
.Fa msqid
に関連する
データを破壊します。スーパユーザ、または、キューに
関連するデータ構造体の
.Va msg_perm.cuid
または
.Va msg_perm.uid
の値が、実効ユーザ ID に等しいプロセスのみが、これを実行できます。
.El
.Pp
メッセージキューからの読込み権かメッセージキューへの書込み権 (
.Xr msgsnd 3
.Xr msgrcv 3
参照) は、ファイルと同じように (
.Xr chmod 2
参照)、
.Va msg_perm.mode
フィールドによって決まります。実効ユーザ ID は、
.Va msg_perm.cuid
フィールドか
.Va msg_perm.uid
フィールドと一致し、実効グループ ID は、
.Va msg_perm.cgid
.Va msg_perm.gid
と一致します。
.Sh 戻り値
.Rv -std msgctl
.Sh エラー
.Fn msgctl
は、以下のような場合にエラーとなります。
.Bl -tag -width Er
.It Bq Er EPERM
.Fa cmd
が IPC_SET か IPC_RMID と等しく、呼出し側がスーパユーザではない場合。
または実効ユーザ ID がメッセージキューに関連するデータ構造の
.Va msg_perm.uid
フィールドか
.Va msg_perm.cuid
フィールドと一致しない場合。
.Pp
IPC_SET を用いて
.Va msg_qbytes
の値を上げようとしたが、呼出し側がスーパユーザでない場合。
.It Bq Er EACCES
コマンドが IPC_STAT であるが、このメッセージキューの
読込み権が呼出し側にない場合。
.It Bq Er EINVAL
.Fa msqid
が正しいメッセージキュー ID でない場合。
.Pp
.Va cmd
が正しいコマンドでない場合。
.It Bq Er EFAULT
.Fa buf
が正しいアドレスを指定していない場合。
.El
.Sh 関連項目
.Xr msgget 3 ,
.Xr msgrcv 3 ,
.Xr msgsnd 3
.Sh 歴史
メッセージキューは、
.At V
の最初のリリースに追加されました。
.\"kuma 1999-11-12