在C 中捕獲Ctrl-C 事件
在C 中,捕獲Ctrl-C (SIGINT) 事件對於處理程序正常終止至關重要。訊號庫為此提供了一種簡單的機制,但其可靠性因不同的實作而異。
為了確保行為一致,建議使用 sigaction 函數。以下是使用 sigaction 的 Tom 程式碼的修訂版本:
#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; }
此程式碼定義了一個訊號處理程式 my_handler,它在收到 SIGINT 訊號 (Ctrl-C) 時列印一條訊息並退出程式。 sigaction 函數註冊 SIGINT 訊號的處理程序,並設定正確行為所需的標誌。
現在,當程式運行並按下 Ctrl-C 時,它將捕獲訊號並調用處理程序,這依次列印適當的訊息並優雅地終止程式。
以上是如何在 C 中優雅地處理 Ctrl-C 事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!