Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【C/C++入門】raise()関数の使い方を解説!シグナル送信の基本とサンプルコード

raise()関数とは

C言語およびC++におけるraise()関数は、実行中のプログラムに対してシグナル(信号)を送信するために使用される関数です。raise()が呼び出されると、事前に定義されているsignal()関数が起動され、送信されたシグナルを無視するか、登録済みのシグナルハンドラを呼び出すかが判定されます。

raise()関数は「signal.h」ヘッダーファイルで宣言されており、処理が成功した場合は0を返し、失敗した場合は0以外の値を返します。

raise()関数の構文

int raise(int signal)

引数

signal − 呼び出したいシグナル番号を指定します。

戻り値

  • 成功時:0
  • 失敗時:0以外の値

raise()関数の使用例

ここで、C言語におけるraise()関数の具体的な使用例を見てみましょう。

#include <signal.h>
#include <stdio.h>
void handler(int sig) {
    printf("Signal received : %d\n", sig);
}
int main() {
    signal(SIGILL, handler);
    printf("Sending signal : %d\n", SIGILL);
    raise(SIGILL);
    return 0;
}

実行結果

Sending signal : 4
Signal received : 4

プログラムの解説

上記のプログラムでは、main()関数の前にシグナルハンドラとなるhandler()関数を定義しています。main()関数内では、まずsignal()関数を使ってSIGILL(不正命令シグナル:Signal Illegal Instruction)に対するハンドラを登録し、その後raise()関数によってSIGILLシグナルを送信しています。送信されたシグナルは登録されたhandler()関数で受け取られ、シグナル番号「4」が出力されます。

signal(SIGILL, handler);
printf("Sending signal : %d\n", SIGILL);
raise(SIGILL);

主な標準シグナルの種類

参考までに、C/C++でよく使用される主な標準シグナルは以下の通りです。

  • SIGABRT − プログラムの異常終了(abort関数による)
  • SIGFPE − 浮動小数点演算例外(ゼロ除算など)
  • SIGILL − 不正な命令の検出
  • SIGINT − ユーザーからの割り込み要求(Ctrl+Cなど)
  • SIGSEGV − 不正なメモリ参照
  • SIGTERM − プログラムへの終了要求

  1. C/C++のmbsrtowcs()関数とは?構文・パラメータ・戻り値と実例を解説

    本記事では、C++ STLに含まれるstd::mbsrtowcs()関数の仕組み、構文、および具体的な使用例について詳しく解説します。 std::mbsrtowcs()とは? std::mbsrtowcs()は、C++ STLに組み込まれている関数で、<cwchar>ヘッダーファイル内で定義されています。関数名のmbsrtowcs()は「multibyte string to wide character string(マルチバイト文字列からワイド文字列への変換)」を意味し、再開可能な変換状態を維持しながら、NULL終端されたマルチバイト文字列をワイド文字列表現へと変換します。この

  2. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int