通訊架構學習 nginx 六 訊號集相關知識

2021-10-02 14:52:31 字數 1118 閱讀 2897

訊號集:

乙個程序必須能夠記住它當前阻塞了哪些訊號

0000001000000000000000  標誌位

我們需要被稱為訊號集的資料型別 能把60多個訊號都表示下。

linux中用sigset_t結構型別來表示訊號集;64位

typedef structsigset_t;

訊號集相關函式:

a) sigemptyset() 清空訊號集

b) sigfillset() 把所有訊號集都設定成1

c) 用sigaddset(), sigdelset() 增加訊號 刪除訊號

d) sigprocmask() sigmember() 

乙個程序裡對應乙個訊號集 用來記錄遮蔽和阻塞了哪些訊號 1 即為遮蔽  無法傳遞給該程序

如果有很多個訊號位都被設定為1, 那麼所有這些被設定為1的訊號都屬於當前被阻塞的而不能傳遞到該程序的訊號。

sigprocmask()函式,就能夠設定該程序所對應的訊號的內容

範例:#include

#include

#include

#include

void sig_quit(int signo)

}int main()

sigemptyset(&newmask);

sigaddset(&newmask, sigquit);

//sigprocmask第乙個引數

if(sigprocmask(sig_block, &newmask, &oldmask) < 0)

sleep(10);

printf("我已經休息10秒鐘了\n");

if(sigismember(&newmask, sigquit)) //測試乙個指定訊號是否被置為1

else

if(sigprocmask(sig_setmask, &oldmask, null)<0)

else

}printf("再見了!\n");

return 0;

}//sleep函式可以被打斷:

a) 時間到了

b) 來了乙個訊號 ,使sleep提前結束, 這時返回乙個剩餘時間

sigaction()函式是用來取代signal的。商業軟體中用這個。

訊號(六)訊號集操作函式

一 核心通過讀取未決訊號集來判斷訊號是否應該被處理。訊號遮蔽字mask可以影響未決訊號集。為我們可以在應用程式中自定義set來改變mask,來達到遮蔽指定訊號的目的。二 訊號集設定 sigset t set typedef unsigned long sigset t int sigemptyset...

Qt學習六 訊號與槽

訊號和槽是qt的核心特徵。用於物件間的通訊,類似觀察者模式。例如當乙個按鈕被點選,按鈕監測到自己被點選了一下,就會傳送乙個訊號 signal 這個訊號無目的,類似廣播。如果我們需要處理這個訊號,那麼就需要使用connect來連線乙個物件,使用該物件對應的槽函式 slot 來處理這個訊號。也就是說,當...

linux多執行緒學習 六 訊號量實現同步

訊號量的互斥同步都是通過pv原語來操作的,我們可以通過註冊兩個訊號量,讓它們在互斥的問題上互動,從而達到同步。通過下面例項就可以很容易理解 cpp view plain copy include include include include include include define retur...