亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1459 | 回復(fù): 2
打印 上一主題 下一主題

[Linux] sigsuspend等待一個(gè)信號(hào)處理程序設(shè)置一個(gè)全局變量 [復(fù)制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-03-19 11:30 |只看該作者 |倒序?yàn)g覽
下面的代碼是《Unix環(huán)境高級(jí)編程》(第二版)上P271上的代碼。目的是演示sigsuspend的另一種應(yīng)用,等待一個(gè)信號(hào)處理程序設(shè)置一個(gè)全局變量。
  在代碼的最后設(shè)置

        quitflag = 0;
有什么用呢?


#include "apue.h"

volatile sig_atomic_t        quitflag;        /* set nonzero by signal handler */

static void
sig_int(int signo)        /* one signal handler for SIGINT and SIGQUIT */
{
        if (signo == SIGINT)
                printf("\ninterrupt\n");
        else if (signo == SIGQUIT)
                quitflag = 1;        /* set flag for main loop */
}

int
main(void)
{
        sigset_t        newmask, oldmask, zeromask;

        if (signal(SIGINT, sig_int) == SIG_ERR)
                err_sys("signal(SIGINT) error");
        if (signal(SIGQUIT, sig_int) == SIG_ERR)
                err_sys("signal(SIGQUIT) error");

        sigemptyset(&zeromask);
        sigemptyset(&newmask);
        sigaddset(&newmask, SIGQUIT);

        /*
         * Block SIGQUIT and save current signal mask.
         */
        if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
                err_sys("SIG_BLOCK error");

        while (quitflag == 0)
                sigsuspend(&zeromask);

        /*
         * SIGQUIT has been caught and is now blocked; do whatever.
         */
        quitflag = 0;

        /*
         * Reset signal mask which unblocks SIGQUIT.
         */
        if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
                err_sys("SIG_SETMASK error");

        exit(0);
}

求職 : 機(jī)器學(xué)習(xí)
論壇徽章:
79
2015年亞洲杯紀(jì)念徽章
日期:2015-05-06 19:18:572015七夕節(jié)徽章
日期:2015-08-21 11:06:172015亞冠之阿爾納斯?fàn)?日期:2015-09-07 09:30:232015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-10-21 08:26:3915-16賽季CBA聯(lián)賽之浙江
日期:2015-12-30 09:59:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-01-10 12:35:21技術(shù)圖書(shū)徽章
日期:2016-01-15 11:07:2015-16賽季CBA聯(lián)賽之新疆
日期:2016-02-24 13:46:0215-16賽季CBA聯(lián)賽之吉林
日期:2016-06-26 01:07:172015-2016NBA季后賽紀(jì)念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16賽季CBA聯(lián)賽之浙江
日期:2017-07-18 13:41:54
2 [報(bào)告]
發(fā)表于 2015-03-19 12:51 |只看該作者
  1. while (quitflag == 0)
復(fù)制代碼
顯然設(shè)置這個(gè)變量是為了控制程序的流程,這樣的話,程序就可以退出循環(huán)了啊。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報(bào)告]
發(fā)表于 2015-04-17 14:15 |只看該作者
這個(gè)while (quitflag == 0) 不是時(shí)進(jìn)程休眠嘛,在捕捉到信號(hào)或發(fā)生一個(gè)會(huì)終止該進(jìn)程的信號(hào)前,進(jìn)程一直是掛起狀態(tài)。直到,捕獲到SIGQUIT信號(hào),設(shè)置quitflag = 1;

最后,又執(zhí)行了 quitflag = 0;  在Unix/Linux系統(tǒng)編程手冊(cè)書(shū)上,代碼結(jié)束沒(méi)有設(shè)置全局變量=0,沒(méi)搞懂,有什么作用。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP