Sim, é POSIX. Esqueci de adicionar o Linux à pergunta.
295 Scott Scott
2
O sinal () se comporta de maneira diferente, dependendo do estilo BSD ou SysV. sigaction () é preferível.
Asveikau 29/10/09
2
Eu sei que é antigo, mas isso não compila no g ++ (Ubuntu 7.4.0-1ubuntu1 ~ 18.04.1) 7.4.0. Eu tive que mudar void my_handler(sig_t s)para void my_handler(sig_atomic_t s).
jcmonteiro
1
Sim, essa é uma pergunta dependente da plataforma.
Se você estiver escrevendo um programa de console no POSIX, use a API de sinal ( #include <signal.h>).
Em um aplicativo GUI do WIN32, você deve manipular a WM_KEYDOWNmensagem.
Respostas:
signal
não é a maneira mais confiável, pois difere nas implementações. Eu recomendaria usarsigaction
. O código de Tom agora ficaria assim:fonte
int s
como argumento.sig_t
é em si um tipo de ponteiro de função.printf()
não é seguro para sinal assíncrono, portanto não pode ser usado dentro do manipulador de sinal.sa_mask
esa_flags
.Para um aplicativo de console do Windows, você deseja usar SetConsoleCtrlHandler para manipular CTRL+ Ce CTRL+ BREAK.
Veja aqui um exemplo.
fonte
Você tem que pegar o sinal SIGINT (estamos falando de POSIX, certo?)
Veja a resposta de @Gab Royer para sigação.
Exemplo:
fonte
void my_handler(sig_t s)
paravoid my_handler(sig_atomic_t s)
.Sim, essa é uma pergunta dependente da plataforma.
Se você estiver escrevendo um programa de console no POSIX, use a API de sinal (
#include <signal.h>
).Em um aplicativo GUI do WIN32, você deve manipular a
WM_KEYDOWN
mensagem.fonte