日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux学习之系统编程篇:与信号集有关的函数

發布時間:2024/9/30 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux学习之系统编程篇:与信号集有关的函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、自定義信號集

(1)類型:sigset_t (本質是位圖)
(2)設置自定義信號集方法:

sigset_t set; //創建一個自定義信號集sigemptyset(&set); //創建后,默認是隨機數,所以跟著置空func(&set); //設置自定義信號集(func 詳見下 5 個函數)

(3)設置自定義信號集函數:5 個

int sigemptyset(sigset_t *set); // 將自定義信號集置空(置 0)// 不阻塞任何信號 int sigfillset(sigset_t *set); // 將自定義信號集置 1 // 阻塞所有信號 int sigaddset(sigset_t *set, int signum); // 將某個信號在自定義信號集置 1 int sigdelset(sigset_t *set, int signum); // 將某個信號在自定義信號集置 0 int sigismember(const sigset_t *set, int signum); // 判斷某個信號在集合內是否為 1

二、通過“自定義信號集”設置“阻塞信號集”的函數

通過“自定義信號集”設置“阻塞信號集”的函數:sigprocmask
(1)函數原型:

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

(2)參數:
how :如何映射的,有三種
1)SIG_BLOCK :阻塞 ,自定義信號集和阻塞信號集 兩個位圖取或 。即:某個信號被其中任意一個集合阻塞,最終結果就是阻塞。
2)SIG_UNBLOCK :解除阻塞 ,先查看自定義信號集,記錄設置為 1 的位置, 再查看阻塞信號集,對應位置,若是 1,改為 0,若是 0,則不動。
3)SIG_SETMASK :同步 ,自定義信號集覆蓋阻塞信號集。
sigset_t *set: 傳入參數,傳入自定義信號集的地址。
sigset_t *oldest:傳出參數,設置之前阻塞信號集狀態 不關心,傳 NULL。

三、讀取當前進程未決信號集

讀取當前進程未決信號集:sigpending 函數。
(1)函數原型:

int sigpending(sigset_t *set);

注意:為傳出參數,而 set 是位圖,無法直接讀取,所以常配合 sigismember 使用。
(2)練習:打印當前進程的未決信號集

sigset_t set; // 定義一個信號集,用于存儲未決信號集信息 sigpending(&set); // 獲得未決信號集信息 for(int i = 1; i < 32; i++) // 循環讀取 //注意:信號集編號 1-31 {if( sigismember(&set, i) ) { printf(1); } else {printf(0); } }

總結

以上是生活随笔為你收集整理的Linux学习之系统编程篇:与信号集有关的函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。