linux系统编程之信号 test10_5.c

本文介绍了一个使用C语言编写的程序,该程序演示了如何使用sigprocmask函数来设置和修改进程的信号掩码,并通过checkmask函数检查当前信号掩码的状态。程序逐步展示了如何阻塞、解除阻塞特定信号,以及信号掩码的变化。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
void checkmask(void);
int errno_backup;


int main(void)
{
   // char buffer[100]; 
    sigset_t blockset;
    errno_backup=errno;




    sigemptyset(&blockset);// 清空信号集
    sigaddset(&blockset,SIGINT);
    sigaddset(&blockset,SIGTSTP);
    sigprocmask(SIG_SETMASK,&blockset,NULL);//赋值
    checkmask();


    printf("press any key to continue,");
    getchar();
    sigaddset(&blockset,SIGTERM);
    sigprocmask(SIG_BLOCK,&blockset,NULL);
    checkmask();


    printf("press any key to continue.");
    getchar();
    sigdelset(&blockset,SIGINT);
    sigprocmask(SIG_UNBLOCK,&blockset,NULL);
    checkmask();


    printf("press any key to finish.");
    getchar();
    return 0;
}
//打印信号掩码
void checkmask(void)
{
    sigset_t sigset;
    if(sigprocmask(0,NULL,&sigset)<0)
    {
        printf("sigprocmask error\n");
        errno=errno_backup;
        exit(0);
    }
    printf("signal mask:");


    if(sigismember(&sigset,SIGINT))
        printf("SIGINT ");


    if(sigismember(&sigset,SIGTSTP))
        printf("SIGTSTP ");


    if(sigismember(&sigset,SIGTERM))
        printf("SIGTERM ");


    printf("\n");


    errno=errno_backup;
}
/*
sigprocmask()用于检测或改变进程的信号掩码
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值