對訊號註冊函式signal的理解1

2021-09-06 08:27:13 字數 1169 閱讀 2532

signal函式的原型是:

void  (*signal(int signum, void (*handler)(int)))(int);

引數說明:

signum:指定的訊號

其中函式指標handler的取值:

其中的引數sig_ign和sig_dfl是這樣定義的:

而__sighandler_t又是按下面的方式定義的:

其中,__signalfn_t又是這樣定義的:

現在知道了,sig_ign和sig_dfl是將1和0強制型別轉換為了函式指標型別。

下面分析一下signal的含義:

首先,先看一下函式指標是怎麼用的:

void fun(int);  //宣告乙個函式fun

void (*fun)(int);  //宣告乙個函式指標變數fun

那麼 可以有 fun = fun;(函式指標fun指向了函式fun)

當加入typedef後,再看下面:

typedef  void (*fun)(int);  //此時fun變成了乙個型別,不再是變數,fun可以用來定義乙個函式指標變數

可以這麼用:

fun p;//等價於 void (*p)(int);

p = fun;

利用fun我們可以實現對signal的化簡:

fun signal(int signum, fun handler);

這下容易理解了:

signal的引數有兩個,乙個是整型變數,另乙個是函式指標。而signal的返回值又是乙個函式指標,其型別與其第二個引數相同。

signal的返回值是設定之前訊號處理的方式,是乙個函式指標。看下面乙個例子:

#include #include 

void fun(int n) //其中引數n的值是該函式所處理的訊號的編號

void fun1(int n) //其中引數n的值是該函式所處理的訊號的編號

int main(void)

return 0;

}

執行結果:

對訊號註冊函式signal的理解1

signal函式的原型是 void signal int signum,void handler int int 引數說明 signum 指定的訊號 其中函式指標handler的取值 其中的引數sig ign和sig dfl是這樣定義的 而 sighandler t又是按下面的方式定義的 其中,si...

signal函式 程序對訊號的響應

1.signal函式 include void signal int signo,void func int int 返回 若成功則返回先前的訊號處理函式指標,出錯則返回sig err 功能 向核心登記訊號處理函式 引數 signo 要登記的訊號值 func a.訊號處理函式指標 b.sig ign...

訊號之signal函式

unix系統的訊號機制最簡單的介面是signal函式。signal函式的功能 為指定的訊號安裝乙個新的訊號處理函式。include void signal int signo,void func int int 複雜原型分開看 void signal int signo,void func int ...