sigaction函数

 #include sigaction(int signo,const struct sigaction *act,struct sigaction *oact);

                                返回值:成功返回0;错误返回-1

struct sigaction{

   void (*sa_handler)(int);   /* 信号处理函数 */

   sigset_t sa_mask;   /* 信号屏蔽集 */

   int sa_flags;      /* 信号选项 见《UNIX环境高级编程》 P279页 */

   void (*sa_sigaction)(int,siginfo_t *,void *);  //替代处理信号程序,在sigaction结构中使用了SA_SIGINFO标志时,使用该信号程序

};

复制代码
#include "unix.h"
void do_sig(int signo)
{
    printf("signao : %d\n",signo);
    exit(0);// 收到SIGINT(中断信号)信号调用exit退出程序
}

int main()
{
    struct sigaction act,oact;
    act.sa_handler=do_sig;
    sigemptyset(&act.sa_mask);
    act.sa_flags=0;
    sigaction(SIGINT,&act,&oact);/* SIGINT 为中断信号 一般为我们按下“ctl+c” */
    while(1){}      /* 用一个死循环,用于本次🧪 */
    return 0;
}
复制代码

 

  参数signo是要检测或修改的具体动作的信号编号。若act指针非空,则要修改其动作,如果oact指针非空,则系统经由oact指针返回该信号的上一个动作。

  结构体sigaction中的sa_handler字段包含一个信号捕捉的函数地址,sa_mask字段则说明了一个信号集,在调用该信号捕捉函数之前,这一信号集要加到进程信号的信号屏蔽字中。sa_flag指定对信号进行处理的各个选项。sa_sigaction为替代处理信号程序,在sigaction结构中使用了SA_SIGINFO标志时,使用该信号程序。上述代码没有用到该选项。

 

posted @   撒西不纳拉  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示