Sync with the original version. Unify some japanese words. Submitted by: kano@na.rim.or.jp
206 lines
5.5 KiB
Groff
206 lines
5.5 KiB
Groff
.\"
|
|
.\" Copyright (c) 1995 David Hovemeyer <daveho@infocom.com>
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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/sys/semctl.2,v 1.19 2004/07/02 23:52:13 ru Exp %
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd September 12, 1995
|
|
.Dt SEMCTL 2
|
|
.Os
|
|
.Sh 名称
|
|
.Nm semctl
|
|
.Nd セマフォ集合に対する操作を制御する
|
|
.Sh ライブラリ
|
|
.Lb libc
|
|
.Sh 書式
|
|
.In sys/types.h
|
|
.In sys/ipc.h
|
|
.In sys/sem.h
|
|
.Ft int
|
|
.Fn semctl "int semid" "int semnum" "int cmd" ...
|
|
.Sh 解説
|
|
.Fn semctl
|
|
システムコールは、
|
|
.Fa cmd
|
|
が示す操作を
|
|
.Fa semid
|
|
で示されるセマフォ集合に対して実行します。
|
|
ある値の
|
|
.Fa cmd
|
|
に対しては、4 番目の引数
|
|
.Fa "union semun arg"
|
|
が必要です。
|
|
.Fa arg
|
|
引数を使用するコマンドの場合、
|
|
.Fa "union semun"
|
|
は次のように定義されます:
|
|
.Bd -literal
|
|
.\"
|
|
.\" From <sys/sem.h>:
|
|
.\"
|
|
union semun {
|
|
int val; /* SETVAL 用の値 */
|
|
struct semid_ds *buf; /* IPC_STAT および IPC_SET 用のバッファ */
|
|
u_short *array; /* GETALL および SETALL 用の配列 */
|
|
};
|
|
.Ed
|
|
.Pp
|
|
コマンドは次のように実行されます:
|
|
.\"
|
|
.\" This section based on Stevens, _Advanced Programming in the UNIX
|
|
.\" Environment_.
|
|
.\"
|
|
.Bl -tag -width IPC_RMIDXXX
|
|
.It Dv IPC_STAT
|
|
セマフォ集合の
|
|
.Fa "struct semid_ds"
|
|
を取得し、
|
|
.Fa arg.buf
|
|
が指すメモリに保存します。
|
|
.It Dv IPC_SET
|
|
セマフォ集合の
|
|
.Fa "struct semid_ds"
|
|
のメンバ
|
|
.Fa sem_perm.uid ,
|
|
.Fa sem_perm.gid
|
|
および
|
|
.Fa sem_perm.mode
|
|
を、
|
|
.Fa arg.buf
|
|
が指す構造体のメンバと一致するように変更します。
|
|
呼び出し元プロセスの実効ユーザ ID は、
|
|
.Fa sem_perm.uid
|
|
または
|
|
.Fa sem_perm.cuid
|
|
のどちらかと一致する必要があるか、
|
|
またはスーパユーザ特権を持っている必要があります。
|
|
.It IPC_RMID
|
|
セマフォ集合をただちにシステムから削除します。
|
|
呼び出し元プロセスの実効ユーザ ID がセマフォ集合の
|
|
.Fa sem_perm.uid
|
|
または
|
|
.Fa sem_perm.cuid
|
|
と等しいか、またはプロセスがスーパユーザ特権を持っている必要があります。
|
|
.It Dv GETVAL
|
|
セマフォ番号
|
|
.Fa semnum
|
|
の値を返します。
|
|
.It Dv SETVAL
|
|
セマフォ番号
|
|
.Fa semnum
|
|
の値を
|
|
.Fa arg.val
|
|
に設定します。
|
|
あらゆるプロセス中の、このセマフォに対する未適用の終了時調整値は、
|
|
消されます。
|
|
.It Dv GETPID
|
|
セマフォ番号
|
|
.Fa semnum
|
|
について操作を実行した最後のプロセスのプロセス ID を返します。
|
|
.It Dv GETNCNT
|
|
セマフォ番号
|
|
.Fa semnum
|
|
の値が現在の値より大きくなるのを待っているプロセスの数を返します。
|
|
.It Dv GETZCNT
|
|
セマフォ番号
|
|
.Fa semnum
|
|
の値が 0 になるのを待っているプロセスの数を返します。
|
|
.It Dv GETALL
|
|
集合内のすべてのセマフォの値を
|
|
.Fa arg.array
|
|
が指す配列内へ取得します。
|
|
.It Dv SETALL
|
|
集合内のすべてのセマフォの値を
|
|
.Fa arg.array
|
|
が指す配列内の値に設定します。
|
|
あらゆるプロセス中の、この集合に属するすべてのセマフォに対する未適用の
|
|
終了時調整値は、消されます。
|
|
.El
|
|
.Pp
|
|
.Vt "struct semid_ds"
|
|
は次のように定義されます:
|
|
.Bd -literal
|
|
.\"
|
|
.\" Taken straight from <sys/sem.h>.
|
|
.\"
|
|
struct semid_ds {
|
|
struct ipc_perm sem_perm; /* 操作パーミッション構造体 */
|
|
struct sem *sem_base; /* 集合内の最初のセマフォへのポインタ */
|
|
u_short sem_nsems; /* 集合内のセマフォの数 */
|
|
time_t sem_otime; /* 最後の操作時刻 */
|
|
long sem_pad1; /* SVABI/386 によるとこれが必要 */
|
|
time_t sem_ctime; /* 最後の変更時刻
|
|
* 1970/01/01 00:00:00 GMT
|
|
* からの秒単位の経過時間
|
|
*/
|
|
long sem_pad2; /* SVABI/386 によるとこれが必要 */
|
|
long sem_pad3[4]; /* SVABI/386 によるとこれが必要 */
|
|
};
|
|
.Ed
|
|
.Sh 戻り値
|
|
処理が正常に完了すると、
|
|
.Fa cmd
|
|
が
|
|
.Dv GETVAL ,
|
|
.Dv GETPID ,
|
|
.Dv GETNCNT ,
|
|
.Dv GETZCNT
|
|
のどれかであるとき、
|
|
.Fn semctl
|
|
は対応する値を返します。
|
|
そうでない場合は 0 を返します。
|
|
処理に失敗した場合は、-1 を返し、エラーを示すために
|
|
.Va errno
|
|
を設定します。
|
|
.Sh エラー
|
|
.Fn semctl
|
|
システムコールは次の場合に処理に失敗します:
|
|
.Bl -tag -width Er
|
|
.It Bq Er EINVAL
|
|
.Fa semid
|
|
に対応するセマフォ集合がありません。
|
|
.It Bq Er EINVAL
|
|
.Fa semnum
|
|
引数が、指定のセマフォ集合に対して有効なセマフォの範囲内にありません。
|
|
.It Bq Er EPERM
|
|
呼び出し元プロセスの実効ユーザ ID が、
|
|
セマフォ集合の所有者または作成者のユーザ ID と一致しません。
|
|
.It Bq Er EACCES
|
|
操作とセマフォ集合のモードの間に不一致があったために
|
|
パーミッションが拒否されました。
|
|
.It Bq Er ERANGE
|
|
.Dv SETVAL
|
|
または
|
|
.Dv SETALL
|
|
が、セマフォを
|
|
.Bq 0 .. Dv SEMVMX
|
|
の許容範囲外に設定しようとしました。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr semget 2 ,
|
|
.Xr semop 2
|
|
.Sh バグ
|
|
.Dv SETALL
|
|
は、エラーを返す前にいくつかのセマフォ要素を更新することがあります。
|