在c語言中,對於錯誤有很多處理方式。然而,今天學習了訊號處理,感覺這種處理方式十分靈活,特此記錄。
關於訊號處理的函式包含於標頭檔案中。所謂的訊號,多指出乎程式設計師意料的行為,包括程式本身的行為(即錯誤)和使用者的行為。當有錯誤或者外部事件發生時,我們稱產生了乙個訊號。
signal.h中定義了若干巨集與相應的訊號對應,比較常用的有: 巨集名
含義sigabrt
異常終止
sigfpe
在算術運算中發生錯誤
sigill
無效指令
sigint
中斷sigsegv
無效儲存訪問
sigterm
終止請求
其中,signal函式用於處理訊號,將相應的訊號和自己編寫的函式關聯,達到執行相應指令的目的。有點類似於事件偵聽器。原型如下:
void (*signal(ing sig, void (*func)(int)))(int);
用法如下:
signal (sigint, handler);
另外,raise函式可以手工地產生乙個訊號,用法如下:
raise(sigabrt); // raises the sigabrt signal.
示例程式:
/* tsignal.c
* to test signals.
* by eric brown
*/#include #include #include void handler(int sig);
int main(void)
void handler(int sig)
if (sig == sigabrt)
}
執行效果如下:
c語言 訊號
沒有被當前程序處理的訊號,因為阻塞問題這個訊號就不會被程序處理 kill 傳送訊號給某個程序 int kill pid t pid,int sig kill l include include include intmain int argc,char ar else if pid 0 return...
C語言筆記 訊號量sem t
includeint sem init sem t sem,int pshared,unsigned int value sem init 初始化乙個定位在 sem 的匿名信號量。value 引數指定訊號量的初始值。pshared 引數指明訊號量是由程序內線程共享,還是由程序之間共享。如果 psha...
學習筆記 C語言
1.for 1 等價於 while 1 2.程式的區域性變數存在於 堆疊 中,全域性變數存在於 靜態區 中,動態申請資料存在於 堆 中。3.區域性變數能否和全域性變數重名?能,區域性會遮蔽全域性。要用全域性變數,需要使用 4.對於乙個頻繁使用的短小函式,在c語言中應用什麼實現,在c 中應用什麼實現?...