[Linux]关于sigprocmask函数的讨论
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <assert.h> void printSignal()
{
sigset_t set;
int ret = ;
sigemptyset(&set);
ret = sigpending(&set);
int i = ;
for (i = ; i < ; i++)
{
if ( == (ret = sigismember(&set, i)))
{
printf("");
}
else if ( == ret)
{
printf("");
}
}
puts("");
} void my_sigaction (int num, siginfo_t *st, void *dat)
{
int ret = ;
if (SIGINT == num)
{
sigset_t set;
sigemptyset(&set);
ret = sigaddset(&set, SIGQUIT);
assert(- != ret);
ret = sigprocmask(SIG_UNBLOCK, &set, NULL);
assert(- != ret);
printf("my_sigaction\n");
printSignal();
printf("func myhandler num = %d\n", num);
}
else
{
printf("signal is no SIGQUIT\n");
}
} int main(void)
{
int ret = ; /* 阻塞信号 */
sigset_t set;
sigemptyset(&set);
ret = sigaddset(&set, SIGQUIT);
assert(- != ret);
ret = sigprocmask(SIG_BLOCK, &set, NULL);
assert(- != ret);
printf("阻塞信号\n");
//printSignal();
sigemptyset(&set);
/*
sigpending 是从未决状态字中读取的, 但是未决信号并不能立即得到block的同步
也就是说在block置1时pending并不能够立即的更新为1
*/
//sigpending(&set); /* 注册信号 */
struct sigaction act;
act.sa_sigaction = my_sigaction;
ret = sigemptyset(&(act.sa_mask));
assert(- != ret);
ret = sigaction(SIGINT, &act, NULL);
assert(- != ret);
printf("注册信号\n");
printSignal(); while ()
{
printSignal();
sleep();
}
return ;
}
[Linux]关于sigprocmask函数的讨论的更多相关文章
- Linux常用系统函数
Linux常用系统函数 一.进程控制 fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程 ...
- Linux C 创建目录函数mkdir相关(转-清新居士)
I.Linux C 创建目录函数mkdir的mode设置问题 函数原型: #include <sys/stat.h> int mkdir(const char *path, mode_t ...
- linux下syscall函数,SYS_gettid,SYS_tgkill
出处:http://blog.chinaunix.net/uid-28458801-id-4630215.html linux下syscall函数,SYS_gettid,SYS_tgkill ...
- 对于linux下system()函数的深度理解(整理)
原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...
- Linux下c函数dlopen实现加载动态库so文件代码举例
dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...
- Linux Kernel‘ieee80211_radiotap_iterator_init()’函数拒绝服务漏洞
漏洞名称: Linux Kernel‘ieee80211_radiotap_iterator_init()’函数拒绝服务漏洞 CNNVD编号: CNNVD-201312-041 发布时间: 2013- ...
- Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-423 发布时间: 2013-11-29 更新时间: 201 ...
- Linux kernel ‘aac_send_raw_srb’函数输入验证漏洞
漏洞名称: Linux kernel ‘aac_send_raw_srb’函数输入验证漏洞 CNNVD编号: CNNVD-201311-422 发布时间: 2013-11-29 更新时间: 2013- ...
- Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞
漏洞名称: Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞 CNNVD编号: CNNVD-201311-421 发布时间: 2013-11-29 更新时间: 2013 ...
随机推荐
- something important
docker run ubuntu /bin/echo 'Hello world' 运行这条命令,docker做了什么 Well, Docker containers only run as long ...
- git use
git init git init --bare ''会将文档直接加上.git后缀 具体内容请渡 git add --all git commit -m 'label' git push --all ...
- html布局 左右固定,中间只适应,三种方法实现
html布局 左右固定,中间只适应,三种方法实现 使用自身浮动法定位 //html <h3>使用自身浮动法定位</h3> <div id="left_self& ...
- Codeforces 402D Upgrading Array:贪心 + 数学
题目链接:http://codeforces.com/problemset/problem/402/D 题意: 给你一个长度为n的数列a[i],又给出了m个“坏质数”b[i]. 定义函数f(s),其中 ...
- POJ 2253 Frogger(warshall算法)
题意:湖中有很多石头,两只青蛙分别位于两块石头上.其中一只青蛙要经过一系列的跳跃,先跳到其他石头上,最后跳到另一只青蛙那里.目的是求出所有路径中最大变长的最小值(就是在到达目的地的路径中,找出青蛙需要 ...
- 关于c++中命名空间namespace
一.定义命名空间: 步骤一:在.h文件中:namespace ns{.......}//将定义的类和全局变量,全局函数写入花括号内. 步骤二:在.cpp文件中: using namespace ns ...
- Android: 利用SurfaceView绘制股票滑动直线解决延迟问题
1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...
- VBS错误代码释义
VBScript 语法错误 如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误.VBScript 语法错误通常在执行程序前,编译 ...
- jcrop的bug
1 360(7.1.1.620,内核:31.0.1650.63)的极速模式下,出现裁剪框后,鼠标点击,页面就会滑动到底部. 查看了下源码,发现是下面的代码: function watchKeys() ...
- Centos6.5安装上传下载工具
执行下面命令即可. sudo yum install lrzsz rz 是上传命令 sz filename是下载命令 如果rz上传文件时提示 was skipped,则用sudo rz命令来进行上传.