c语言信号处理sigaction
(2011-04-18 23:45:19)
标签:
c语言
信号处理
sigaction
sighup
it
分类:
c
信号安装函数sigaction(int signum,const struct sigaction *act,struct sigaction
*oldact)的第二个参数是一个指向sigaction结构的指针(结构体名称与函数名一样,千万别弄混淆了)。在结构sigaction的实例中,指定了对特定信号的处理,信号所传递的信息,信号处理函数执行过程中应屏蔽掉哪些函数等。当然,此指针也可以为NULL,进程会以默认方式处理信号。以下就简单介绍一下sigaction结构以及一般的用法。
对于内核头文件而言,struct sigaction
结构体定义在kernel/include/asm/signal.h,此头文件又被kernel/include/linux/signal.h包含。
对于用户空间的头文件而言,struct sigaction定义在
/usr/include/bits/sigaction.h,此头文件又被/usr/include/signal.h包含,所以应用程序中如果用到此结构,只要#include
即可。注意内核中的定义和应用程序中的定义是不一样的,内核空间的sigaction结构只支持函数类型为
__sighandler_t的信号处理函数,不能处理信号传递的额外信息。具体定义如下:
……
typedef void (*__sighandler_t)(int);
……
#ifdef __KERNEL__
struct old_sigaction {
__sighandler_t sa_handler;
old_sigset_t sa_mask;
unsigned long sa_flags;
void (*sa_restorer)(void);
};
struct sigaction {
__sighandler_t sa_handler;
unsigned long sa_flags;
void (*sa_restorer)(void);
sigset_t sa_mask;
};
struct k_sigaction {
struct sigaction sa;
};
#else
struct sigaction {
union {
__sighandler_t _sa_handler;
void (*_sa_sigaction)(int, struct siginfo *, void *);
} _u;
sigset_t sa_m