¿Cómo puedo atrapar un evento ctrl-c?
-
08-07-2019 - |
Pregunta
¿Cómo puedo detectar un evento Ctrl + C en C ++?
Solución
signal
no es la forma más confiable ya que difiere en las implementaciones. Yo recomendaría usar sigaction
. El código de Tom ahora se vería así:
#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;
}
Otros consejos
Para una aplicación de consola de Windows, desea utilizar SetConsoleCtrlHandler para manejar CTRL + C y CTRL + BREAK .
Vea aquí para un ejemplo.
Tienes que atrapar la señal SIGINT (estamos hablando de POSIX ¿verdad?)
Ver @Gab Royer & # 180; respuesta de s para seguirction.
Ejemplo:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
Sí, esta es una pregunta dependiente de la plataforma.
Si está escribiendo un programa de consola en POSIX, use la API de señal (#include < signal.h >).
En una aplicación WIN32 GUI debe manejar el mensaje WM_KEYDOWN.