C 信号处理

1.信号(signal)为int类型,处理函数为void (*handler)(int)类型,信号集为sigset_t类型。处理信号的接口,返回值一般规定为:执行成功返回0,执行失败返回SIG_ERR(-1).

2.设置信号处理的接口,常用的有signal()和sigaction()。

signal()设置的信号处理函数是一次性的,被调用过一次后会被替换为系统默认处理函数。为了实现链式操作,signal()返回值为参数中的handler函数指针。相关定义如下:

#include<signal.h>

void(*signal(int signumber,void ((*func)(int))(int)

3.sigaction()更为强大,可以设置与进程始终的信号处理函数。相关定义如下

#include <signal.h>

int sigaction(int signumbet,const structsigaction *act,struct sigaction *oldact);

struct sigaction

{

     void(*sa_handler)(int);

     void(*sa_sigaction)(int,siginfo_t *,void *);

     sigset_tsa_mask;

     intsa_flags;

}

sigaction.sa_flags的取值如下表,取0表示选用所有默认选项。

SA_NOCLDSTOP:用于表示信号SIGCHLD,当子进程被中断时,不产生此信号,当且仅当子进程结束时产生此信号。

SA_NOCLDWATI:当信号为SIGCHLD,时可避免子进程僵死。

SA_NODEFER:当信号处理函数正在进行时,不堵塞对于信号处理函数自身信号功能。

SA_NOMASK:同SA_NODEFER

SA_ONESHOT:当用户注册的信号处理函数被执行过一次后,该信号的处理函数被设为系统默认的处理函数。

SA_RESETHAND:同SA_ONESHOT

SA_RESTART:是本来不能重新于运行的系统调用自动重新运行。

SA_SIGINFO:表明信号处理函数是由SA_SIGACTION指定的,而不是由SA_HANDLER指定的,它将显示更多的信号处理函数信息。

转载于:https://www.cnblogs.com/farseeraliens/archive/2013/05/30/3107897.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值