unp-----signal函数与系统中断

本文深入探讨了POSIX信号处理的特性,包括信号的持续安装、信号处理期间的信号堵塞以及信号的非排队处理。同时,分析了系统中断,特别是慢系统调用在遇到信号时的行为,例如在accept调用时的阻塞。文中通过实例展示了系统调用如scanf在被SIGALRM中断后的处理方式,并讨论了SA_RESTART标志在不同系统上的可移植性问题。
摘要由CSDN通过智能技术生成

一.signal分析

在POSIX中信号的处理:

#include 
   
   
    
     
void (*signal(int signo, void (*func)(int)))(int) 
{  
    struct sigaction act, oact;  
    act.sa_handler = func; // siaction结构的sa_handler成员位置为函数func  
    sigemptyset(&act.sa_mask); //该信号集设置为空集。代表在该信号处理函数不堵塞任何信号。POSIX保证被捕捉的信号在其信号处理函数运行期间总是堵塞  
    act.sa_flags = 0;  
    if(signo == SIGALRM){ //此操作增加的函数的可移植性 
#if SA_INTERRUPT   
    act.sa_flags |= SA_INTERRUPT;  //SunOS 4.x  
#end if  
}else{ 
#if SA_RESTART   
act.sa_flags |= SA_RESTART;  //SVR4, 4.4BSD 
#end if   
}    
    if(sigaction(signo, &act, &oact)< 0)        //struct sigaction{      
                                                //   void(*sa_handler)(int);       
                                                //  sigset_t sa_mask;       
                                                //  int s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值