sigsetjmp,siglongjmp的使用
2009-01-05 10:50
483 查看
相关函数:longjmp, siglongjmp, setjmp
表头文件:#include <setjmp.h>
函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)
函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序好执行。
参数env为用来保存目前堆栈环境,一般声明为全局变量
参数savesigs若为非0则代表搁置的信号集合也会一块保存
当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。
返回值 :返回0代表局促存好目前的堆栈环境,随时可供siglongjmp()调用, 若返回非0值则代表由siglongjmp()返回
附加说明:setjmp()和sigsetjmp()会令程序不易令人理解,请尽量不要使用
//测试代码
#include <unistd.h>
#include <setjmp.h>
#include <stdlib.h>
#include <stdlib.h>
#include <signal.h>
static jmp_buf env_alrm;
void alarm_fun()
{
printf("time out/n");
siglongjmp(env_alrm,1);
}
int test_alrm()
{
int test_value = 0;
signal(SIGALRM,alarm_fun);
if ( sigsetjmp(env_alrm, 1) != 0 )
{
alarm( 0 );
signal( SIGALRM, SIG_IGN );
return -1; /* timeout */
}
alarm(5);//5 sec;
sleep(10);//改变这里看效果
alarm(0);
signal( SIGALRM, SIG_IGN );//忽略信号
return 1;
}
int main()
{
printf("%d",test_alrm());
return 0;
}
表头文件:#include <setjmp.h>
函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)
函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序好执行。
参数env为用来保存目前堆栈环境,一般声明为全局变量
参数savesigs若为非0则代表搁置的信号集合也会一块保存
当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。
返回值 :返回0代表局促存好目前的堆栈环境,随时可供siglongjmp()调用, 若返回非0值则代表由siglongjmp()返回
附加说明:setjmp()和sigsetjmp()会令程序不易令人理解,请尽量不要使用
//测试代码
#include <unistd.h>
#include <setjmp.h>
#include <stdlib.h>
#include <stdlib.h>
#include <signal.h>
static jmp_buf env_alrm;
void alarm_fun()
{
printf("time out/n");
siglongjmp(env_alrm,1);
}
int test_alrm()
{
int test_value = 0;
signal(SIGALRM,alarm_fun);
if ( sigsetjmp(env_alrm, 1) != 0 )
{
alarm( 0 );
signal( SIGALRM, SIG_IGN );
return -1; /* timeout */
}
alarm(5);//5 sec;
sleep(10);//改变这里看效果
alarm(0);
signal( SIGALRM, SIG_IGN );//忽略信号
return 1;
}
int main()
{
printf("%d",test_alrm());
return 0;
}
相关文章推荐
- sigsetjmp,siglongjmp的使用
- sigsetjmp,siglongjmp的使用
- csapp读书笔记-使用setjmp/sigsetjmp和longjmp/siglongjmp进行非本地跳转
- sigsetjmp siglongjmp使用时要注意内存泄露
- sigsetjmp,siglongjmp的使用
- 信号处理函数的返回sigsetjmp/siglongjmp
- sigsetjmp, siglongjmp
- alarm,sigsetjmp,siglongjmp
- siglongjmp 和 sigsetjmp 用法
- 关于sigsetjmp,siglongjmp注意点 (UDP超时重传应用)
- 《unix环境高级编程》信号——sigsetjmp 函数和 siglongjmp 函数
- alarm,sigsetjmp,siglongjmp 注意事项
- APUE学习笔记——10.15 sigsetjmp和siglongjmp
- sigsetjmp & siglongjmp
- APUE学习笔记——10.15 sigsetjmp和siglongjmp
- 用sigsetjmp和siglongjmp 解决从信号处理程序返回后信号仍被屏蔽问题
- 5.6.2 sigsetjmp/siglongjmp错误处理架构
- C语言中的跳转goto&&setjmp&&longjmp sigsetjmp siglongjmp
- C语言中的跳转goto&&setjmp&&longjmp sigsetjmp siglongjmp
- siglongjmp、sigsetjmp