Chinaunix首页 | 论坛 | 博客
  • 博客访问: 626107
  • 博文数量: 144
  • 博客积分: 5037
  • 博客等级: 大校
  • 技术积分: 1581
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-30 21:49
文章存档

2010年(16)

2009年(128)

分类: LINUX

2010-01-12 17:43:03

setjmp和longjmp的函数原型在setjmp.h中。
函数原型:
int setjmp(jmp_buf envbuf);
setjmp函数用缓冲区envbuf保存系统堆栈的内容,以便后续的longjmp函数使用。setjmp函数初次启用时返回0值。
 
void longjmp(jmp_buf envbuf, int val);
longjmp函数中的参数envbuf是由setjmp函数所保存的堆栈环境,参数val设置setjmp函数的返回值。longjmp函数本身是没有返回值的,它执行后跳转到保存envbuf参数的setjmp函数调用,并由setjmp函数调用返回,此时setjmp函数的返回值就是val。
 
调用longjmp函数时不能使setjmp函数返回0,如果val为0,则setjmp函数返回1。longjmp函数从来不返回,因为它调用后就跳转到setjmp函数保存的堆栈处,恢复堆栈开始执行,所以longjmp函数不会返回。
 
setjmp和longjmp函数使用示例:
#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
int main()
{
    int b;
    b = 3;
 
    if (setjmp(buf) != 0)
    {
        printf("b=%d\n", b);
        return 0;
    }
    b = 5;
    longjmp(buf,);
 
    return 0;
}
setjmp执行时返回0,执行b等于5,调用longjmp,跳转到setjmp调用,setjmp返回1,打印b=5。


阅读(673) | 评论(0) | 转发(0) |
0

上一篇:pthread_detach

下一篇:文件属性的意义

给主人留下些什么吧!~~