메뉴 건너뛰기

NEOS 예제 코드

다음은 sigsetjmp() / siglongjmp() 함수를 활용한 예제입니다.

 

signal이 발생하여 헨들러가 발생하면 헨들러 내부에서 실행된 siglongjmp()에 의해 미리 설정된 위치 siglongjmp()로  이동을 보여주는 예제입니다.

-->> 실행 결과 : count = 2

 

#include <neos.h>

#include <unistd.h>
#include <math.h>
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>


sigjmp_buf jbuf;
static void problem(int sig);


void zeroDivide(void) 
{
    int result;
    int count = 0;

    struct sigaction act;

    act.sa_handler = problem;
    act.sa_flags    = 0;

    sigaction(SIGFPE, &act, NULL);

    result = sigsetjmp(jbuf, 1);
    
    count++;
    
    if(result == 0)
    {
       raise(SIGFPE);
    }

    printf("count=%d\n", count);

}

static void problem(int sig)
{
    siglongjmp(jbuf, 1);
}
위로