信号的特点:信号是唯一的异步通信方式
进程对信号的处理方式:
A : 忽略,对进程不做任何处理
B:捕获
C: 默认方式处理
函数原型:
typedef viod(*sighandler_t)(int );
sighandler_t signal(int signum, sighandler_t handler);
signum:信号处理函数
handler:信号处理方式
练习:
1.设置进程忽略SIGINT
2.设置进程对SIGALARM进行捕捉
3.如果用户三次没有输入,结束进程(规定每次间隔时间为3S)
运行效果:
源代码:
alarm.c
#include<stdio.h>
#include <unistd.h>
#include <signal.h>
#include<stdlib.h>
int count = 0;
void handler(int signum);
int main(int argc, const char *argv[])
{
char buf[1024];
if(signal(SIGINT,SIG_IGN) == SIG_ERR)
{
perror("FAIL TO SIGNAL");
exit(EXIT_FAILURE);
}
signal(SIGALRM,handler);
alarm(3 );
while(1)
{
fgets(buf,sizeof(buf)-1,stdin);
alarm(3 );
count = 0;
}
return 0;
}
void handler(int signum)
{
count ++;
printf("TIME OUT : %d \n",count);
if(count >= 3)
{
printf("GAME OVER!\n");
exit(EXIT_FAILURE);
}
alarm(3);
return ;
}