C語言訊號學習筆記

2021-06-18 07:12:22 字數 989 閱讀 6800

在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 中應用什麼實現?...