信号函数

来源:互联网 发布:linux 设置语言为英文 编辑:程序博客网 时间:2024/05/19 04:25

信号函数


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。

0 0
原创粉丝点击