≫ ホーム ≫ C言語ヘッダファイル別一覧 | C言語アルファベット別一覧 ≫ signal.h ≫ signal
シグナル (signal) をキャッチします.
#include <signal.h>
void (*signal( int sig, /* シグナル番号 */ void (*func) (int) /* シグナルハンドラ */ )) (int);
signal 関数は, 引数 sig で指定されたシグナル番号に応じて, 引数 func で指定されたシグナルハンドラ (signal handler) を実行します.
abort 関数または, raise 関数で呼び出されるシグナルハンドラ内でraise 関数を呼び出してはいけません.
注意!
POSIX 準拠のシステムでは, signal 関数の代わりに sigaction 関数を使用したほうがよいとされています.
sig に指定するシグナル番号は以下の通りです.
引数 | 意味 |
---|---|
SIGABRT | 異常終了 |
SIGFPE | 誤った算術演算 |
SIGILL | 不正な関数イメージの検出 |
SIGINT | 対話的なアテンションシグナルの受け取り |
SIGSEGV | 記憶域への不正なアクセス |
SIGTERM | プログラムへ送信された終了要求 |
上記以外 | 各処理系で定義されているシグナル番号 |
func に指定可能なマクロを以下に示します.
引数 | 意味 |
---|---|
SIG_DEL | そのシグナルに対するデフォルトの操作を行う. |
SIG_IGN | シグナルを無視する. |
上記以外 | ユーザーが独自に定義したシグナルハンドラ. |
signal 関数と raise 関数を使用したサンプルプログラムを以下に示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
/* functions */
void sig_catch(int sig);
/* main */
int main(void) {
/* シグナルハンドラの設定 */
if (SIG_ERR == signal(SIGABRT, sig_catch)) {
fprintf(stderr, "error.\n");
return EXIT_FAILURE;
}
/* シグナルを送信する */
raise(SIGABRT);
return EXIT_SUCCESS;
}
/** シグナルハンドラ */
void sig_catch(int sig) {
printf("signal: %d\n", sig);
}
サンプルプログラムの実行結果は以下のようになります.
signal: 22
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.