Cライブラリ関数 -raise()
説明
Cライブラリ関数int raise(int sig)シグナルの生成を促しますsig。sigパラメータはSIGマクロと互換性があります。
raiseこの関数はC標準ライブラリの関数で、現在のプロセスにシグナルを送信するために使用されます。これは<signal.h>ヘッダーファイル内で定義されており、プログラムが自身にシグナルを送信して対応するシグナルハンドラをトリガーできるようにします。
宣言
以下は raise() 関数の宣言です。
int raise(int sig)
パラメータ
- sig-- 送信するシグナルコード。以下は重要な標準シグナル定数です:
| 宏 | シグナル |
|---|---|
| SIGABRT | (Signal Abort) プログラムの異常終了。 |
| SIGFPE | (Signal Floating-Point Exception) 算術演算エラー。0による除算やオーバーフローなど(浮動小数点演算とは限りません)。 |
| SIGILL | (Signal Illegal Instruction) 不正な関数イメージ。不正な命令など。通常はコード内の何らかの変種またはデータの実行試行によって引き起こされます。 |
| SIGINT | (Signal Interrupt) 割り込みシグナル。ctrl-Cなど、通常はユーザーによって生成されます。 |
| SIGSEGV | (Signal Segmentation Violation) メモリへの不正アクセス。存在しないメモリセルへのアクセスなど。 |
| SIGTERM | (Signal Terminate) このプログラムに送信される終了要求シグナル。 |
戻り値
成功した場合、この関数はゼロを返します。そうでない場合は非ゼロを返します。
例
以下の例は raise() 関数の使い方を示しています。
例
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
void signal_catchfunc(int);
int main() {
int ret;
signal(SIGINT, signal_catchfunc);
printf("シグナルの生成を開始します\n");
ret = raise(SIGINT);
if (ret != 0) {
printf("エラー、SIGINTシグナルを生成できません\n");
exit(0);
}
printf(終了....\n");
return 0;
}
void signal_catchfunc(int signal) {
printf("シグナルを捕捉しました\n");
}
#include<stdlib.h>
#include<signal.h>
void signal_catchfunc(int);
int main() {
int ret;
signal(SIGINT, signal_catchfunc);
printf("シグナルの生成を開始します\n");
ret = raise(SIGINT);
if (ret != 0) {
printf("エラー、SIGINTシグナルを生成できません\n");
exit(0);
}
printf(終了....\n");
return 0;
}
void signal_catchfunc(int signal) {
printf("シグナルを捕捉しました\n");
}
上記のプログラムをコンパイルして実行してみましょう。次の結果が生成されます:
信号の生成を開始します !! 信号捕捉 !! 終了...その他の拡張