linux應用程式中的Singal

2021-06-22 19:35:05 字數 1304 閱讀 5956

linux應用程式中的singal

標頭檔案 #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 所指定的函式。這個函式應有如下形式的定義: intfunc(int sig); sig是傳遞給它的唯一引數。執行了signal()呼叫後,程序只要接收到型別為sig的訊號,不管其正在執行程式的哪一部分,就立即執行func()函式。當func()函式執行結束後,控制權返回程序被中斷的那一點繼續執行。  

(2)sigign   這個符號表示忽略該訊號,執行了相應的signal()呼叫後,程序會忽略型別為sig的訊號。   

(3)sigdfl   這個符號表示恢復系統對訊號的預設處理。   

函式說明 :   signal()會依引數signum 指定的訊號編號來設定該訊號的處理函式。當指定的訊號到達時就會跳轉到引數handler指定的函式執行。當乙個訊號的訊號處理函式執行時,如果程序又接收到了該訊號,該訊號會自動被儲存而不會中斷訊號處理函式的執行,直到訊號處理函式執行完畢再重新呼叫相應的處理函式。但是如果在訊號處理函式執行時程序收到了其它型別的訊號,該函式的執行就會被中斷。  

返回值: 返回先前的訊號處理函式指標,如果有錯誤則返回sig_err(-1)。   

附加說明 :在訊號發生跳轉到自定的handler處理函式執行後,系統會自動將此處理函式換回原來系統預設的處理方式,如果要改變此操作請改用sigaction()。  

下面的情況可以產生signal:  

1. 按下ctrl+c產生sigint   

2. 硬體中斷,如除0,非法記憶體訪問(sigsev)等等   

3. kill函式可以對程序傳送signal   

4. kill命令。實際上是對kill函式的乙個包裝   

5. 軟體中斷。如當alarm clock超時(sigurg),當reader中止之後又向管道寫資料(sigpipe),等等 。

linux應用程式中,記憶體布局

方法 通過檢視應用程式程序中的程序位址對映檔案實現。例如檢視2053號程序的記憶體布局 命令如下 cat proc 2053 maps 結果如下 通過我們的下面來程式分析各種 變數在程式中的記憶體位置。檔名 addr.c include include int a 全域性未初始化變數 int b 2...

linux應用程式中的定時器

linux作業系統為每乙個程序提供了3個內部計時器。itimer real itimer virtual itimer prof.itimer real 給定乙個指定的時間間隔,按照實際的時間來減少這個計數,當時間間隔為0的時候發出sigalrm訊號。itimer virtual 給定乙個時間間隔,...

linux應用程式中的記憶體布局講解

對向高記憶體位址生長,棧想低記憶體位址生長 linux的中所有的應用程式都是這個布局,每個應用程式都是從0x80480000這個位址開始的,這樣衝突嗎?不衝突,因為這個位址是乙個虛擬位址,linux中每個應用程式都有自己的虛擬位址空間。方法 通過檢視應用程式程序中的程序位址對映檔案實現。例如檢視20...