信号处理
注册信号调用函数
函数(1):void (*signal (int signumber,void((*func)int)))(int);
头文件:signal.h
说明:func为指向调用函数的函数指针,其也可以取特定值:SIG_IGN和SIG_DFL,其中SIG_IGN表示忽略signumber所指信号,SIG_DFL表示调用系统定义的默认处理。signal函数返回值类型同参数func,其为一个指向某个返回值为空的带有一个整数参数的函数指针。该调用成功时返回上次该信号的处理函数,错误时返回SIG_ERR。
函数(2):int sigaction(int sigunumber,const struct sigaction *act ,struct sigaction *oldact);
头文件:signal.h
说明: 该函数不仅可以实现signal函数的功能,还可以提供更加详细的信息,确切了解进行接收到信号时所发生的细节。其中sigaction结构如下:
struct sigaction{
void (*sa_handler)(int);
void (*sa_sigaction)(int,siginfo_t *,void *);
sigset_t sa_mask;
int sa_flags;
}
sa_hander为指向信号处理函数的地址,sa_sigaction为指向函数的指针。其中siginfo_t结构体如下:
typedef struct siginfo{
int si_signo;//signal number
int si_errno;//an errno value
int si_code;//signal code
int si_pid;//sending process ID
INT si_uid;//real user ID of sending process
int si_status;//exit value or signal
clock_t si_utime;//user time consumed
clock_t si_stime;//system time consumed
sigval_t si_balue // signal value
int si_int ;//POSIX.1b signal
void *si_ptr;//POSIX.1b signal
void *si_addr;//memory location that caused fault
int si_band;//band event
int si_fd;//file descriptor;
} siginfo_t;
sa_flag指示信号处理函数的不同选项,通过位运算来实现所需要的选项设置。如果赋值为0则选用所有的默认选项,其选项参数如下:
SA_NOC