sigsuspend 用于等待信号处理程序设置全局变量

原创 2012年03月26日 09:55:38
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>

extern int errno;

volatile sig_atomic_t quitflag;

static void sig_int(int signo)
{
    if(signo == SIGINT)
    {   
        printf("INTERRUPT!\n");
    }   
    else if(signo == SIGQUIT)
    {   
        quitflag = 1;
    }   
}

int main(int argc, char **argv)
{
    sigset_t newmask, oldmask, zeromask;
    
    if(signal(SIGINT, sig_int) == SIG_ERR)
    {   
        printf("SIGINT: %s\n", strerror(errno));
        exit(-1);
    }   
    
    if(signal(SIGQUIT, sig_int) == SIG_ERR)
    {   
        printf("SIGQUIT: %s\n", strerror(errno));
        exit(-2);
    }   

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

    if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
    {
        printf("sigprocmask(SIG_BLOCK): %s\n", strerror(errno));
        exit(-3);
    }

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

    if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
    {
        printf("sigprocmask(SIG_SETMASK): %s\n", strerror(errno));
        exit(-4);
    }
    exit(0);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python多线程下的信号处理程序示例

下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来。 思路 python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon; 2.使用isAliv...

调用信号处理程序被捕捉的信号自动地加到进程的当前信号屏蔽字中signal() sigpending()

//当调用一个信号处理程序时,被捕捉的信号自动地加到进程的当前信号屏蔽字中,阻止后来产生的这种信号中断改信号处理程序。 //当从信号处理程序返回时,自动恢复原来的屏蔽字 #include

现代信号处理程序

  • 2013-03-27 13:29
  • 284KB
  • 下载

走进C++程序世界-----函数相关(全局变量,默认参数,函数重载,内联函数)

全局变量 在函数外面定义的变量的作用域为全局,在程序的任何函数中都可用。与全局变量同名的局部变量不会修改全局变量的值,但会隐藏它。如果函数中有一个与全局变量同 名的局部变量时,则在函数中使用该名称时,...

信号处理程序

第12周上机实践项目1——阅读程序(全局变量)

问题及代码 /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:辛彬 * ...

数字信号处理程序集

  • 2012-12-19 13:32
  • 7.27MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)