1. 程式人生 > 其它 >qwidget show 是否有訊號_c++筆記(訊號集處理函式)

qwidget show 是否有訊號_c++筆記(訊號集處理函式)

技術標籤:qwidget show 是否有訊號

訊號集

在PCB中有兩個非常重要的訊號集。一個稱為 阻塞訊號集, 一個稱為 未決訊號集

這兩個訊號集都是核心使用點陣圖機制來實現的。但作業系統不充許我們直接對其操作,而需自定義另外一個集合,藉助訊號操作函式來對PCB中這兩個訊號集進行修改。

自定義訊號集函式

為了方便對多個訊號進行處理,一個使用者程序常常需要對多個訊號做出處理,在Linux系統中引入了訊號集

訊號集是一個能表示多個訊號的資料型別

#include<signal.h>

int sigemptyset(sigset_t *set);                 // 清空集合
int sigfillset(sigset_t *set);                  // 將所有訊號加入集合
int sigaddset(sigset_t *set,int signo);         // 將 signo 訊號加入集合
int sigdelset(sigset_t *set,int signo);         // 從 set 集合中移除 signo 訊號   
int sigismember(const sigset_t *set,int signo); // 判斷訊號是否存在

// 除 sigismember 外,其餘函式中的 set 均為傳出引數




// siggroup1.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<signal.h>

void show(sigset_t *s){
	int i=0;
	for(i=1;i<32;i++){
		if(sigismember(s,i)){
			printf("1-");
		}else{
			printf("0-");
		}
	
	}
	printf("n");

}


int main(){

	//定義集合
	sigset_t set;
	
	//清空
	sigemptyset(&set);
	show(&set);
	

	//將所集號加入集合
	sigfillset(&set);
	show(&set);


	//將2和3移除
	sigdelset(&set,SIGINT);
	sigdelset(&set,SIGQUIT);
	show(&set);


	//再將2加進去
	sigaddset(&set,SIGINT);
	show(&set);


	return 0;

}


// 編譯 gcc siggroup1.c -o siggroup1
// 執行  ./siggroup1   結果如下
//

38dd0087e872dd76774075e1f7c77002.png