在学习linux信号处理时发如今结构体sigaction中定义了一个信号处理函数指针sa_sigaction,而这个指针指向的是一个拥有三个参数的函数,结构体中定义的函数指针为:void (*sa_sigaction)(int, struct siginfo_t *, void *)linux
在笔者的资料上并无对siginfo_t这个结构体的详细定义,而这个结构体中记录的又是信号的细节值,让人十分在乎。在经过在网上查找资料,笔者发现了这个结构体的详细定义:函数
1 typedef struct { 2 int si_signo; 3 int si_code; 4 union sigval si_value; 5 int si_errno; 6 pid_t si_pid; 7 uid_t si_uid; 8 void *si_addr; 9 int si_status; 10 int si_band; 11 } siginfo_t;
下面介绍各个变量的含义。学习
si_signo: signal number的简写,该变量用来存储信号编号而且恒有值;ui
si_code: signal code的简写,这个变量取值较多,这里不展开讨论,具体可从下面连接处获取;spa
si_value: signal value的简写,经过定义能够得知这个变量是一个结构体,该结构体定义以下:指针
1 union sigval { 2 int sival_int; 3 void *sival_ptr; 4 };
si_errno: 若是该位不为0,则和信号在一块儿的有一个错误代码,即errno(能够理解成信号发生错误)code
si_pid: 发送该信号的进程idblog
si_uid: 发送该信号的用户id进程
si_addr: 错误发生的地址io
这里笔者水平有限,若是以为文章有错误或者不全面,能够经过下面的网址查看,里面有这篇随笔的参考:
https://www.mkssoftware.com/docs/man5/siginfo_t.5.asp#Signal_Codes