siglongjmp和sigsetjmp 用法

1. 引入原因

由於在信號處理期間自動屏蔽了正在被處理的信號,而使用setjmp/longjmp跳出信號處理程序時又不會自動將

信號屏蔽碼修改會原來的屏蔽碼,從而引起該信號被永久屏蔽。

可以使用sigsetjmp/siglongjmp來解決這一問題。

2. 語法

#include<setjmp.h>
void siglongjmp(sigjmp_buf env,int val);
int sigsetjmp(sigjmp_buf env,int savemask);

POSIX標準沒有爲siglongjmp定義錯誤。sigsetjmp被直接激活是返回0,通過siglongjmp被激活是返回參數val的值。

3. 與setjmp和longjmp之間區別

這兩個函數與setjmp和longjmp之間的唯一區別是sigsetjmp增加了一個參數。如果savemask非0,則sigsetjmp在env中保存進程的當前信號屏蔽字調用siglongjmp時,如果帶 非0 savemask的sigsetjmp調用已經保存了env,則siglongjmp從其中恢復保存的信號屏蔽字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章