Yanıtlar:
signal
uygulamalarda farklılık gösterdiği için en güvenilir yol değildir. Kullanmanızı tavsiye ederim sigaction
. Tom'un kodu artık şöyle görünecektir:
#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;
}
int s
argüman olarak almalı . sig_t
kendisi bir işlev gösterici türüdür.
printf()
eşzamansız sinyal güvenli değildir, bu nedenle sinyal işleyici içinde kullanılamaz.
sa_mask
ve hakkında biraz açıklama yapmak güzel olurdu sa_flags
.
Bir Windows konsol uygulaması için, + ve + işlemlerini yapmak üzere SetConsoleCtrlHandler'ı kullanmak istiyorsunuz .CTRLCCTRLBREAK
Örnek için buraya bakın .
SIGINT sinyalini yakalamalısınız (POSIX değil mi?)
@Gab Royer´ın önem için cevabına bakın.
Misal:
#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;
}
void my_handler(sig_t s)
için void my_handler(sig_atomic_t s)
.