ホームページ >バックエンド開発 >C++ >C で Ctrl C 信号をインターセプトするにはどうすればよいですか?

C で Ctrl C 信号をインターセプトするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-16 15:26:03386ブラウズ

How can I intercept Ctrl C signals in C  ?

C での Control-C 信号のインターセプト

プログラミングの領域では、ユビキタスな Ctrl キーなどのキーボード イベントをキャプチャすることが必要になることがよくあります。 C。通常、プログラムの終了をトリガーします。この記事では、この特定のニーズ、つまり C で Ctrl C 信号をインターセプトする方法について説明します。

Ctrl C イベントのキャプチャ

C では、Ctrl C をキャプチャするための主な方法が 2 つあります。イベント: signal と sigaction。

の使用sigaction

関数 sigaction は、さまざまな実装間で優れた制御と移植性を提供するため、signal と比較してより信頼性の高いアプローチを提供します。 sigaction を使用するには、次の手順に従います。

  1. 必要なヘッダーを含めます:

    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
  2. シグナル ハンドラー関数を定義します:

    void my_handler(int s){
        printf("Caught signal %d\n",s);
        exit(1); 
    }

    このハンドラーでは、Ctrl C が押されたときに実行されるアクションを指定できます。

  3. シグアクションを構成します:

    struct sigaction sigIntHandler;
    
    sigIntHandler.sa_handler = my_handler;
    sigemptyset(&amp;sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    
    sigaction(SIGINT, &amp;sigIntHandler, NULL);

    ここでは、シグナル ハンドラーを Ctrl C シグナル (SIGINT) にアタッチし、シグナル関連の設定を指定します。

  4. 一時停止プログラム:

    pause();

    この関数により、プログラムは Ctrl C などのシグナルを待機します。

例:

次の例は、sigaction を使用して Ctrl C をキャプチャする方法を示しています。 events:

#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;    
}

このプログラムを実行して Ctrl C を押すと、「Caught signal 2」と出力され、正常に終了します。

以上がC で Ctrl C 信号をインターセプトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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