首頁  >  文章  >  後端開發  >  如何在 C 中優雅地處理 Ctrl-C 事件?

如何在 C 中優雅地處理 Ctrl-C 事件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-11 01:47:02194瀏覽

How to Gracefully Handle Ctrl-C Events in C  ?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn