OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man3 / sigvec.3
1 '\" t
2 .\" Copyright (c) 2005 by Michael Kerrisk <mtk.manpages@gmail.com>
3 .\"
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein.  The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\"
24 .\" Japanese Version Copyright (c) 2005 Akihiro MOTOKI all rights reserved.
25 .\" Translated 2005-12-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
26 .\"
27 .TH SIGVEC 3 2007-07-26 "Linux" "Linux Programmer's Manual"
28 .SH 名前
29 sigvec, sigblock, sigsetmask, siggetmask, sigmask \- BSD 版シグナル API
30 .SH 書式
31 .B #include <signal.h>
32 .sp
33 .BI "int sigvec(int " sig ", struct sigvec *" vec ", struct sigvec *" ovec );
34 .sp
35 .BI "int sigmask(int " signum );
36 .sp
37 .BI "int sigblock(int " mask );
38 .sp
39 .BI "int sigsetmask(int " mask );
40 .sp
41 .B int siggetmask(void);
42 .sp
43 .in -4n
44 glibc 向けの機能検査マクロの要件
45 .RB ( feature_test_macros (7)
46 参照):
47 .in
48 .sp
49 上記の全ての関数:
50 _BSD_SOURCE
51 .SH 説明
52 これらの関数は、昔ながらの BSD 版シグナル API を使用しているプログラム
53 に対して互換性のあるインタフェースを glibc で提供するものである。
54 この API は過去のものであり、新しいアプリケーションでは
55 POSIX シグナル API
56 .RB ( sigaction (2),
57 .BR sigprocmask (2)
58 など) を使用すべきである。
59
60 関数
61 .BR sigvec ()
62 は、(POSIX の
63 .BR sigaction (2)
64 と同様に) シグナル
65 .I sig
66 の動作の設定・取得を行う。
67 .I vec
68 は、NULL 以外の場合、
69 .I sig
70 の新しい動作を定義した
71 .I sigvec
72 構造体へのポインタである。
73 .I ovec
74 は、NULL 以外の場合、
75 .I sig
76 の変更前の動作を返すために使用される
77 .I sigvec
78 構造体へのポインタである。
79 .I sig
80 の動作を変更せずに現在の動作を取得するためには、
81 .I vec
82 に NULL を指定し、
83 .I ovec
84 に NULL でないポインタを指定すればよい。
85
86 .B SIGKILL
87
88 .B SIGSTOP
89 の動作は変更できない。
90
91 .I sigvec
92 構造体は以下の通りである:
93 .in +4n
94 .nf
95
96 struct sigvec {
97     void (*sv_handler)();  /* Signal disposition */
98     int    sv_mask;        /* Signals to be blocked in handler */
99     int    sv_flags;       /* Flags */
100 };
101
102 .fi
103 .in
104 .I sv_handler
105 フィールドはシグナルの動作を指定するもので、
106 シグナルハンドラ関数のアドレスか、
107 .B SIG_DFL
108
109 .B SIG_IGN
110 のいずれかを指定できる。
111 .B SIG_DFL
112 はシグナルに適用されるデフォルトの動作を意味し、
113 .B SIG_IGN
114 はシグナルを無視することを意味する。
115
116 .I sv_handler
117 にシグナルハンドラのアドレスを指定した場合、
118 .I sv_mask
119 はハンドラが実行中にブロックされるべきシグナルのマスクを指定する。
120 また、ハンドラを起動したシグナル自身はデフォルトでブロックされる。
121 .B SIGKILL
122
123 .B SIGSTOP
124 をブロックしようとした場合には、黙って無視される。
125
126 .I sv_handler
127 にシグナルハンドラのアドレスを指定した場合、
128 .I sv_flags
129 フィールドはハンドラが呼ばれた際の挙動を制御するフラグを指定する。
130 このフィールドには、0 か、以下のフラグを 1個以上指定できる:
131 .TP
132 .B SV_INTERRUPT
133 シグナルハンドラが停止中のシステムコールを中断した場合、
134 ハンドラから復帰しても、システムコールは再開されず、
135 エラー
136 .B EINTR
137 で失敗する。
138 このフラグを指定しなかった場合、システムコールは
139 デフォルトで再開される。
140 .TP
141 .B SV_RESETHAND
142 シグナルハンドラを呼び出す前にシグナルの動作を
143 デフォルトにリセットする。
144 このフラグを指定しなかった場合、もう一度
145 .BR sigvec ()
146 を呼び出して明示的に削除されるか、プロセスが
147 .BR execve (2)
148 を実行するまで、ハンドラは設定されたままとなる。
149 .TP
150 .B SV_ONSTACK
151 代替シグナルスタック上でシグナルハンドラを実行する
152 (歴史的に、BSD では代替シグナルスタックは廃止された関数
153 .BR sigstack ()
154 を使って設定する。POSIX では、代わりに
155 .BR sigaltstack (2)
156 を使用する)。
157 .PP
158 関数
159 .BR sigmask ()
160
161 .I signum
162 に対する「シグナルマスク」を構成して返す。
163 例えば、以下のようなコードを使うと、
164 .BR sigvec ()
165 に渡す
166 .I vec.sv_mask
167 を初期化できる。
168 .nf
169
170     vec.sv_mask = sigmask(SIGQUIT) | sigpause(SIGABRT);
171                 /* Block SIGQUIT and SIGABRT during
172                    handler execution */
173 .fi
174 .PP
175 .BR sigblock ()
176 関数は、
177 .I mask
178 にあるシグナルをプロセスのシグナルマスクに追加し
179 (POSIX の
180 .I sigprocmask(SIG_BLOCK)
181 と同様)、変更前のプロセスのシグナルマスクを返す。
182 .B SIGKILL
183
184 .B SIGSTOP
185 をブロックしようとした場合には、黙って無視される。
186 .PP
187 .BR sigsetmask ()
188 関数はプロセスのシグナルマスクを
189 .I mask
190 で指定された値に設定し (POSIX の
191 .I sigprocmask(SIG_SETMASK)
192 と同様)、変更前のプロセスのシグナルマスクを返す。
193 .PP
194 .BR siggetmask ()
195 関数はプロセスの現在のシグナルマスクを返す。この関数は
196 .I sigblock(0)
197 と等価である。
198 .SH 返り値
199 .BR sigvec ()
200 関数は成功すると 0 を返す。エラーの場合、\-1 を返し、
201 .I errno
202 にエラーを示す値をセットする。
203
204 .BR sigblock ()
205
206 .BR sigsetmask ()
207 は変更前のシグナルマスクを返す。
208
209 .BR sigmask ()
210 関数は
211 .I signum
212 のシグナルマスクを返す。
213 .SH エラー
214 .BR sigaction (2)
215
216 .BR sigprocmask (2)
217 の「エラー」の節を参照。
218 .SH 準拠
219 これらの関数のうち
220 .BR siggetmask ()
221 以外の全ては 4.3BSD にあった。
222 .BR siggetmask ()
223 の出自ははっきりしない。
224 これらの関数は廃止予定であり、新しいプログラムでは使用しないこと。
225 .SH 注意
226 4.3BSD では、信頼性のあるシグナル処理機構を提供する
227 .RI ( vec.sv_mask
228 を 0 で
229 .BR sigvec ()
230 を呼び出したときと同様)。
231 System V が提供する処理機構は信頼性のないものである。
232 POSIX.1-2001 では、
233 .BR signal ()
234 のこの点は規定しないままとなっている。
235 さらなる詳細については
236 .BR signal (2)
237 を参照。
238
239 BSD と System V のどちらのシステムでも
240 シグナルを待つために、
241 .BR sigpause (3)
242 という名前の関数が提供されているが、
243 この関数の引き数は両方のシステムで異なる。
244 詳細は
245 .BR sigpause (3)
246 を参照。
247 .SH 関連項目
248 .BR kill (2),
249 .BR pause (2),
250 .BR sigaction (2),
251 .BR signal (2),
252 .BR sigprocmask (2),
253 .BR raise (3),
254 .BR sigpause (3),
255 .BR sigset (3),
256 .BR signal (7)