C での Control-C 信号のインターセプト
プログラミングの領域では、ユビキタスな Ctrl キーなどのキーボード イベントをキャプチャすることが必要になることがよくあります。 C。通常、プログラムの終了をトリガーします。この記事では、この特定のニーズ、つまり C で Ctrl C 信号をインターセプトする方法について説明します。
Ctrl C イベントのキャプチャ
C では、Ctrl C をキャプチャするための主な方法が 2 つあります。イベント: signal と sigaction。
の使用sigaction
関数 sigaction は、さまざまな実装間で優れた制御と移植性を提供するため、signal と比較してより信頼性の高いアプローチを提供します。 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); }
このハンドラーでは、Ctrl C が押されたときに実行されるアクションを指定できます。
シグアクションを構成します:
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL);
ここでは、シグナル ハンドラーを Ctrl C シグナル (SIGINT) にアタッチし、シグナル関連の設定を指定します。
一時停止プログラム:
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 サイトの他の関連記事を参照してください。