vxworks中如何使用Signal實現掩碼操作

這篇文章將為大家詳細講解有關vxworks中如何使用Signal實現掩碼操作,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊網站空間、營銷軟件、網站建設、寒亭網站維護、網站推廣。

Kernel里,每個Task都有針對Signal的掩碼(Mask)。掩碼值為1表示攔截該Signal,即不處理Signal;掩碼值為0表示會處理該Signal。而且默認情況下每個Task都會處理發給自己的Signal,只不過默認的處理方案是SIG_IGN(丟棄/忽略)。因此,要對Signal有所反應,就需要手動掛接Signal的處理機制了。今天看看Mask相關的操作


/* Signal的來源 */#define SI_SYNC     0 /* (Not posix) gernerated by hardware */#define SI_USER    -1 /* signal from kill() function */#define SI_QUEUE   -2 /* signal from sigqueue() function */#define SI_TIMER   -3 /* signal from expiration of a timer */#define SI_ASYNCIO -4 /* signal from completion of async I/O */#define SI_MESGQ   -5 /* signal from arrival of a message */#define SI_CHILD   -6 /* signal from child, stopped or terminated */#define SI_KILL    SI_USER
typedef unsigned long long sigset_t;
/* POSIX: 清空Signal掩碼, 常用于初始化 */int sigemptyset(sigset_t *pSet);
/* POSIX: 與sigemptyset()相反, 置所有Signal的bit位為1 */int sigfillset(sigset_t *pSet);
/* POSIX: 在掩碼pSet中添加signum */int sigaddset(sigset_t *pSet, int signum);
/* POSIX: 在掩碼pSet中去除signum */int sigdelset(sigset_t *pSet, int signum);
/* POSIX: 在掩碼pSet中是否包含signum */int sigismember(sigset_t *pSet, int signum);
/* POSIX: 獲取當前任務中阻塞的Signal */int sigpending(sigset_t *pSet);
#define SIG_BLOCK   1#define SIG_UNBLOCK 2#define SIG_SETMASK 3/* POSIX: 修改/查看掩碼, 每個bit位表示一種Signal, *                       1表示攔截, 0表示響應 * pSet非空時,修改任務的Signal掩碼 * pOldSet非空時,查看任務原有的Signal掩碼 * how為修改方式 *    SIG_BLOCK   - 在原有掩碼上添加pSet *    SIG_UNBLOCK - 在原有源碼上去除pSet *    SIG_SETMASK - 設置掩碼為pSet */int sigprocmask(int how, sigset_t *pSet, sigset_t *pOldSet);
/* 設置掩碼 * 類似于sigprocmask(SIG_SETMASK, mask, ...) * 只支持低32位 * 不建議使用 */int sigsetmask(int mask);
/* 添加掩碼 * 類似于sigprocmask(SIG_BLOCK, mask, ...) * 只支持低32位 * 不建議使用 */int sigblock(int mask);

跑個例子,看看掩碼的效果


/* * Signal的使用 * 公眾號: VxWorks567 */#include <stdio.h>  /* printf()    */#include <signal.h> /* sigaction() */#include <unistd.h> /* pause()     */#include <taskLib.h>/* taskName()  */
static void myHandler(int        sigNum,siginfo_t *pInfo,void      *pContext    ){printf ("\n從%d接收到Signal(#%d), 并附帶數值%d\n",            pInfo->si_code, sigNum, pInfo->si_value.sival_int);printf("任務%s的掩碼是0x%016llx\n", taskName(0),          ((struct sigcontext *)pContext)->sc_mask);    }
void testSig(){struct sigaction newAction;sigset_t newSet;sigset_t oldSet;
   taskDelay(10);
/* 注冊Signal處理函數到SIGUSR1 */    newAction.sa_sigaction = myHandler;    newAction.sa_mask  = 0;    newAction.sa_flags = SA_SIGINFO;    sigaction(SIGUSR1, &newAction, NULL);
/* 攔截SIGUSR2 */    sigemptyset(&newSet);    sigaddset(&newSet, SIGUSR2);    sigprocmask(SIG_BLOCK, &newSet, &oldSet);printf("\n原掩碼是0x%016llx\n", oldSet);
/* 查看當前掩碼 */    sigprocmask(0, NULL, &newSet);printf("當前掩碼是0x%016llx\n", newSet);    pause();printf("任務%s被Signal激活\n", taskName(0));    }
/* 發送SIGUSR1到testSig */void giveSig(int tId){union sigval value;    value.sival_int = 100;printf("發送Signal(#%d)到任務%s, 并附帶數值%d\n",            SIGUSR1, taskName(tId), value.sival_int);    sigqueue(tId, SIGUSR1, value);    }
啟動一個Task,掛接SIGUSR1的處理處理函數,并屏蔽SIGUSR2。執行效果如下

vxworks中如何使用Signal實現掩碼操作

可以看到,設置掩碼之前,不會攔截任何Signal,即原掩碼是64個0

關于“vxworks中如何使用Signal實現掩碼操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

當前標題:vxworks中如何使用Signal實現掩碼操作
本文地址:http://m.kartarina.com/article12/ppphgc.html

成都網站建設公司_創新互聯,為您提供Google網頁設計公司App設計響應式網站營銷型網站建設微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 永久免费av无码不卡在线观看| 亚洲AV综合色区无码一区爱AV| 五十路熟妇高熟无码视频| 日韩免费人妻AV无码专区蜜桃| 人妻无码第一区二区三区| 亚洲AV无码一区二区三区牲色| 亚洲?v无码国产在丝袜线观看| 亚洲Av无码专区国产乱码DVD| 久久午夜无码鲁丝片秋霞| 亚洲精品无码av天堂| 人妻中文字幕无码专区| 无码专区国产无套粉嫩白浆内射| 久久久久亚洲AV片无码下载蜜桃| 国产综合无码一区二区色蜜蜜| 西西午夜无码大胆啪啪国模| 国产成人综合日韩精品无码不卡| 亚洲中文无码卡通动漫野外| 国产成人无码午夜福利软件| 亚洲AV无码一区二区乱子仑| 国产强伦姧在线观看无码| 午夜无码性爽快影院6080| 亚洲av永久无码精品秋霞电影影院| 亚洲午夜无码久久| 青青草无码免费一二三区| 亚洲精品无码专区久久久| 国产真人无码作爱免费视频| 久久人妻少妇嫩草AV无码蜜桃| 亚洲av无码成人影院一区| 日韩AV无码久久一区二区| 亚洲AV无码码潮喷在线观看| 东京热无码av一区二区| 亚洲精品国产日韩无码AV永久免费网 | 无码人妻精品一区二区三区久久| 日韩精品中文字幕无码专区| 亚洲精品无码中文久久字幕| 制服在线无码专区| 久久久久精品国产亚洲AV无码| 少妇无码AV无码专区在线观看| 亚洲AV人无码激艳猛片| 午夜人性色福利无码视频在线观看| 国产成人精品无码一区二区|