信号函数

信号函数


signal系统调用

  要为一个信号设置处理函数,可以使用下面的signal系统调用:

#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

  signum参数指出要捕获的信号类型。handler参数是sighandler_t类型的函数指针,用于指定信号sig的处理函数。

  signal函数成功时返回一个函数指针,该函数指针的类型也是sighandler_t。这个返回值是前一次调用signal函数时传入的函数指针,或者是信号signum对应的默认处理函数指针SIG_DFL(如果是第一次调用signal的话)。

  signal系统调用出错时返回SIG_ERR,并设置errno。


sigaction系统调用

  设置信号处理函数的更健壮的接口是如下的系统调用:

#include <signal.h>
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

  signum参数指出要捕获的信号类型,act参数指定新的信号处理方式,oldact参数则输出信号先前的处理方式(如果不为NULL的话)。act和oldact都是sigaction结构体类型的指针,sigaction结构体描述了信号处理的细节,其定义如下:

struct sigaction {
    void     (*sa_handler)(int);
    void     (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void     (*sa_restorer)(void);
};

该结构体中的sa_handler成员指定信号处理函数。sa_mask成员设置进程的信号掩码(确切地说是在进程原有信号掩码的基础上增加信号掩码),以指定哪些信号不能发送给本进程。sa_mask是信号集sigset_t类型,该类型指定一组信号。sa_flags成员用于设置程序收到信号时的行为。sa_restorer成员已经过时,最好不要使用。sigaction成功时返回0,失败时返回-1并设置errno。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值