訊號處理的實現(jump

2021-06-23 09:46:37 字數 682 閱讀 2807

訊號處理函式是程序接收到訊號後要執行的函式,該函式應該盡量簡潔。只改變乙個標誌位。

注意事項:

2.如果在訊號處理函式中呼叫函式,函式必須是可以重入的,保證在訊號處理函式執行期間不會有訊號到達程序,linux系統有和你多不可以重入函式,比如malloc,gethostbyname等等。

長跳轉操作是從訊號處理函式直接跳轉到函式體外制定的**位置繼續執行,很多情況長跳轉可以減少**的複雜度。兩個函式sigsetjmp和siglongjmp,在成功呼叫sigsetjmp

後,sigsetjmp語句所在位置就是跳轉點,這個位置指標被儲存到sigsetjmp的第乙個引數裡面,siglongjmp用於跳轉到指定的跳轉點。位於setjmp.h裡面。

#include#include#include#include#include#include#include #include#include#includestatic sigjmp_buf jmpbuf;//靜態全域性變數,儲存跳轉點

static volatile int isok;//防止優化,因為中斷處理函式和主函式都用到這個函式

void handle_sigint(int signo)

int main()

isok = 1;

for(;;)

return 0;

}

訊號處理,訊號佇列

最近幾天在看訊號,對實時訊號的實時性不是很理解,今天看了下 dequeue signal 差不多理解了,乙個實時訊號可以有多個實時佇列,在signal集合裡乙個signal可能有多個signal佇列。訊號,有訊號佇列,有訊號集 sigpending是訊號pending的結構體,裡面有sigqueue...

Linux的訊號處理

linux為實現訊號處理提供了比較多的介面,看似紛雜,但理清訊號的關係後還是很有條理的。主要分為以下四組,怎麼傳送乙個訊號,收到乙個訊號後做什麼樣的處理,主動等待乙個訊號的發生,對特定訊號只記錄是否發生供以後再處理 四組的api如下 不考慮多執行緒 傳送訊號 kill,alarm,arise 安裝訊...

訊號的逐步處理

一 訊號 1 什麼是訊號?訊號是乙個軟體中斷,通知程序發生了某個事件,打斷當前程序的當前操作,去處理這個事件 2 linux下的訊號分類 1 31號訊號 非可靠訊號 有可能產生訊號丟失 34 64號訊號 可靠訊號 不會丟失 3 訊號的生命週期 產生 註冊 銷毀 處理 1 硬體產生 ctrl c 中斷...