signal |
| ||||
signal | |
ヘッダ | #include <signal.h> |
形 式 | void (*signal(int sig, void (*func)(int)))(int); |
機 能 | シグナル番号sigを受け取った際の操作として、次の三つの方法から一つを選択する。 funcの値がSIG_DFLの場合、そのシグナルに対する省略時の操作を行う。 func関数がSIG_IGNの場合、シグナルを無視する。その場合、funcはそのシグナルが発生した時に呼ばれる関数を指していなければならない。その関数をシグナル処理ルーチン(signal handler)と呼ぶ。 シグナルが発生した時にfunc関数を指している場合、最初にsignal(sig, SIG_DFL);と同等のことを実行するかまたはそのシグナルを遮断する処理系定義の処置を行う。(sigの値がSIGILLの場合、SIG_DFLに再設定するかどうかは処理系定義とする)。次に、(*func)(sig);と同等のことを実行する。関数funcは、return文の実行またはabort関数、exit関数もしくはlongjmp関数を呼び出すことによって終了しても構わない。funcがreturn文を実行し、sigの値がSIGFPEまたは計算例外に対応する他の処理系定義の値であった場合、その動作は定義されない。その他の場合、プログラムは割り込まれたところから実行を再開する。 abort関数またはraise関数の呼出し以外でシグナルが発生し、かつ次のいずれかの場合であるならば、その動作は定義されない。
signal(sig, SIG_IGN); と同等のことを、処理系定義の方法で選ばれたいくつかのシグナルに対して実行させても構わない。その他のすべてにシグナルに対しては、 signal(sig, SIG_DFL); と同等のことを実行する。 いかなるライブラリ関数も、本関数を呼び出さないかのように動作する。 |
返却値 | 要求を受け入れることができる場合、signal関数は、指定されたシグナルsigに対して最も新しく呼び出されたsignal関数のfunc関数の値を返す。そうでない場合、SIG_ERRの値を返し、正の値をerrnoに格納する。 |