signal函式的簡單用法

2021-10-04 20:02:18 字數 1377 閱讀 1190

void (*signal(int sig,void(*func)(int)))(int);

指定使用sig指定的訊號編號處理訊號的方法。

signal函式的返回值是函式指標。

比如說,void * myfunc();  我們說myfunc函式的返回值型別是

void*

同樣, 函式指標的形式舉例:

void (*  )(int) *

邊上的空白處可以填寫變數名或者函式名,

我們將signal函式帶入空白處,就是如上的形式了。

簡化一下:typedef void (*sighandler)(int);----->將 void (*) (int) 用sighandler代替;

void (*signal(int sig,void(*func)(int)))(int);------>void (*signal(int sig,sighandlerhandler)(int);

再簡化:

void (*signal(int sig,sighandlerhandler)(int);----------------->sighandlersignal(int sig,sighandlerhandler);

可以先想象signal()這個函會先執行,執行完畢後剩下的int ( * )()就是signal的返回值型別,很顯然這個型別是個函式指標。

小結:困擾的地方在於,函式的返回值為函式指標,而函式指標的形式,當我們帶入函式進去的時候,函式名是是在函式指標裡面的,這個不同於普通的指標返回值。

handler指定程式可以處理訊號的三種方式之一:

預設處理(sig_dfl):          訊號由該特定訊號的預設動作處理

忽略訊號(sig_ign):      忽略訊號,即使沒有意義,**執行仍然繼續。

函式處理程式:                 定義乙個特定的函式來處理訊號

第乙個引數是要捕捉的訊號(檢視訊號:kill -l,9號sigkill訊號不能**捉); 

第二個引數表示我們要對訊號進行的處理方式。

1)忽略訊號//如:忽略ctrl+c訊號

int main()

return 0;

}

2) 預設動作

int main()

return 0;

}

3)自定義處理函式//捕捉到這個訊號後,按照handler處理函式進行操作

#includevoid  handler(int signo)

int main()

return 0;

}

Oracle instr函式簡單用法

oracle中instr的用法 instr方法的格式為 instr 源字串,要查詢的字串,從第幾個字元開始,要找到第幾個匹配的序號 返回找到的位置,如果找不到則返回0.例如 instr corporate floor or 3,2 中,源字串為 corporate floor 在字串中查詢 or 從...

mysql的簡單用法 mysql簡單用法

刪除使用者 drop user jack drop比delete刪除的優勢在於drop可以刪除使用者的許可權,更加徹底 更改使用者名稱 rename user jack to jacknew 使用者的都存在與user表中,更改名稱,許可權不變 更改使用者密碼 update mysql.user se...

C 建構函式簡單用法

1.1 基本概念 1.2 注意 1.3 建構函式的意義 建構函式執行必要的初始化工作,有了建構函式就不必再寫初始化函式,也不用擔心物件沒有初始化。1.4 例項 include includeusing namespace std class myclass void print int main 1...