sigaction函式
(1)sigaction函式原型
sigaction函式用來查詢和設定訊號處理方式,它是用來替換早期的signal函式。sigaction函式原型及說明如下:
sigaction(查詢和設定訊號處理方式)
所需標頭檔案
#include
函式說明
sigaction()會依引數signum指定的訊號編號來設定該訊號的處理函式
函式原型
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact)
函式傳入值
signum
可以指定sigkill和sigstop以外的所有訊號
act引數結構sigaction定義如下
struct sigaction
① sa_handler:此引數和signal()的引數handler相同,此引數主要用來對訊號舊的安裝函式signal()處理形式的支援
② sa_sigaction:新的訊號安裝機制,處理函式被呼叫的時候,不但可以得到訊號編號,而且可以獲悉被呼叫的原因以及產生問題的上下文的相關資訊。
③ sa_mask:用來設定在處理該訊號時暫時將sa_mask指定的訊號擱置
④ sa_restorer: 此引數沒有使用
⑤ sa_flags:用來設定訊號處理的其他相關操作,下列的數值可用。可用or 運算(|)組合
ÿ a_nocldstop:如果引數signum為sigchld,則當子程序暫停時並不會通知父程序
ÿ sa_oneshot/sa_resethand:當呼叫新的訊號處理函式前,將此訊號處理方式改為系統預設的方式
ÿ sa_restart:被訊號中斷的系統呼叫會自行重啟
ÿ sa_nomask/sa_nodefer:在處理此訊號未結束前不理會此訊號的再次到來
ÿ sa_siginfo:訊號處理函式是帶有三個引數的sa_sigaction
oldact
如果引數oldact不是null指標,則原來的訊號處理方式會由此結構sigaction返回
函式返回值
成功:0
出錯:-1,錯誤原因存於error中
附加說明
訊號處理安裝的新舊兩種機制:
① 使用舊的處理機制:struct sigaction act; act.sa_handler=handler_old;
② 使用新的處理機制:struct sigaction act; act.sa_sigaction=handler_new;
並設定sa_flags的sa_siginfo位
錯誤**
einval:引數signum不合法,或是企圖攔截sigkill/sigstop訊號
eintr:此呼叫被中斷
#include
#include
#include
#include
#include
void new_op(int, siginfo_t *, void *);
int main(int argc, char** argv)
while(1)
return 0;
}void new_op(int signum, siginfo_t *info, void *myact)
gcc sigaction_t1.c -o sigaction_t1 -g
#./sigaction_t1 1
wait for the signal
wait for the signal
#./sigaction_t1 2
wait for the signal
wait for the signal
wait for the signal
receive signam 2 #
sigaction函式使用例項
sigaction函式 1 sigaction函式原型 sigaction函式用來查詢和設定訊號處理方式,它是用來替換早期的signal函式。sigaction函式原型及說明如下 sigaction 查詢和設定訊號處理方式 所需標頭檔案 include 函式說明 sigaction 會依引數sign...
sigaction函式的使用
sigaction函式的功能是檢查或修改與指定訊號相關聯的處理動作 可同時兩種操作 他是posix的訊號介面,而signal 是標準c的訊號介面 如果程式必須在非posix系統上執行,那麼就應該使用這個介面 給訊號signum設定新的訊號處理函式act,同時保留該訊號原有的訊號處理函式oldact ...
sigaction函式的使用
sigaction函式的功能是檢查或修改與指定訊號相關聯的處理動作 可同時兩種操作 他是posix的訊號介面,而signal 是標準c的訊號介面 如果程式必須在非posix系統上執行,那麼就應該使用這個介面 給訊號signum設定新的訊號處理函式act,同時保留該訊號原有的訊號處理函式oldact ...