signal () se comporta de manera diferente, dependiendo de si sigue el estilo BSD o SysV. sigaction () es preferible.
asveikau
2
Sé que es antiguo, pero esto no se compila en g ++ (Ubuntu 7.4.0-1ubuntu1 ~ 18.04.1) 7.4.0. Tuve que cambiar void my_handler(sig_t s)a void my_handler(sig_atomic_t s).
jcmonteiro
1
Sí, esta es una pregunta dependiente de la plataforma.
Si está escribiendo un programa de consola en POSIX, use la señal API ( #include <signal.h>).
En una aplicación WIN32 GUI debe manejar el WM_KEYDOWNmensaje.
Respuestas:
signalno es la forma más confiable, ya que difiere en las implementaciones. Yo recomendaría usarsigaction. El código de Tom ahora se vería así:fuente
int scomo argumento.sig_tes en sí mismo un tipo de puntero de función.printf()no es seguro para la señal asíncrona, por lo que no se puede usar dentro del controlador de señal.sa_maskysa_flags.Para una aplicación de consola de Windows, desea usar SetConsoleCtrlHandler para manejar CTRL+ Cy CTRL+ BREAK.
Ver aquí para un ejemplo.
fuente
Tienes que atrapar la señal SIGINT (estamos hablando de POSIX ¿verdad?)
Ver la respuesta de @Gab Royer para seguirction.
Ejemplo:
fuente
void my_handler(sig_t s)avoid my_handler(sig_atomic_t s).Sí, esta es una pregunta dependiente de la plataforma.
Si está escribiendo un programa de consola en POSIX, use la señal API (
#include <signal.h>).En una aplicación WIN32 GUI debe manejar el
WM_KEYDOWNmensaje.fuente