Interceptando eventos Ctrl-C em C
Interceptando eventos Ctrl-C é uma tarefa necessária na programação, especialmente quando você deseja responder graciosamente a interrupções inesperadas.
Usando Sigaction
Em C, é mais confiável usar a função sigaction para lidar com sinais. A sintaxe é a seguinte:
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
where:
No exemplo dado por Thomas, a estrutura sigaction é a seguinte:
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0;
where:
Use esta estrutura sigaction com o sinal SIGINT:
sigaction(SIGINT, &sigIntHandler, NULL);
Handler function
Finalmente, você precisa de uma função manipuladora para responder ao sinal. No exemplo, my_handler apenas imprime uma mensagem e sai do programa:
void my_handler(int s){ printf("Caught signal %d\n", s); exit(1); }
Código completo
A seguir está o código completo que usa sigaction para capturar eventos Ctrl-C:
#include#include #include #include 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; }
Ao usar sigaction você pode capturar eventos Ctrl-C de forma confiável e tomar as medidas apropriadas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3