最近要用到 sigsetjmp 和 siglongjmp 函数,按照我的理解每次调用 sigsetjmp 后就会保存堆栈,调用 siglongjmp 就会恢复堆栈。但是谢了一个程序后发现和我的预期不符:
https://gist.github.com/thekoc/f77a29da760f859bc4bc85f20f24de1b
我认为在 testjmp 这个函数里,在打印 "jmp from main, y=%d\n" 时,y 应该等于 5,因为恢复了堆栈,但是实际上却是 0。
实际的输出:
didn't jmp from testjmp
first run
didn't jmp from main, y=5
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
jmp from main, y=0
jump from testjmp
请求解惑,感谢。