OSDN Git Service

(split) LDP: Restore and add Copyrights for draft pages
[linuxjm/LDP_man-pages.git] / draft / man2 / semctl.2
1 .\" Copyright 1993 Giorgio Ciucci (giorgio@crcc.it)
2 .\" and Copyright 2004, 2005 Michael Kerrisk <mtk.manpages@gmail.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .\" Modified Tue Oct 22 17:53:56 1996 by Eric S. Raymond <esr@thyrsus.com>
27 .\" Modified Fri Jun 19 10:59:15 1998 by Andries Brouwer <aeb@cwi.nl>
28 .\" Modified Sun Feb 18 01:59:29 2001 by Andries Brouwer <aeb@cwi.nl>
29 .\" Modified 20 Dec 2001, Michael Kerrisk <mtk.manpages@gmail.com>
30 .\" Modified 21 Dec 2001, aeb
31 .\" Modified 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
32 .\"     Added notes on CAP_IPC_OWNER requirement
33 .\" Modified 17 Jun 2004, Michael Kerrisk <mtk.manpages@gmail.com>
34 .\"     Added notes on CAP_SYS_ADMIN requirement for IPC_SET and IPC_RMID
35 .\" Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpages@gmail.com>
36 .\"     Language and formatting clean-ups
37 .\"     Rewrote semun text
38 .\"     Added semid_ds and ipc_perm structure definitions
39 .\" 2005-08-02, mtk: Added IPC_INFO, SEM_INFO, SEM_STAT descriptions.
40 .\"
41 .\"*******************************************************************
42 .\"
43 .\" This file was generated with po4a. Translate the source file.
44 .\"
45 .\"*******************************************************************
46 .\"
47 .\" Japanese Version Copyright (c) 1997,1998 HANATAKA Shinya
48 .\"         all rights reserved.
49 .\" Translated 1997-02-23, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
50 .\" Modified 1998-09-10, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
51 .\" Updated & Modified 2001-06-03, Yuichi SATO <ysato@h4.dion.ne.jp>
52 .\" Updated & Modified 2002-01-02, Yuichi SATO
53 .\" Updated & Modified 2005-01-03, Yuichi SATO <ysato444@yahoo.co.jp>
54 .\" Updated & Modified 2005-10-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
55 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
56 .\" Updated 2013-07-24, Akihiro MOTOKI <amotoki@gmail.com>
57 .\"
58 .TH SEMCTL 2 2013\-06\-03 Linux "Linux Programmer's Manual"
59 .SH 名前
60 semctl \- System V セマフォの制御操作を行なう
61 .SH 書式
62 .nf
63 \fB#include <sys/types.h>\fP
64 \fB#include <sys/ipc.h>\fP
65 \fB#include <sys/sem.h>\fP
66 .sp
67 \fBint semctl(int \fP\fIsemid\fP\fB, int \fP\fIsemnum\fP\fB, int \fP\fIcmd\fP\fB, ...);\fP
68 .fi
69 .SH 説明
70 \fBsemctl\fP()  は、 \fIsemid\fP で指定された System V セマフォ集合 (semaphore set)  またはセマフォ集合の
71 \fIsemnun\fP 番目のセマフォに対して、 \fIcmd\fP で指定された制御操作を行なう (集合内のセマフォの番号は 0 から始まる)。
72 .PP
73 この関数は、 \fIcmd\fP の値に依存して、3 個または 4 個の引き数を持つ。 引き数が 4 個の場合、第 4 引き数の型は \fIunion
74 semun\fP である。 \fI呼び出し元プログラム\fPは、 この共用体 (union) を以下のように定義しなければならない。
75
76 .nf
77 .in +4n
78 union semun {
79     int              val;    /* SETVAL の値 */
80     struct semid_ds *buf;    /* IPC_STAT, IPC_SET 用のバッファ */
81     unsigned short  *array;  /* GETALL, SETALL 用の配列 */
82     struct seminfo  *__buf;  /* IPC_INFO 用のバッファ
83                                 (Linux 固有) */
84 };
85 .in
86 .fi
87 .PP
88 \fIsemid_ds\fP データ構造体は \fI<sys/sem.h>\fP で以下のように定義されている:
89 .nf
90 .in +4n
91
92 struct semid_ds {
93     struct ipc_perm sem_perm;  /* 所有権と許可 */
94     time_t          sem_otime; /* 最後の semop の時刻 */
95     time_t          sem_ctime; /* 最後に変更が行われた時刻 */
96     unsigned long   sem_nsems; /* 集合内のセマフォの数 */
97 };
98 .in
99 .fi
100 .PP
101 \fIipc_perm\fP 構造体は以下のように定義されている (強調されたフィールドは \fBIPC_SET\fP を使って設定可能である):
102 .PP
103 .nf
104 .in +4n
105 struct ipc_perm {
106     key_t          __key; /* semget(2) に与えられるキー */
107     uid_t          \fBuid\fP;   /* 所有者 (owner) の実効 UID */
108     gid_t          \fBgid\fP;   /* 所有者の実効 GID */
109     uid_t          cuid;  /* 作成者 (creator) の実効 UID */
110     gid_t          cgid;  /* 作成者の実効 GID */
111     unsigned short \fBmode\fP;  /* 許可 */
112     unsigned short __seq; /* シーケンス番号 */
113 };
114 .in
115 .fi
116 .PP
117 \fIcmd\fP として有効な値は次の通りである。
118 .TP  10
119 \fBIPC_STAT\fP
120 \fIsemid\fP に関連づけられたカーネルデータ構造体の情報を \fIarg.buf\fP で指された \fIsemid_ds\fP 構造体へコピーする。
121 \fIsemnum\fP 引き数は無視される。 呼び出したプロセスはそのセマフォ集合に対する 読み込み許可を持たなければならない。
122 .TP 
123 \fBIPC_SET\fP
124 \fIarg.buf\fP で指定された \fIsemid_ds\fP 構造体のメンバーのいくつかの値を、
125 このセマフォに関連づけられたカーネルデータ構造体に書き込み、 \fIsem_ctime\fP メンバーの値も更新する。 構造体の以下のメンバーが更新される:
126 \fIsem_perm.uid\fP, \fIsem_perm.gid\fP, \fIsem_perm.mode\fP (の最下位 9 ビット)。
127 呼び出したプロセスの実効 UID が所有者 (\fIsem_perm.uid\fP)  または作成者 (\fIsem_perm.cuid\fP)
128 と一致するか、呼び出した人が特権を持たなければならない。 \fIsemnum\fP 引き数は無視される。
129 .TP 
130 \fBIPC_RMID\fP
131 セマフォ集合をただちに削除し、その集合上の \fBsemop\fP(2)  コールでブロックされている全てのプロセスを目覚めさせる (エラー値が返されて、
132 \fIerrno\fP に \fBEIDRM\fP が設定される)。 呼び出したプロセスの実効ユーザ ID が そのセマフォ集合の作成者または所有者と一致するか、
133 呼び出した人が特権を持たなければならない。 \fIsemnum\fP 引き数は無視される。
134 .TP 
135 \fBIPC_INFO\fP (Linux 固有)
136 システム全体でのセマフォの制限とパラメータに関する情報を、 \fIarg.__buf\fP が指す構造体に入れて返す。 この構造体は \fIseminfo\fP
137 型である。 \fIseminfo\fP は \fB_GNU_SOURCE\fP 機能検査マクロが定義された場合に \fI<sys/sem.h>\fP
138 で以下のように定義される:
139 .nf
140 .in +4n
141
142 struct  seminfo {
143     int semmap;  /* セマフォ・マップの最大エントリ数;
144                     カーネル内では未使用 */
145     int semmni;  /* セマフォ集合の最大数 */
146     int semmns;  /* 全セマフォ集合中のセマフォの
147                     最大数 */
148     int semmnu;  /* アンドゥ構造体のシステム全体での
149                     最大数; カーネル内では未使用 */
150     int semmsl;  /* 一つのセマフォ集合の最大セマフォ数 */
151     int semopm;  /* semop(2) に渡す操作の最大数 */
152     int semume;  /* プロセスあたりのアンドゥ・エントリ
153                     の最大数; カーネル内では未使用 */
154     int semusz;  /* 構造体 sem_undo のサイズ */
155     int semvmx;  /* セマフォの最大値 */
156     int semaem;  /* セマフォの調整 (semaphore adjustment;
157                      SEM_UNDO) のために記録される最大値 */
158 };
159
160 .in
161 .fi
162 設定 \fIsemmsl\fP, \fIsemmns\fP, \fIsemopm\fP, \fIsemmni\fP は \fI/proc/sys/kernel/sem\fP
163 経由で変更可能である。 詳しくは \fBproc\fP(5)  を参照。
164 .TP 
165 \fBSEM_INFO\fP (Linux 固有)
166 \fBIPC_INFO\fP のときと同じ情報を格納した \fIseminfo\fP 構造体を返す。 但し、以下のフィールドにはセマフォが消費しているシステム資源に
167 関する情報が格納される点が異なる。 \fIsemusz\fP フィールドは現在システム上に存在するセマフォ集合の数を返す。 \fIsemaem\fP
168 フィールドはシステム上の全てのセマフォ集合に含まれる セマフォの総数を返す。
169 .TP 
170 \fBSEM_STAT\fP (Linux 固有)
171 \fBIPC_STAT\fP と同じく \fIsemid_ds\fP 構造体を返す。 但し、 \fIsemid\fP
172 引き数は、セマフォ識別子ではなく、システム上の全てのセマフォ集合 に関する情報を管理するカーネルの内部配列へのインデックスである。
173 .TP 
174 \fBGETALL\fP
175 集合の全てのセマフォの \fBsemval\fP の値 (現在の値) を \fIarg.array\fP に返す。 \fIsemnum\fP 引き数は無視される。
176 呼び出したプロセスはそのセマフォ集合に読み込み許可を持たなければならない。
177 .TP 
178 \fBGETNCNT\fP
179 システムコールは集合の \fIsemnum\fP 番目のセマフォの \fBsemncnt\fP の値を返す (集合の \fIsemnum\fP 番目のセマフォの
180 \fBsemval\fP の増加を待っているプロセスの数を返す)。 呼び出したプロセスはそのセマフォ集合に読み込み許可を持たなければならない。
181 .TP 
182 \fBGETPID\fP
183 システムコールは集合の \fIsemnum\fP 番目のセマフォの \fBsempid\fP の値 (集合の \fIsemnum\fP 番目のセマフォに最後に
184 \fBsemop\fP(2)  コールを実行したプロセスの PID) を返す。 呼び出したプロセスはそのセマフォ集合に読み込み許可を持たなければならない。
185 .TP 
186 \fBGETVAL\fP
187 システムコールは集合の \fIsemnum\fP 番目のセマフォの \fBsemval\fP の値を返す。
188 呼び出したプロセスはそのセマフォ集合に読み込み許可を持たなければならない。
189 .TP 
190 \fBGETZCNT\fP
191 システムコールは集合の \fIsemnum\fP 番目のセマフォの \fBsemzcnt\fP の値を返す (集合の \fIsemnum\fP 番目のセマフォの
192 \fBsemval\fP の値が 0 になるのを待っているプロセスの数を返す)。 呼び出したプロセスはそのセマフォ集合に読み込み許可を持たなければならない。
193 .TP 
194 \fBSETALL\fP
195 集合の全てのセマフォの \fBsemval\fP に \fIarg.array\fP で指定された値を設定する。 その集合に関連する \fIsemid_ds\fP
196 構造体の \fIsem_ctime\fP メンバーの値も更新する。 全てのプロセスのセマフォの変更についてのアンドゥ・エントリ (\fBsemop\fP(2)
197 を参照) は消去 (clear) される。 セマフォの値の変更により、他のプロセス内でブロックされている \fBsemop\fP(2)
198 コールの続行が許可されると、それらのプロセスは起こされる (wake up)。 \fIsemnum\fP 引き数は無視される。
199 呼び出したプロセスはそのセマフォ集合に 変更 (書き込み) 許可を持たなければならない。
200 .TP 
201 \fBSETVAL\fP
202 集合の \fIsemnum\fP 番目のセマフォの \fBsemval\fP に \fIarg.val\fP の値を設定する。その集合に関連する \fIsemid_ds\fP
203 構造体の \fIsem_ctime\fP メンバーの値も更新する。 全てのプロセスのセマフォの変更についてのアンドゥ・エントリは消去される。
204 セマフォの値の変更により、他のプロセス内でブロックされている \fBsemop\fP(2)  コールの続行が許可されると、それらのプロセスは起こされる
205 (wake up)。 呼び出したプロセスはそのセマフォ集合に 変更 (書き込み) 許可を持たなければならない。
206 .SH 返り値
207 失敗した場合、 \fBsemctl\fP()  は \-1 を返し、 \fIerrno\fP にそのエラーを示す。
208
209 そうでなければシステムコールは \fIcmd\fP によって以下の負でない値を返す:
210 .TP  12
211 \fBGETNCNT\fP
212 \fBsemncnt\fP の値
213 .TP 
214 \fBGETPID\fP
215 \fBsempid\fP の値
216 .TP 
217 \fBGETVAL\fP
218 \fBsemval\fP の値
219 .TP 
220 \fBGETZCNT\fP
221 \fBsemzcnt\fP の値
222 .TP 
223 \fBIPC_INFO\fP
224 全てのセマフォ集合に関する情報を管理しているカーネルの内部配列の使用中 エントリのインデックスの最大値
225 (この情報は、システムの全てのセマフォ集合に関する情報を取得するために \fBSEM_STAT\fP 操作を繰り返し実行する際に使用できる)
226 .TP 
227 \fBSEM_INFO\fP
228 \fBIPC_INFO\fP と同じ
229 .TP 
230 \fBSEM_STAT\fP
231 \fIsemid\fP で指定されたインデックスを持つセマフォ集合の識別子
232 .LP
233 \fIcmd\fP の値がそれ以外の場合、成功すると 0 が返される。
234 .SH エラー
235 失敗した場合は \fIerrno\fP には以下の値のどれかが設定される:
236 .TP 
237 \fBEACCES\fP
238 \fIcmd\fP 引き数が \fBGETALL\fP, \fBGETPID\fP, \fBGETVAL\fP, \fBGETNCNT\fP, \fBGETZCNT\fP,
239 \fBIPC_STAT\fP, \fBSEM_STAT\fP, \fBSETALL\fP, \fBSETVAL\fP のうちの何れかの値を持ち、
240 呼び出したプロセスがセマフォに対して必要とされる許可と \fBCAP_IPC_OWNER\fP ケーパビリティ (capability) を持っていない。
241 .TP 
242 \fBEFAULT\fP
243 \fIarg.buf\fP または \fIarg.array\fP で指されているアドレスにアクセスすることができない。
244 .TP 
245 \fBEIDRM\fP
246 セマフォ集合が削除された。
247 .TP 
248 \fBEINVAL\fP
249 \fIcmd\fP または \fIsemid\fP に無効な値が指定された。 もしくは、 \fBSEM_STAT\fP 操作の場合に、 \fIsemid\fP
250 で指定されたインデックス値が現在未使用の配列のスロットを参照いていた。
251 .TP 
252 \fBEPERM\fP
253 \fIcmd\fP 引き数に \fBIPC_SET\fP または \fBIPC_RMID\fP が指定され、呼び出したプロセスの実効ユーザ ID がセマフォの
254 (\fIsem_perm.cuid\fP で見つかる) 作成者または (\fIsem_perm.uid\fP で見つかる) 所有者でもなく、 プロセスが
255 \fBCAP_SYS_ADMIN\fP ケーパビリティを持たない。
256 .TP 
257 \fBERANGE\fP
258 \fIcmd\fP 引き数に \fBSETALL\fP または \fBSETVAL\fP が指定され、(集合のセマフォのどれかの)  \fBsemval\fP に設定される値が
259 0 より小さいか、実装の制限 \fBSEMVMX\fP よりも大きい。
260 .SH 準拠
261 .\" SVr4 documents more error conditions EINVAL and EOVERFLOW.
262 SVr4, POSIX.1\-2001.
263
264 POSIX.1\-2001 では \fIsemid_ds\fP 構造体の \fIsem_nsems\fP フィールドは \fIunsigned\ short\fP
265 型を持つと規定されており、 他のほとんどのシステムでこのフィールドは \fIunsigned\ short\fP 型になっている。 Linux 2.4
266 以前ではそうなっていたが、 Linux 2.4 以降ではこのフィールドは \fIunsigned\ long\fP 型である。
267 .SH 注意
268 .\" Like Linux, the FreeBSD man pages still document
269 .\" the inclusion of these header files.
270 Linux や POSIX の全てのバージョンでは、 \fI<sys/types.h>\fP と \fI<sys/ipc.h>\fP
271 のインクルードは必要ない。しかしながら、いくつかの古い実装ではこれらのヘッダファイルのインクルードが必要であり、 SVID
272 でもこれらのインクルードをするように記載されている。このような古いシステムへの移植性を意図したアプリケーションではこれらのファイルをインクルードする必要があるかもしれない。
273
274 \fBIPC_INFO\fP, \fBSEM_STAT\fP, \fBSEM_INFO\fP 操作は \fBipcs\fP(1)
275 プログラムによって割当られた資源について情報を提供するために使用される。 将来的にはこれらは変更されるか、 /proc
276 ファイル・システム・インタフェースに移動されるかもしれない。
277 .LP
278 \fI構造体 semid_ds\fP 内の多くのフィールドは、 Linux 2.2 では \fIshort\fP 型だったが、Linux 2.4 では
279 \fIlong\fP 型になった。 この利点を生かすには、glibc\-2.1.91 以降の環境下で 再コンパイルすれば十分である。
280 カーネルは新しい形式の呼び出しと古い形式の呼び出しを \fIcmd\fP 内の \fBIPC_64\fP フラグで区別する。
281 .PP
282 初期のバージョンの glibc では、 \fIsemun\fP 共用体は \fI<sys/sem.h>\fP で定義されていたが、
283 POSIX.1\-2001 では呼び出し側がこの共用体を定義する必要がある。 この共用体が定義されて\fIいない\fP glibc のバージョンでは、 マクロ
284 \fB_SEM_SEMUN_UNDEFINED\fP が \fI<sys/sem.h>\fP で定義されている。
285 .PP
286 以下は \fBsemctl\fP()  コールに影響するセマフォ集合のシステム制限:
287 .TP 
288 \fBSEMVMX\fP
289 \fBsemval\fP の最大値 : 実装依存 (32767)。
290 .LP
291 移植性を高めるための一番良い方法は、常に 4 個の引き数で \fBsemctl\fP()  を呼び出すことである。
292 .SH 関連項目
293 \fBipc\fP(2), \fBsemget\fP(2), \fBsemop\fP(2), \fBcapabilities\fP(7),
294 \fBsem_overview\fP(7), \fBsvipc\fP(7)
295 .SH この文書について
296 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
297 である。プロジェクトの説明とバグ報告に関する情報は
298 http://www.kernel.org/doc/man\-pages/ に書かれている。