C-standard-library-c-function-signal

提供:Dev Guides
移動先:案内検索

Cライブラリ関数-signal()

説明

Cライブラリ関数* void(* signal(int sig、void(* func)(int)))(int)は、信号を処理する関数を設定します。 シグナル番号 *sig のシグナルハンドラ。

宣言

以下は、signal()関数の宣言です。

void (*signal(int sig, void (*func)(int)))(int)

パラメーター

  • sig -これは、ハンドリング機能が設定されている信号番号です。 以下は、いくつかの重要な標準信号番号です-
Sr.No. Macro & Signal
1

SIGABRT

(Signal Abort)関数によって開始されるなどの異常終了。

2

SIGFPE

(信号浮動小数点例外)ゼロ除算やオーバーフローを引き起こす演算などの誤った算術演算(必ずしも浮動小数点演算ではない)。

3

SIGILL

(信号の不正な命令)不正な命令などの無効な機能イメージ。 これは通常、コードの破損またはデータの実行の試行が原因です。

4

SIGINT

(信号割り込み)インタラクティブな注意信号。 通常、アプリケーションユーザーによって生成されます。

5

SIGSEGV

(信号セグメンテーション違反)ストレージへの無効なアクセス-プログラムがメモリの外で読み書きしようとすると、プログラムに割り当てられます。

6

SIGTERM

(Signal Terminate)プログラムに送信された終了要求。

  • func -これは関数へのポインタです。 これは、プログラマまたは次の事前定義された関数のいずれかによって定義された機能にすることができます-
Sr.No. Function & Description
1

SIG_DFL

デフォルト処理-シグナルは、その特定のシグナルのデフォルトアクションによって処理されます。

2

SIG_IGN

Ignore Signal-信号は無視されます。

戻り値

この関数は、シグナルハンドラの以前の値、またはエラー時にSIG_ERRを返します。

次の例は、signal()関数の使用法を示しています。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

void sighandler(int);

int main () {
   signal(SIGINT, sighandler);

   while(1) {
      printf("Going to sleep for a second...\n");
      sleep(1);
   }
   return(0);
}

void sighandler(int signum) {
   printf("Caught signal %d, coming out...\n", signum);
   exit(1);
}

上記のプログラムをコンパイルして実行すると、次の結果が生成され、プログラムは無限ループに入ります。 プログラムを終了するには、CTRL + Cキーを使用しました。

Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Caught signal 2, coming out...