10.14 信号_sigaction函数

来源:互联网 发布:电脑听书软件 编辑:程序博客网 时间:2024/05/17 04:30

    sigaction函数的功能是检查或修改指定信号相关联的处理动作(或同时执行这两种操作)。

  • #include <signal.h>
  • int sigaction(int signo, const struct sigation *restrict act, struct sigaction *restrict oact);

返回值:成功返回0,出错返回-1

    其中,参数signo是要检查或修改其具体动作的信号编号。若act指针非空,则要修改其动作。如果oact指针非空,则系统经由oact指针返回该信号的上一个动作。此函数使用下列结构:

struct sigaction{

    void (*sa_handler)(int);

    sigset_t sa_mask;

    int sa_flags;

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

}

    当更改信号动作时,如果sa_handler字段包含一个信号捕捉函数的地址(与常量SIG_IGN或SIG_DFL相对),则sa_mask字段说明了一个信号集,在调用该信号捕捉函数之前,这一信号集要加到进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字复位为原先值。

    sa_sigaction字段是一个替代的信号处理程序,当在sigaction结构中使用了SA_SIGINFO标志时,使用该信号处理程序。对于sa_sigaction字段和sa_handler字段这两者,其实现可能使用同一存储区,所以应用程序只能一次使用这两个字段中的一个。

    通常,按下列方式调用信号处理程序:

  • void handler(int signo);

但是,如果设置了SA_SIGINFO标志,那么按下列方式调用信号处理程序。

  • void handler(int signo, siginfo_t *info, void *context);