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:
-
Declare a sigaction Structure:
Define a 'sigaction' structure named 'sigIntHandler'.
-
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.
-
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.
-
Set Signal Action Flags:
Set 'sigIntHandler.sa_flags' to '0' to use the default options.
-
Register Signal Action:
Use 'sigaction' with the 'SIGINT' signal and the defined handler structure ('sigIntHandler') to register the signal action.
-
Pause Execution:
Call 'pause()' to halt the program execution until a signal is received.
-
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中文網其他相關文章!