首頁 > 後端開發 > C++ > 主體

如何在 C 中使用 `sigaction` 處理 Ctrl-C 事件?

Barbara Streisand
發布: 2024-11-15 03:41:02
原創
213 人瀏覽過

How Can `sigaction` Be Used to Handle Ctrl-C Events in C++?

Using sigaction to Handle Ctrl-C Events in C++

To efficiently catch a Ctrl-C event in C++, the most reliable approach is to utilize the 'sigaction' function. It provides greater control and compatibility than the simple 'signal' function.

Implementing sigaction requires a structured approach:

  1. Declare a sigaction Structure:
    Define a 'sigaction' structure named 'sigIntHandler'.
  2. Set the Signal Handler:
    Assign the address of the handler function ('my_handler') to 'sigIntHandler.sa_handler'. In the handler function, perform the desired actions upon receiving the signal.
  3. Initialize Signal Mask:
    Initialize 'sigIntHandler.sa_mask' to an empty signal set using 'sigemptyset'. This allows the handler to respond to the specified signal without blocking others.
  4. Set Signal Action Flags:
    Set 'sigIntHandler.sa_flags' to '0' to use the default options.
  5. Register Signal Action:
    Use 'sigaction' with the 'SIGINT' signal and the defined handler structure ('sigIntHandler') to register the signal action.
  6. Pause Execution:
    Call 'pause()' to halt the program execution until a signal is received.
  7. Example Code:
    The following modified code from the question demonstrates the use of '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);
}

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;    
}
登入後複製

This approach provides a robust mechanism for handling Ctrl-C events in C++, ensuring reliability and efficiency in various implementations.

以上是如何在 C 中使用 `sigaction` 處理 Ctrl-C 事件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板