久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux中信號(hào)集操作函數(shù)有哪些

共計(jì) 1818 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

這篇文章主要為大家展示了“Linux 中信號(hào)集操作函數(shù)有哪些”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux 中信號(hào)集操作函數(shù)有哪些”這篇文章吧。

信號(hào)從產(chǎn)生到抵達(dá)目的地,叫作信號(hào)遞達(dá)。而信號(hào)從產(chǎn)生到遞達(dá)的中間狀態(tài),叫作信號(hào)的未決狀態(tài)。產(chǎn)生未決狀態(tài)的原因有可能是信號(hào)受到阻塞了,也就是信號(hào)屏蔽字 (或稱(chēng)阻塞信號(hào)集,mask) 對(duì)應(yīng)位被置 1。阻塞信號(hào)集和未決信號(hào)集均是由內(nèi)核維護(hù)的,整個(gè)過(guò)程如下圖示:

我們有時(shí)需要屏蔽某個(gè)信號(hào),就需要去修改阻塞信號(hào)集。那么,我們?cè)撊绾涡薷淖枞盘?hào)集? 系統(tǒng)提供的一個(gè)方法是,我們先創(chuàng)建一個(gè)跟阻塞信號(hào)集一樣的集合,再利用它去修改阻塞信號(hào)集。

系統(tǒng)提供了一系列的信號(hào)集設(shè)定函數(shù)。這些函數(shù)如下所示:

sigset_t set;  信號(hào)集數(shù)據(jù)類(lèi)型,本質(zhì)是 typedef unsigned long sigset_t; int sigemptyset(sigset_t *set);  將某個(gè)信號(hào)集清 0  int sigfillset(sigset_t *set);  將某個(gè)信號(hào)集置 1  int sigaddset(sigset_t *set, int signum);  將某個(gè)信號(hào)加入信號(hào)集 int sigdelset(sigset_t *set, int signum);  將某個(gè)信號(hào)清出信號(hào)集以上幾個(gè)函數(shù)返回值均是:成功:0;失敗:-1 int sigismember(const sigset_t *set, int signum);  判斷某個(gè)信號(hào)是否在信號(hào)集中返回值:在集合:1;不在:0;出錯(cuò):-1

使用以上這些函數(shù)創(chuàng)建完信號(hào)集后,要如何去改變阻塞信號(hào)集呢? 系統(tǒng)又提供了一個(gè)函數(shù):sigprocmask 函數(shù)。

sigprocmask 函數(shù)可以用來(lái)屏蔽信號(hào),也可以用來(lái)解除屏蔽信號(hào),其本質(zhì)就是利用我們創(chuàng)建的信號(hào)集去改變阻塞信號(hào)集。

函數(shù)原型:

int sigprocmask(int how, const sigset_t set, sigset_t oldset);

返回值:

成功:0; 失敗:-1,設(shè)置 errno

參數(shù)解釋?zhuān)?/p>

set:傳入?yún)?shù),是一個(gè)位圖,set 中哪位置 1,就表示當(dāng)前進(jìn)程屏蔽哪個(gè)信號(hào)。

oldset:傳出參數(shù),保存舊的信號(hào)屏蔽集。這個(gè)與 setitimer 有點(diǎn)相似。

how 參數(shù)取值:

假設(shè)當(dāng)前的信號(hào)屏蔽字為 mask

SIG_BLOCK:當(dāng) how 設(shè)置為此值,set 表示需要屏蔽的信號(hào)。相當(dāng)于 mask = mask | set

SIG_UNBLOCK:當(dāng) how 設(shè)置為此,set 表示需要解除屏蔽的信號(hào)。相當(dāng)于 mask = mask ~set

SIG_SETMASK:當(dāng) how 設(shè)置為此,set 表示用于替代原始屏蔽及的新屏蔽集。相當(dāng)于 mask = set 若,調(diào)用 sigprocmask 解除了對(duì)當(dāng)前若干個(gè)信號(hào)的阻塞,則在 sigprocmask 返回前,至少將其中一個(gè)信號(hào)遞達(dá)。

我們?nèi)绾巫x取未決信號(hào)集? 系統(tǒng)提供了 sigpending 函數(shù)。

函數(shù)原型:

int sigpending(sigset_t *set);

參數(shù)說(shuō)明:set 傳出參數(shù)。

返回值:

返回值:成功:0; 失敗:-1,設(shè)置 errno

例:把所有常規(guī)信號(hào)的未決狀態(tài)打印至屏幕。

#include #include #include void printPending(sigset_t *set) { int i = 0; for (i = 0; i   32; i++) { if (sigismember(set, i) == 1) printf(1  else printf( 0  } printf(\n  } int main() { sigset_t set, oldset, pendset; sigemptyset( set); sigaddset(set, SIGQUIT); // ctrl + \  將產(chǎn)生 SIGQUIT 信號(hào)  sigprocmask(SIG_BLOCK,  set,  oldset); while (1) { sigpending( pendset); printPending(pendset); //  寫(xiě)一個(gè)函數(shù)打印未決信號(hào)集  sleep(1); } }

以上是“Linux 中信號(hào)集操作函數(shù)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計(jì)1818字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 惠东县| 德州市| 漳州市| 台州市| 闽侯县| 临朐县| 札达县| 永定县| 昌江| 许昌县| 九寨沟县| 城市| 东乌珠穆沁旗| 枣阳市| 宁乡县| 阳春市| 吉首市| 滨海县| 扎兰屯市| 朔州市| 黔南| 东山县| 渝中区| 县级市| 成安县| 商水县| 塔城市| 颍上县| 翁源县| 临汾市| 临猗县| 牙克石市| 信丰县| 安顺市| 广宗县| 分宜县| 泰州市| 敖汉旗| 镇远县| 闽侯县| 福清市|