本章介紹signal函式的使用:
表頭檔案
#include
定義函式
void (*signal(int signum,void(* handler)(int)))(int);
函式說明
signal()會依引數signum 指定的訊號編號來設定該訊號的處理函式。當指定的訊號到達時就會跳轉到引數handler指定的函式執行。如果引數handler不是函式指標,則必須是下列兩個常數之一:
sig_ign 忽略引數signum指定的訊號。
sig_dfl 將引數signum 指定的訊號重設為核心預設的訊號處理方式。
關於訊號的編號和說明,請參考附錄d
返回值
返回先前的訊號處理函式指標,如果有錯誤則返回sig_err(-1)。
例項1:
#include
#include
#include
void my_func(int sign_no)
int main()
程式一直在等待sigint和sigquit的訊號,當該訊號出現時,就會跳到my_func函式中執行,在linux中ctrl+c就可以傳送sigint訊號,ctrl+\就是傳送sigquit訊號。
例項2:上面的函式說明提到,signal函式的引數還可以設定為sig_ign,此時系統會預設忽略該訊號,不做任何處理
程式改動如下:
signal(sigint, sig_ign);
signal(sigquit, my_func);
例項3:signal函式的引數還可以設定為sig_dfl
Linux應用程式設計 09 程序間通訊 訊號通訊
訊號通訊 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式訊號可以直接進行使用者空間程序和核心程序之間的互動,核心程序也可以利用它來通知使用者空間程序發生了哪些系統事件 如果該程序當前並未處於執行態,則該訊號就由核心儲存起來,直到該程序恢復執行再傳遞給它 如果乙個訊號被程序設定為阻塞,則...
Linux應用程式設計 12 程序間通訊 訊號燈
訊號燈p v操作 semop 刪除訊號燈 semctl 程序間通訊方式比較 訊號燈集 共享記憶體 示例 訊號燈也叫訊號量,用於程序 執行緒同步或互斥的機制 訊號燈的型別 posix 無名訊號燈 posix有名訊號燈 system v 訊號燈 訊號燈的含義 計數訊號燈 訊號燈的值就是他代表的資源的數量...
Linux應用程式設計 程序通訊
通訊方式有管道pipe,訊號 一 pipe 管道分兩種無名管道,有名管道。1 無名管道 父程序和子程序可通過無名管道傳輸資料,管道有兩個口,一端寫一端讀,半雙工通訊。可以當作檔案進行操作,所以建立的管道會有兩個檔案描述符fds 0 和fds 1 fds 0 用於讀,fds 1 用於寫,關係如圖。實驗...