BohYoh.comトップページへ  signal
C言語 標準ライブラリ アルファベット順索引 ヘッダ別索引 ホームページへ C言語講座のページ

シグナル操作
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関数の呼出し以外でシグナルが発生し、かつ次のいずれかの場合であるならば、その動作は定義されない。
  • シグナル処理ルーチンが、この規格で規定するライブラリ中の関数を呼出す場合。だだし、シグナル処理ルーチンの呼出しを発生させたシグナルに対応するシグナル番号を第1実引数としてsignal関数自身を呼出す場合を除く。
  • シグナル処理ルーチンが、静的記憶域期間をもつ任意のオブジェクトを参照する場合。ただし、volatile sig_atomic_t型の静的記憶域期間をもつ変数に値を代入する場合を除く。さらに、signal関数の呼出しの返却値がSIG_ERRの場合、errnoの値は不定とする。
 プログラム開始処理時に、
   signal(sig, SIG_IGN);
と同等のことを、処理系定義の方法で選ばれたいくつかのシグナルに対して実行させても構わない。その他のすべてにシグナルに対しては、
   signal(sig, SIG_DFL);
と同等のことを実行する。
いかなるライブラリ関数も、本関数を呼び出さないかのように動作する。
返却値 要求を受け入れることができる場合、signal関数は、指定されたシグナルsigに対して最も新しく呼び出されたsignal関数のfunc関数の値を返す。そうでない場合、SIG_ERRの値を返し、正の値をerrnoに格納する。


BohYoh.comトップページへ