signal的实现

系统采用如下结构体存储信号以及其对应的名字和处理函数

typedef struct _sig_element

{

	int signal;
	char *signame;
	__p_sig_fn_t handler;
}sig_element;
 
 
 
static sig_element [];
signal函数的实现:
for(i=0; i < sizeof(signal_list)/sizeof(signal_list[0]); i++)
{
   if ( signal_list[i].signal == sig )
  {
	  temp = signal_list[i].handler;
         signal_list[i].handler = func;
      return temp;
   }
本质就是保存信号对应的处理函数,由代码可见,一个信号是只能对应一个处理函数的,先前的函数会被覆盖。

raise函数的实现
 for(i=0;i<sizeof(signal_list)/sizeof(signal_list[0]);i++)
 {
   if ( signal_list[i].signal == sig )
      {
       temp = signal_list[i].handler;
       break;
     }
  }
if(temp == SIG_IGN)// || (sig == SIGQUIT && temp == (_p_sig_fn_t)SIG_DFL))
return 0;   /* Ignore it */
 if(temp == SIG_DFL)
  _default_handler(sig); /* this does not return */
else
     temp(sig);
本质就是根据信号取得其对应的处理函数然后调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值