成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

vxworks中如何使用Signal實(shí)現(xiàn)掩碼操作

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

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、寒亭網(wǎng)站維護(hù)、網(wǎng)站推廣。

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


/* 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: 獲取當(dāng)前任務(wù)中阻塞的Signal */int sigpending(sigset_t *pSet);
#define SIG_BLOCK   1#define SIG_UNBLOCK 2#define SIG_SETMASK 3/* POSIX: 修改/查看掩碼, 每個(gè)bit位表示一種Signal, *                       1表示攔截, 0表示響應(yīng) * pSet非空時(shí),修改任務(wù)的Signal掩碼 * pOldSet非空時(shí),查看任務(wù)原有的Signal掩碼 * how為修改方式 *    SIG_BLOCK   - 在原有掩碼上添加pSet *    SIG_UNBLOCK - 在原有源碼上去除pSet *    SIG_SETMASK - 設(shè)置掩碼為pSet */int sigprocmask(int how, sigset_t *pSet, sigset_t *pOldSet);
/* 設(shè)置掩碼 * 類似于sigprocmask(SIG_SETMASK, mask, ...) * 只支持低32位 * 不建議使用 */int sigsetmask(int mask);
/* 添加掩碼 * 類似于sigprocmask(SIG_BLOCK, mask, ...) * 只支持低32位 * 不建議使用 */int sigblock(int mask);

跑個(gè)例子,看看掩碼的效果


/* * Signal的使用 * 公眾號(hào): 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), 并附帶數(shù)值%d\n",            pInfo->si_code, sigNum, pInfo->si_value.sival_int);printf("任務(wù)%s的掩碼是0x%016llx\n", taskName(0),          ((struct sigcontext *)pContext)->sc_mask);    }
void testSig(){struct sigaction newAction;sigset_t newSet;sigset_t oldSet;
   taskDelay(10);
/* 注冊(cè)Signal處理函數(shù)到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);
/* 查看當(dāng)前掩碼 */    sigprocmask(0, NULL, &newSet);printf("當(dāng)前掩碼是0x%016llx\n", newSet);    pause();printf("任務(wù)%s被Signal激活\n", taskName(0));    }
/* 發(fā)送SIGUSR1到testSig */void giveSig(int tId){union sigval value;    value.sival_int = 100;printf("發(fā)送Signal(#%d)到任務(wù)%s, 并附帶數(shù)值%d\n",            SIGUSR1, taskName(tId), value.sival_int);    sigqueue(tId, SIGUSR1, value);    }
啟動(dòng)一個(gè)Task,掛接SIGUSR1的處理處理函數(shù),并屏蔽SIGUSR2。執(zhí)行效果如下

vxworks中如何使用Signal實(shí)現(xiàn)掩碼操作

可以看到,設(shè)置掩碼之前,不會(huì)攔截任何Signal,即原掩碼是64個(gè)0

關(guān)于“vxworks中如何使用Signal實(shí)現(xiàn)掩碼操作”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

當(dāng)前標(biāo)題:vxworks中如何使用Signal實(shí)現(xiàn)掩碼操作
本文地址:http://jinyejixie.com/article12/ppphgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)頁(yè)設(shè)計(jì)公司App設(shè)計(jì)、響應(yīng)式網(wǎng)站營(yíng)銷型網(wǎng)站建設(shè)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
汕头市| 万安县| 高碑店市| 海南省| 侯马市| 铜梁县| 日土县| 盐边县| 泸西县| 陈巴尔虎旗| 稻城县| 汉阴县| 嘉义县| 天气| 安吉县| 宁乡县| 长葛市| 香格里拉县| 九龙城区| 庆安县| 永吉县| 定兴县| 阿勒泰市| 西城区| 华阴市| 太湖县| 饶阳县| 汉阴县| 竹溪县| 迭部县| 句容市| 丰宁| 舞阳县| 古浪县| 阳曲县| 怀集县| 广平县| 徐闻县| 五寨县| 新巴尔虎左旗| 泽州县|