[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 ...
随机推荐
- 分享知识-快乐自己:遍历Map集合
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { pu ...
- linux 替换目录下文件所有关键字
for i in *;do sed -ie 's/_test2/_test3/g' $i; sed -ie 's/_type2/_type3/g' $i; done 539down voteaccep ...
- JS+css3焦点轮播图PC端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- os.path
- 机器学习 Support Vector Machines 3
Optimal margin classifiers 前面我们讲过,对如下的原始的优化问题我们希望找到一个优化的边界分类器. minγ,w,bs.t.12∥w∥2y(i)(wTx(i)+b)⩾1,i= ...
- java基础回顾之IO
Java的IO 是Java运用重要部分之一,涉及到的内容也比较多,容易混淆,一段时间不用,可能就会遗忘,要时常回顾记忆一下: (图片来源于网络) Java 流在处理上分为字符流和字节流. 字符流处理的 ...
- 51Nod1766 树上的最远点对
1766 树上的最远点对 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个区间内各选一点之间的最大距离,即你需要求出max{dis(i,j) |a<=i&l ...
- 【Lintcode】364.Trapping Rain Water II
题目: Given n x m non-negative integers representing an elevation map 2d where the area of each cell i ...
- 标准模板库(STL)学习指南之map映射
转载自CSDN博客:http://blog.csdn.net/bat603/article/details/1456141 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关 ...
- Java中使用同步关键字synchronized需要注意的问题
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行.synchronized既可以加在一段代码上,也可以加在 ...