訊號是由作業系統傳給程序的中斷,會提早終止乙個程式。在 unix、linux、mac os x 或 windows 系統上,可以通過按 ctrl+c 產生中斷。
有些訊號不能被程式捕獲,但是下表所列訊號可以在程式中捕獲,並可以基於訊號採取適當的動作。這些訊號是定義在 c++ 標頭檔案 中。
訊號描述
sigabrt
程式的異常終止,如呼叫 abort。
sigfpe
錯誤的算術運算,比如除以零或導致溢位的操作。
siwbiqztluegill
檢測非法指令。
sigint
程式終止(interrupt)信程式設計客棧號。
sigse**
非法訪問記憶體。
sigterm
傳送到程式的終止請求。
signal() 函式
c++ 訊號處理庫提供了 signal 函式,用來捕獲突發事件。以下是 signal() 函式的語法:
void (*signal (int sig, void (*func)(int)))(int);
這個函式接收兩個引數:第乙個引數是乙個整數,代表了訊號的編號;第二個引數是乙個指向訊號處理函式的指標。
讓我們編寫乙個簡單的 c++ 程式,使用 signal() 函式捕獲 sigint 訊號。不管您想在程式中捕獲什麼訊號,您都必須使用 signal 函式來註冊訊號,並將其與訊號處理程式相關聯。看看下面的例項:
#include
#include
#include
using namespace std;
void signalhandler( int signum )
iwbiqztluent main ()
return 0;
}當上面的**被編譯和執行時,它會產生下列結果:
going to sleep....
going to sleep....
going to sleep....
現在,按 ctrl+c 來中斷程式,您會看到程式捕獲訊號,程式列印如下內容並退出:
going to sleep....
going to sleep....
going to sleep....
interrupt signal (2) received.
raise() 函式
您可以使用函式 raise() 生成訊號,該函式帶有乙個整數訊號編號作為引數,語法如下:
int raise (signal sig);
在這裡,sig 是要傳送的訊號的編號,這些訊號包括:sigint、sigabrt、sigfpe、sigill、sigse**、sigterm、sighup。以下是我們使用 raise() 函式內部生成訊號的例項:
#include
#include
#include
using namespace std;
void signalhandler( int signum )
int main ()
sleep(1);
} return 0;
}當上面的**被編譯和執行時,它會產生下列結果,並會自動退出:
going to sleep....
going to sleep....
going to sleep....
interrupt signal (2) received.
C 陣列 詳細分析
c 陣列 詳細分析 摘自 1 陣列下標 1 在定義時必須明確。只能用正整數或const常量,靜態或全域性變數不可以 例如 const int length 5 int array length 特 在new時可以用變數做下標。例如 int array new int variable 2 在初始化時...
C 陣列 詳細分析
1 陣列下標 1 在定義時必須明確。只能用正整數或const常量,靜態或全域性變數不可以 例如 const int length 5 int array length 特 在new時可以用變數做下標。例如 int array new int variable 2 在初始化時 一維陣列,可略 例如 i...
const詳細分析
最近在分析 linux 驅動的過程過程中遇到一些關於 const 的使用,現在在這裡詳細剖析一下 一,const int p 首先分析一下幾個概念 1 p 是乙個指標變數,因而它也是乙個變數,所謂變數就有變數的位址和變數的值,而這裡 p變數的值就是乙個位址,該位址下存放的是乙個整數,p的值等於這個整...