typedef void( *sighandler_t)(int); 1.用typedef給類型起一個別名。 2.為函數指針類型定義別名, 3.函數指針(指向函數的指針) sighandler_t signal(int signum, sighandler_t handler); 1.函數原型 2. ...
typedef void( *sighandler_t)(int);
1.用typedef給類型起一個別名。
2.為函數指針類型定義別名,
3.函數指針(指向函數的指針)
sighandler_t signal(int signum, sighandler_t handler);
1.函數原型
2.使用自定義的類型別名,作為函數參數和函數返回值
3.第一個參數是信號的標號,第二個參數是函數指針
implicit-function-declaration(不明函數聲明)
sleep()函數在#include<unistd.h>這個頭文件中
#include <stdio.h> #include <signal.h> #include<unistd.h> //申明一個自定義函數 void myHandler(int signum){ printf("捕獲到信號 %d \n",signum); } int main(){ //定義一個函數指針,指向上面的函數 void(* handler)=myHandler; //調用函數,傳遞參數int信號標號,傳遞函數指針 signal(SIGINT,handler);//捕獲ctrl+c signal(SIGTERM,handler);//捕獲程式退出 while(1){ printf("進程運行中...\n"); sleep(1); } }
運行結果:
信號2是我ctrl+c , 信號15是我kill 進程id , 但是當我kill -9 進程id時 , 使用signal(SIGKILL,handler) 信號不能被捕獲
進程運行中...
進程運行中...
進程運行中...
^C捕獲到信號 2
進程運行中...
進程運行中...
進程運行中...
捕獲到信號 15