C での Ctrl-C イベントのインターセプト
Ctrl-C イベントのインターセプトはプログラミングにおいて必要なタスクであり、特に、正常に応答したい場合に重要です。予期せぬ中断。
Sigaction の使用
C では、関数 sigaction を使用してシグナルを処理する方が確実です。構文は次のとおりです:
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
where:
Thomas が示した例では、sigaction 構造は次のとおりです。 sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;sa_handler: ハンドラー関数を指します。
sigaction(SIGINT, &sigIntHandler, NULL);
sigaction(SIGINT, &sigIntHandler, NULL);Handler function
最後に、シグナルに応答するハンドラー関数が必要です。この例では、my_handler はメッセージを出力してプログラムを終了するだけです。
void my_handler(int s){ printf("信号 %d をキャッチしました\n", s); 終了(1); }
sigaction(SIGINT, &sigIntHandler, NULL);完全なコード
次は、sigaction を使用して Ctrl-C イベントをキャプチャする完全なコードです:
#include
#include#include #include #include 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; }
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3