表頭檔案#include
功 能:設定某一訊號的對應動作
函式原型:void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal(int signum,sig_t handler);
引數說明:
第乙個引數signum指明了所要處理的訊號型別,它可以取除了sigkill和sigstop外的任何一種訊號。
第二個引數handler描述了與訊號關聯的動作,它可以取以下三種值:
(1)乙個無返回值的函式位址
此函式必須在signal()被呼叫前申明,handler中為這個函式的名字。當接收到乙個型別為sig的訊號時,就執行handler 所指定的函式。這個函式應有如下形式的定義:
void func(int sig);
sig是傳遞給它的唯一引數。執行了signal()呼叫後,程序只要接收到型別為sig的訊號,不管其正在執行程式的哪一部分,就立即執行func()函式。當func()函式執行結束後,控制權返回程序被中斷的那一點繼續執行。
(2)sig_ign
這個符號表示忽略該訊號,執行了相應的signal()呼叫後,程序會忽略型別為sig的訊號。
(3)sig_dfl
這個符號表示恢復系統對訊號的預設處理。
函式說明:
signal()會依引數signum 指定的訊號編號來設定該訊號的處理函式。當指定的訊號到達時就會跳轉到引數handler指定的函式執行。當乙個訊號的訊號處理函式執行時,如果程序又接收到了該訊號,該訊號會自動被儲存而不會中斷訊號處理函式的執行,直到訊號處理函式執行完畢再重新呼叫相應的處理函式。但是如果在訊號處理函式執行時程序收到了其它型別的訊號,該函式的執行就會被中斷。
返回值:返回先前的訊號處理函式指標,如果有錯誤則返回sig_err(-1)。
下面的情況可以產生signal:
按下ctrl+c產生sigint
硬體中斷,如除0,非法記憶體訪問(sigsev)等等
kill函式可以對程序傳送signal
kill命令。實際上是對kill函式的乙個包裝
軟體中斷。如當alarm clock超時(sigurg),當reader中止之後又向管道寫資料(sigpipe),等等
signal函式說明
c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...
signal函式說明
c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...
使用者空間的signal函式說明
c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...