91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中信號集操作函數有哪些

發布時間:2021-10-27 11:52:24 來源:億速云 閱讀:115 作者:小新 欄目:系統運維

這篇文章主要為大家展示了“Linux中信號集操作函數有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Linux中信號集操作函數有哪些”這篇文章吧。

信號從產生到抵達目的地,叫作信號遞達。而信號從產生到遞達的中間狀態,叫作信號的未決狀態。產生未決狀態的原因有可能是信號受到阻塞了,也就是信號屏蔽字(或稱阻塞信號集,mask)對應位被置1。阻塞信號集和未決信號集均是由內核維護的,整個過程如下圖示:

Linux中信號集操作函數有哪些

我們有時需要屏蔽某個信號,就需要去修改阻塞信號集。那么,我們該如何修改阻塞信號集?系統提供的一個方法是,我們先創建一個跟阻塞信號集一樣的集合,再利用它去修改阻塞信號集。

系統提供了一系列的信號集設定函數。這些函數如下所示:

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

使用以上這些函數創建完信號集后,要如何去改變阻塞信號集呢?系統又提供了一個函數:sigprocmask函數。

sigprocmask函數可以用來屏蔽信號,也可以用來解除屏蔽信號,其本質就是利用我們創建的信號集去改變阻塞信號集。

函數原型:

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

返回值:

成功:0;失敗:-1,設置errno

參數解釋:

  • set:傳入參數,是一個位圖,set中哪位置1,就表示當前進程屏蔽哪個信號。

  • oldset:傳出參數,保存舊的信號屏蔽集。這個與setitimer有點相似。

how參數取值:

假設當前的信號屏蔽字為mask

  • SIG_BLOCK:當how設置為此值,set表示需要屏蔽的信號。相當于 mask = mask | set

  • SIG_UNBLOCK:當how設置為此,set表示需要解除屏蔽的信號。相當于 mask = mask & ~set

  • SIG_SETMASK:當how設置為此,set表示用于替代原始屏蔽及的新屏蔽集。相當于 mask = set若,調用sigprocmask解除了對當前若干個信號的阻塞,則在sigprocmask返回前,至少將其中一個信號遞達。

我們如何讀取未決信號集?系統提供了sigpending函數。

函數原型:

int sigpending(sigset_t *set);

參數說明:set傳出參數。

返回值:

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

例:把所有常規信號的未決狀態打印至屏幕。

#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 + \ 將產生SIGQUIT信號     sigprocmask(SIG_BLOCK, &set, &oldset);     while (1) {         sigpending(&pendset);         printPending(&pendset);     // 寫一個函數打印未決信號集         sleep(1);     } }

以上是“Linux中信號集操作函數有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广宁县| 手机| 民丰县| 章丘市| 古浪县| 棋牌| 临武县| 贺州市| 西盟| 云南省| 克东县| 托克托县| 湄潭县| 鄱阳县| 新乡市| 长兴县| 承德市| 德阳市| 沁阳市| 大丰市| 丹寨县| 资兴市| 呼和浩特市| 礼泉县| 伊宁市| 永兴县| 绥芬河市| 博湖县| 乐亭县| 新邵县| 高邮市| 河南省| 都江堰市| 萨迦县| 武穴市| 山丹县| 措美县| 云阳县| 新和县| 麻栗坡县| 沧州市|