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:
signal
no 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 s
como argumento.sig_t
es 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_mask
ysa_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_KEYDOWN
mensaje.fuente