信号处理signal与sigaction函数

来源:互联网 发布:js 回调函数 全局变量 编辑:程序博客网 时间:2024/04/30 07:49
//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成员的所有位初始化为0act.sa_flags=0;//sa_flags成员同样初始化为0sigaction(SIGALRM,&act,0);//注册信号alarm(2);for(int i=0;i<3;++i){puts("wait...");sleep(100);}return 0;}


原创粉丝点击