sigsuspend()
来源:互联网 发布:淘宝企业店铺转让过程 编辑:程序博客网 时间:2024/06/10 03:28
http://blog.sina.com.cn/s/blog_502d82e10100fw16.html
http://blog.sina.com.cn/s/blog_6af9566301013xp4.html
名称::
sigsuspend
功能:
头文件:
#include <signal.h>
函数原形:
int sigsuspend(const sigset_t *sigmask);
参数:
sigmask 要替换的进程信号屏蔽字。
返回值:
-1,errno设置为EINTR.
sigsuspend用于在接收到某个信号之前, 临时用sigmask替换进程的信号掩码, 并暂停进程执行,直到收到信号为止。sigsuspend 返回后将恢复调用之前的信号掩码。信号处理函数完成后,进程将继续执行。该系统调用始终返回-1,并将errno设置为EINTR。
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void sig_int(int);
int main(void)
{
sigset_t newmask,oldmask,zeromask;
if(signal(SIGINT,sig_int)==SIG_ERR)
sigemtyset(&zeromask);
sigemtyset(&newmask);
if(sigprocmask(SIG_BLICK,&newmask,&oldmask)<0)
printf(“In critical region: SIGINT\n”);
if(sigsuspend(&zeromask)!=-1)
printf(“After return from sigsuspend: SIGINT\n”);
sleep(5);
exit(0);
}
static void sig_int(int signo) /*信号处理函数
{
printf(“In sig_int: SIGINT\n”);
}
1)头文件:#include <signal.h>
2)一个保护临界区代码的错误实例:(sigprocmask()和pause()实现)
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void handler(int sig)
{
}
int main()
{
}
上面实例的问题是:本来期望pause()之后,来SIGINT信号,可以结束程序;可是,如果当“取消阻塞”和“pause”之间,正好来了SIGINT信号,结果程序因为pause的原因会一直挂起。。。
解决的方式,当然是sigsuspend()函数了。
3)使用sigsuspend()的程序
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void handler(int sig)
{
}
int main()
{
- sigsuspend
- sigsuspend
- sigsuspend
- sigsuspend()
- sigsuspend函数
- sigsuspend函数
- sigsuspend函数
- sigsuspend函数
- sigsuspend牛刀小试
- sigsuspend()
- sigsuspend() 用法
- sigsuspend详解
- sigsuspend用法
- sigsuspend() 用法
- sigsuspend 函数 释疑
- sigsuspend的理解
- sigprocmask和sigsuspend转
- sigprocmask和sigsuspend转
- JNI与多个线程导致JNIEnv*发生异常
- 微定手机定位软件,IOS版新鲜出炉!
- java基本文件的读写
- SSH框架搭建过程---之Struts整合Spring框架(4)
- asp.net Cookie的存储
- sigsuspend()
- POJ-2481
- python 正则表达式判断邮箱格式是否正确
- 【IPV6基础知识】IPV6地址分配机制
- 构建虚拟陀螺仪(Michael E Stanley)
- spark-shell on yarn 出错(arn application already ended,might be killed or not able to launch applic)解决
- 实现自己的http server
- Linux统计单个文件统计
- NYOJ 1058 部分和问题