setjmp()와 longjmp()는 C언어의 goto문과 유사하지만 다소 차이가 있습니다.
goto문 같은 경우는 실행중의 EIP(또는 Program Count)만 변경되지만, setjmp()/longjmp()의 특징은 아래와 같습니다.
int setjmp( jmp_buf env )
함수가 호출되는 순간 스택값들은 env에 저장됩니다.
setjmp()호출, longjmp할 곳을 지정합니다.
void longjmp( jmp_buf env, int val )
- longjmp를 호출하면 setjmp()를 한 곳으로 돌아갑니다.
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#include <signal.h>
void p1();
void intHandler();
jmp_buf env;
int main()
{
signal( SIGINT, intHandler );
if( setjmp( env ) != 0 ){
printf( "오류로 인해 복귀\n" );
exit( 0 );
}
else
printf( "처음 통과\n" );
p1();
}
void p1()
{
while( 1 ){
printf( "루프\n" );
sleep( 1 );
}
}
void intHandler()
{
printf( "인터럽트\n" );
longjmp( env, 1 );
}
'Computer Languages > C | C++' 카테고리의 다른 글
C/C++ 로 Heap Sort (isnert & remove) 구현하기 (0) | 2022.08.03 |
---|---|
Winpcap Developer 초기 설정 (0) | 2015.07.16 |
[인공지능] A* 알고리즘을 이용한 8-puzzle 만들기 (10) | 2015.04.04 |
string::getline (0) | 2010.11.19 |
string을 char로 취급하기 (0) | 2010.10.21 |