ホームページ >バックエンド開発 >C++ >C で Ctrl-C イベントを処理するために sigaction をどのように使用できますか?

C で Ctrl-C イベントを処理するために sigaction をどのように使用できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-15 03:41:02314ブラウズ

How Can `sigaction` Be Used to Handle Ctrl-C Events in C  ?

sigaction を使用して C で Ctrl-C イベントを処理する

C で Ctrl-C イベントを効率的にキャッチするには、最も信頼できるアプローチは 'sigaction' を利用することです。関数。単純な 'signal' 関数よりも優れた制御と互換性が提供されます。

sigaction の実装には構造化されたアプローチが必要です:

  1. sigaction の構造を宣言します:
    という名前の「sigaction」構造体を定義します。 'sigIntHandler'.
  2. シグナル ハンドラーを設定します:
    ハンドラー関数のアドレス ('my_handler') を 'sigIntHandler.sa_handler' に割り当てます。ハンドラー関数では、シグナルの受信時に必要なアクションを実行します。
  3. シグナル マスクの初期化:
    「sigemptyset」を使用して、「sigIntHandler.sa_mask」を空のシグナル セットに初期化します。これにより、ハンドラーは他のシグナルをブロックすることなく、指定されたシグナルに応答できるようになります。
  4. シグナル アクション フラグの設定:
    デフォルト オプションを使用するには、「sigIntHandler.sa_flags」を「0」に設定します。
  5. シグナルアクションの登録:
    使用「sigaction」を「SIGINT」シグナルと定義されたハンドラー構造体 (「sigIntHandler」) とともに使用して、シグナルアクションを登録します。
  6. 実行の一時停止:
    「pause()」を呼び出して、シグナルを受信するまでプログラムの実行を停止します。
  7. 例コード:
    質問からの次の変更されたコードは、「sigaction」の使用を示しています:
#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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。