在C 語言中攔截Control-C 訊號
在程式領域,經常需要捕捉鍵盤事件,例如無處不在的Ctrl C ,通常會觸發程式終止。本文解決了這個特定需求:如何在 C 中攔截 Ctrl C 訊號。
捕獲 Ctrl C 事件
在 C 中,捕獲 Ctrl C 有兩種主要方法事件:signal 和 sigaction。
使用sigaction
與訊號相比,sigaction 函數提供了一種更可靠的方法,因為它在不同的實作中提供了更好的控制和可移植性。要使用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 按下時要執行的操作
設定sigaction:
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 時,它將列印「捕獲訊號2」並優雅退出。
以上是如何在 C 中攔截 Ctrl C 訊號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!