sigaction を使用して C で Ctrl-C イベントを処理する
C で Ctrl-C イベントを効率的にキャッチするには、最も信頼できるアプローチは 'sigaction' を利用することです。関数。単純な 'signal' 関数よりも優れた制御と互換性が提供されます。
sigaction の実装には構造化されたアプローチが必要です:
-
sigaction の構造を宣言します:
という名前の「sigaction」構造体を定義します。 'sigIntHandler'.
-
シグナル ハンドラーを設定します:
ハンドラー関数のアドレス ('my_handler') を 'sigIntHandler.sa_handler' に割り当てます。ハンドラー関数では、シグナルの受信時に必要なアクションを実行します。
-
シグナル マスクの初期化:
「sigemptyset」を使用して、「sigIntHandler.sa_mask」を空のシグナル セットに初期化します。これにより、ハンドラーは他のシグナルをブロックすることなく、指定されたシグナルに応答できるようになります。
-
シグナル アクション フラグの設定:
デフォルト オプションを使用するには、「sigIntHandler.sa_flags」を「0」に設定します。
-
シグナルアクションの登録:
使用「sigaction」を「SIGINT」シグナルと定義されたハンドラー構造体 (「sigIntHandler」) とともに使用して、シグナルアクションを登録します。
-
実行の一時停止:
「pause()」を呼び出して、シグナルを受信するまでプログラムの実行を停止します。
-
例コード:
質問からの次の変更されたコードは、「sigaction」の使用を示しています:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # include <signal.h>
# include <stdlib.h>
# include <stdio.h>
# include <unistd.h>
void my_handler(int s){
printf( "Caught signal %d\n" ,s);
exit (1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
|
ログイン後にコピー
このアプローチは、 C で Ctrl-C イベントを処理するための堅牢なメカニズムを提供します。さまざまな実装における信頼性と効率性を確保します。
以上がC で Ctrl-C イベントを処理するために sigaction をどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。