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

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

Barbara Streisand
リリース: 2024-11-15 03:41:02
オリジナル
319 人が閲覧しました

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」の使用を示しています:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート