c_cpp Linux的信号集操作,操作信号屏蔽字(阻塞信号集),读取未决信号集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Linux的信号集操作,操作信号屏蔽字(阻塞信号集),读取未决信号集相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <string>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
#include <sys/time.h>

/*
* 通过SIGRTMIN信号的处理,展示信号捕捉、处理、阻塞、恢复等流程
*/

void handler(int signum, siginfo_t * sgt, void *p)
{
    printf("signum:%d\n", signum);
    printf("arg:%d\n", sgt->si_value.sival_int);
}

int main(int arg, char* args[])
{
    /*struct sigaction
    {
    void(*sa_handler)(int);
    void(*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void(*sa_restorer)(void);
    };*/ //结构体
    sigset_t set, old;
    sigemptyset(&set); //清空字节
    sigaddset(&set, SIGRTMIN); //设置字节
    sigprocmask(SIG_BLOCK, &set, &old);  //设置掩码防止未设置完成就被触发

    struct sigaction cat;
    cat.sa_sigaction = handler; //回调句柄
    cat.sa_flags = SA_SIGINFO; //标志着:可带参数
    sigaction(SIGRTMIN, &cat, NULL);//注册

    union sigval sval;//设置传递参数
    sval.sival_int = 5550;
    sigqueue(getpid(), SIGRTMIN, sval);//发送信号

    sigprocmask(SIG_SETMASK, &old, NULL);//恢复被屏蔽的SIGRTMIN信号

    while (1)//阻塞等待
    {
    }
    return 0;
}
//操作当前进程信号屏蔽字(阻塞信号集)
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
//参数int how : (假设当前的信号屏蔽字为mask)
//  SIG_BLOCK: 当how设置为此值,set表示需要屏蔽的信号。相当于 mask = mask|set
//  SIG_UNBLOCK: 当how设置为此,set表示需要解除屏蔽的信号。相当于 mask = mask & ~set
//  SIG_SETMASK: 当how设置为此,set表示用于替代原始屏蔽及的新屏蔽集。相当于mask = set
//  注:若调用sigprocmask解除了对当前若干个信号的阻塞,则在sigprocmask返回前,至少将其中一个信号递达。
//参数const sigset_t *set :传入参数,是一个自定义信号集合。由参数how来指示如何修改当前信号屏蔽字。
//参数sigset_t *oldset :传出参数,保存旧的信号屏蔽字
//返回值:成功为0,失败为-1并设置errno

//读取当前进程的未决信号集
int sigpending(sigset_t *set);
//参数sigset_t *oldset :传出参数,当前的未决信号集
//返回值:成功为0,失败为-1并设置errno

以上是关于c_cpp Linux的信号集操作,操作信号屏蔽字(阻塞信号集),读取未决信号集的主要内容,如果未能解决你的问题,请参考以下文章

信号集和信号集操作函数信号屏蔽集设置和演示

linux下的信号屏蔽字

c_cpp Linux僵尸进程处理wait与waitpid用法,信号捕捉与屏蔽int sigaction(int signum,const struct sigaction * act,struct

IPC方法-信号

linux 编程 linux 信号发送(通过man获取详细介绍)

信号的屏蔽,信号集