//void (*signal(int signo,void (*func)(int)))(int) signal函数的原型
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void timeout(int sig) //定义信号处理函数(信号处理器)
{
if(sig==SIGALRM)
puts("Time out!");
alarm(2); //2秒过后将产生SIGALRM信号
}
void keycontrol(int sig) //定义信号处理函数
{
if(sig==SIGINT)
puts("CTRL+C pressed");
}
int main()
{
int i;
signal(SIGALRM,timeout); //信号注册(注册的情况发生时,操作系统将调用该信号对应的函数)
signal(SIGINT,keycontrol); //信号注册
alarm(2); //2秒过后将产生SIGALRM信号
for(int i=0;i<3;++i)
{
puts("wait...");
sleep(100);
}
return 0;
}
/*
简单的说就是有一个函数叫sigaction
有一个结构体也叫sigaction
原型如下:
ing sigaction(int signo,const struct sigaction* act,struct sigaction* aldact)
struct sigaction
{
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
};
*/
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void timeout(int sig)
{
if(sig==SIGALRM)
puts("Time out!");
alarm(2);
}
int main()
{
int i;
struct sigaction act;
act.sa_handler=timeout; //将函数名入口地址传过去
sigemptyset(&act.sa_mask); //调用sigemptyset函数将sa_mask成员的所有位初始化为0
act.sa_flags=0; //sa_flags成员同样初始化为0
sigaction(SIGALRM,&act,0); //注册信号
alarm(2);
for(int i=0;i<3;++i)
{
puts("wait...");
sleep(100);
}
return 0;
}