sigaction函式使用例項

2021-06-09 03:46:36 字數 1958 閱讀 8453

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 ...