sigpending函數(shù)返回信號(hào)集,其中的各個(gè)信號(hào)對(duì)于調(diào)用進(jìn)程是阻塞的而不能遞送,因而也一定是當(dāng)前未決的。該信號(hào)集通過set參數(shù)返回。(這些信號(hào)是已經(jīng)產(chǎn)生的信號(hào),但因?yàn)樾盘?hào)屏蔽字中對(duì)其設(shè)置了屏蔽位,從而被阻塞,不能遞送給進(jìn)程的那些信號(hào)。注意sigpending返回的信號(hào)集與信號(hào)屏蔽字的區(qū)別。從集合角度來講,此信號(hào)集是當(dāng)前信號(hào)屏蔽字的子集。)
#include <signal.h>int sigpending(sigset_t *set);返回值:若成功則返回0,若出錯(cuò)則返回-1
程序清單10-11 信號(hào)設(shè)置和sigPRocmask實(shí)例
#include "apue.h"static void sig_quit(int);intmain(void){ sigset_t newmask, oldmask, pendmask; if (signal(SIGQUIT, sig_quit) == SIG_ERR) err_sys("can't catch SIGQUIT"); /* * Block SIGQUIT and save current signal mask. */ sigemptyset(&newmask); sigaddset(&newmask, SIGQUIT); if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) err_sys("SIG_BLOCK error"); sleep(5); /* SIGQUIT here will remain pending */ if (sigpending(&pendmask) < 0) err_sys("sigpending error"); if (sigismember(&pendmask, SIGQUIT)) printf("/nSIGQUIT pending/n"); /* * Reset signal mask which unblocks SIGQUIT. */ if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) err_sys("SIG_SETMASK error"); printf("SIGQUIT unblocked/n"); sleep(5); /* SIGQUIT here will terminate with core file */ exit(0);}static voidsig_quit(int signo){ printf("caught SIGQUIT/n"); if (signal(SIGQUIT, SIG_DFL) == SIG_ERR) err_sys("can't reset SIGQUIT");}
本篇博文內(nèi)容摘自《UNIX環(huán)境高級(jí)編程》(第二版),僅作個(gè)人學(xué)習(xí)記錄所用。關(guān)于本書可參考:http://www.apuebook.com/。
新聞熱點(diǎn)
疑難解答
圖片精選