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