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获取详细介绍)
信号的屏蔽,信号集