signal()函式說明

2021-09-06 10:29:20 字數 1250 閱讀 2358

表頭檔案#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 這個式子與上面式子的區別在於用...