#include <stdio.h>
#include <unistd.h>
#include <errno.h>
static void sigHandler(int sig)
{
printf("Ouch!\n");
signal(SIGINT, SIG_DFL);
}
int main(int argc, char *argv[])
{
int j;
if (signal(SIGINT, sigHandler) == SIG_ERR)
{
perror("signal");
exit(EXIT_FAILURE);
}
for(j = 0; ; j++){
printf("%d\n", j);
sleep(3);
}
}
main函数中执行的过程是:先将signal函数执行,将信号的处理交给sigHandler函数,然后打印输出Ouch之后,由sigHandler函数调用signal函数将信号的处理变为默认模式SIG_DFL,然后再次回到main函数,并执行for循环,每隔三秒钟打印一个数字。
这里的关于信号的给出是用户在终端键入ctrl+c来实现的。
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
static void sigHandler(int sig)
{
static int count = 0;
if (sig == SIGINT){
count++;
printf("Caught SIGINT (%d)\n", conut);
return;
printf("Caught SIGQUIT - that's all folks\n");
exit(EXIT_SUCCESS);
}
}
int main(int argc, char *argv[])
{
int j;
if (signal(SIGINT, sigHandler) == SIG_ERR)
errExit("signal");
if (signal(SIGQUIT, sigHandler) == SIG_ERR)
errExit("signal");
for( ; ; )
pause();
}