linux sigaction函式(註冊訊號)使用

2021-07-04 07:35:37 字數 1463 閱讀 6882

int sigaction(int signum, const

struct sigaction *act, struct sigaction *oldact);

sigaction函式的功能是檢查或修改與指定訊號相關聯的處理動作(可同時兩種操作)。

引數說明:

signum : 要操作的訊號

act : 要設定的對訊號的新處理方式

oldact : 原來對訊號的處理方式

返回值: 成功返回0,失敗返回-1,並設定errno

struct sigaction 結構體原型:

struct sigaction ;
sa_handler : 老型別的訊號處理函式指標,與 single 函式一樣
sa_sigaction 函式指標的三個引數含義為:

int isignnum : 傳入的訊號

siginfo_t *psigninfo : 該訊號相關的一些資訊,他是乙個結構體

原型如下

siginfo_t

void *preserved : 網上找的資料說明都是說(保留,佔時無用)

sa_mask : 是乙個包含訊號集合的結構體,該結構體內的訊號表示在進行訊號處理時,將要被阻塞的訊號。
sa_flags  是一組掩碼的合成值,指示訊號處理時所應該採取的一些行為,各掩碼的含義為:

sa_resethand : 處理完畢要捕捉的訊號後,將自動撤消訊號處理函式的註冊,即必須再重新註冊訊號處理函式,才能繼續處理接下來產生的訊號。

sa_nodefer : 在處理訊號時,如果又發生了其它的訊號,則立即進入其它訊號的處理,等其它訊號處理完畢後,再繼續處理當前的訊號,即遞規地處理。如果sa_flags包含了該掩碼,則結構體sigaction的sa_mask將無效;

sa_restart : 如果在發生訊號時,程式正阻塞在某個系統呼叫,例如呼叫read()函式,則在處理完畢訊號後,接著從阻塞的系統返回。該掩碼符合普通的程式處理流程,所以一般來說,應該設定該掩碼,否則訊號處理完後,阻塞的系統呼叫將會返回失敗;

sa_siginfo : 指示結構體的訊號處理函式指標是哪個有效,如果sa_flags包含該掩碼,則sa_sigactiion指標有效

示例:

#include 

#include

#include

#include

#include

#include

void my_sigaction(int signum, siginfo_t *siginfo, void *buf)

sleep(10);

}int main(int argc, char *argv)

linux sigaction訊號處理

sigaction函式相比signal函式更為複雜,但更具靈活性,下面具體介紹她的結構和用法 include int sigaction int signum,const struct sigaction act,struct sigaction oldact signum 要操作的訊號。act 要...

linux sigaction 函式 用法釋義

使用 sigaction 函式 signal 函式的使用方法簡單,但並不屬於 posix 標準,在各類 unix 平台上的實現不盡相同,因此其用途受 到了一定的限制。而 posix 標準定義的訊號處理介面是 sigaction 函式,其介面標頭檔案及原型如下 include int sigactio...

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...