在學習linux信號處理時發現在結構體sigaction中定義了一個信號處理函式指標sa_sigaction,而這個指標指向的是一個擁有三個引數的函式,結構體中定義的函式指標為:void (*sa_sigaction)(int, struct siginfo_t *, void *)
在筆者的資料上并沒有對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的簡寫,該變數用來存盤信號編號并且恒有值;
si_code: signal code的簡寫,這個變數取值較多,這里不展開討論,具體可從下面鏈接處獲取;
si_value: signal value的簡寫,通過定義可以得知這個變數是一個結構體,該結構體定義如下:
1 union sigval {
2 int sival_int;
3 void *sival_ptr;
4 };
si_errno: 如果該位不為0,則和信號在一起的有一個錯誤代碼,即errno(可以理解成信號發生錯誤)
si_pid: 發送該信號的行程id
si_uid: 發送該信號的用戶id
si_addr: 錯誤發生的地址
這里筆者水平有限,如果覺得文章有錯誤或者不全面,可以通過下面的網址查看,里面有這篇隨筆的參考:
https://www.mkssoftware.com/docs/man5/siginfo_t.5.asp#Signal_Codes
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/92550.html
標籤:Linux
上一篇:這是咋回事。我配置本地yum源的時候不小心把一個叫yum.repos.d的檔案給刪了自己創建一個變成這個樣子了。
