標(biāo)題: 關(guān)于setjmp和longjmp函數(shù)結(jié)果 [打印本頁(yè)] 作者: bin_linux96 時(shí)間: 2011-09-16 15:39 標(biāo)題: 關(guān)于setjmp和longjmp函數(shù)結(jié)果 給位幫忙看下,為什么輸出結(jié)果是這樣,按道理來(lái)說(shuō)應(yīng)該不會(huì)掛掉啊:
hello world
the value = 1
Dbg->the is signal_handler function
hello world
the value = 1
Segmentation fault
我在redhat 9 linux 2.4.20-8上運(yùn)行這個(gè)程序沒(méi)有問(wèn)題啊。
《APUE》說(shuō)調(diào)用longjmp有一個(gè)問(wèn)題,當(dāng)捕捉到一個(gè)信號(hào)時(shí),進(jìn)入信號(hào)捕捉函數(shù),此時(shí)當(dāng)前信號(hào)被自動(dòng)的加到進(jìn)程的信號(hào)屏蔽字中。這阻止了后來(lái)產(chǎn)生的這種信號(hào)中斷該信號(hào)處理程序。在FreeBSD 5.2.1和Mac OS X 10.3中,setjmp和longjmp保存和恢復(fù)信號(hào)屏蔽字。但是,Linux 2.4.22和Solaris 9并不執(zhí)行這種操作。
不知是不是上邊這個(gè)原因。
但是我在redhat 9 linux 2.4.20-8系統(tǒng)上,在信號(hào)處理程序中使用setjmp,longjmp沒(méi)有出現(xiàn)什么錯(cuò)誤,跟使用sigsetjmp,longjmp一樣。