jpman project specific RCS keyword (jpman %Id) is obsolete, after manual entries are stored in freefall CVS repository. This old Id is useless and more worse it confuses users and bug reporters. So, this old Id is removed. Submitted by:jpman project <man-jp@jp.FreeBSD.org>
211 lines
6.1 KiB
Groff
211 lines
6.1 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.
|
|
.\"
|
|
.\" %Id: msgctl.3,v 1.5 1997/11/23 17:58:36 bde Exp %
|
|
.\"/
|
|
.\" $FreeBSD$
|
|
.Dd November 24, 1997
|
|
.Dt MSGCTL 3
|
|
.Os FreeBSD
|
|
.Sh 名称
|
|
.Nm msgctl
|
|
.Nd メッセージ制御オペレーション
|
|
.Sh 書式
|
|
.Fd #include <sys/types.h>
|
|
.Fd #include <sys/ipc.h>
|
|
.Fd #include <sys/msg.h>
|
|
.Ft int
|
|
.Fn msgctl "int msqid" "int cmd" "struct msqid_ds *buf"
|
|
.Sh 解説
|
|
.Fn msgctl
|
|
システムコールは、
|
|
.Fa msqid
|
|
が指定するメッセージキューに対して制御オペレーションを実行します。
|
|
|
|
各メッセージキューには、それに関連したデータ構造体があります。
|
|
その一部は
|
|
.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
|
|
.Bf -literal
|
|
shmid_ds
|
|
.Ef
|
|
構造体の中で使用される
|
|
.Bf -literal
|
|
ipc_perm
|
|
.Ef
|
|
構造体は、
|
|
.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
|
|
|
|
メッセージキューからの読込み権かメッセージキューへの書込み権 (
|
|
.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 戻り値
|
|
問題なく終了すると 0 が戻されます。問題なく終了しないと -1 が戻され、
|
|
グローバル変数
|
|
.Va errno
|
|
がそのエラーを示すように設定されます。
|
|
.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
|
|
フィールドと一致しない場合。
|
|
|
|
IPC_SET を用いて
|
|
.Va msg_qbytes
|
|
の値を上げようとしたが、呼出し側がスーパユーザでない場合。
|
|
.It Bq Er EACCES
|
|
コマンドが IPC_STAT であるが、このメッセージキューの
|
|
読込み権が呼出し側にない場合。
|
|
.It Bq Er EINVAL
|
|
.Fa msqid
|
|
が正しいメッセージキュー ID でない場合。
|
|
|
|
.Va cmd
|
|
が正しいコマンドでない場合。
|
|
.It Bq Er EFAULT
|
|
.Fa buf
|
|
が正しいアドレスを指定していない場合。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr msgget 3 ,
|
|
.Xr msgrcv 3 ,
|
|
.Xr msgsnd 3
|
|
.Sh 歴史
|
|
メッセージキューは、
|
|
AT&T Unix System V
|
|
の最初のリリースに追加されました。
|
|
.\"kuma 1999-11-12
|