- 與信號集操作相關的函數
#include <signal.h>
清空信號集 全都為0
int sigemptyset(sigset_t *set);填充信號集 全都為1
int sigfillset(sigset_t *set);添加某個信號到信號集
int sigaddset(sigset_t *set, int signum);從集合中刪除某個信號
int sigdelset(sigset_t *set, int signum);判斷信號是否在信號集中
int sigismember(const sigset_t *set, int signum);
以上函數的返回值
sigemptyset(), sigfillset(), sigaddset(), and sigdelset() return 0 onsuccess and -1 on error.sigismember() returns 1 if signum is a member of set, 0 if signum isnot a member, and -1 on error.
- 用來設置或者是解除阻塞信號的函數
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
參數介紹:
howSIG_BLOCK 設置阻塞The set of blocked signals is the union of the current set andthe set argument.SIG_UNBLOCK 解除阻塞The signals in set are removed from the current set of blockedsignals. It is permissible to attempt to unblock a signal whichis not blocked.SIG_SETMASK 設置set為新的阻塞信號集The set of blocked signals is set to the argument set.set 傳入的信號集
oldset 傳出的信號集
return:
sigprocmask() returns 0 on success and -1 on error.
- sigpending函數
讀取當前進程的未決信號集
man sigpending
#include <signal.h>
int sigpending(sigset_t *set);
set為傳出參數
返回值:成功0, 失敗-1,設置errno
- 代碼案例:
設置屏蔽信號集,然后發送信號,然后打印當前未決信號集
#include <signal.h>
#include <stdio.h>
#include <unistd.h>int main() {sigset_t pend, setShield;sigemptyset(&setShield);sigaddset(&setShield, SIGINT);sigaddset(&setShield, SIGQUIT);sigprocmask(SIG_BLOCK, &setShield, NULL);while (1) {sigpending(&pend);int i=1;for(; i<32; ++i) {printf("%d", sigismember(&pend, i));}printf("\n");sleep(1);}return 0;
}
// 0110000000000000000000000000000