linux学习笔记11-封装mysigal
封装mysignal
man sigaction
#include <signal.h>
int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
signal是早期的实现,现在一般用sigaction,sigaction可以检查或修改与指定信号相关联的处理动作,或者同时执行两种操作.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
//使用sigaction实现signal函数的功能
int mysignal(int signo,void (*func)(int))
{
struct sigaction act,oact;
act.sa_handler = func;
sigemptyset(&act.sa_mask); //必须用sigemptyset初始化sigcation的sa_mask成员
act.sa_flags = 0;
return sigaction(signo,&act,&oact);
}
void signal_handler(int signo)
{
switch(signo)
{
case SIGALRM:
printf("SIGALRM alert!\n"); //触发SIGALRM的动作
break;
}
}
int main(int argc,char *argv[])
{
mysignal(SIGALRM,signal_handler); //用mysignal注册处理SIGALRM信号
alarm(5); //5秒后触发
while(1)
{
printf("wait alarm!\n");
sleep(1);
}
return 0;
}
秋风
2016-11-26