在學習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