abort
헤더 파일
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - stdlib.h
void abort(void); SIGABRT 시그널을 발생하는 함수
입력 매개 변수 리스트
없음
반환 값
없음
abrot 함수는 SIGABRT 시그널을 발생하는 함수로 raise(SIGABRT)와 같은 역할을 수행합니다.
SIGABRT는 프로세스가 비정상적인 상태에 도달했을 때 강제로 프로세스를 종료하기 위한 시그널입니다.
만약 프로그램에 SIGABRT 시그널 핸들러를 등록하면 다른 방식으로 처리할 수 있습니다.
참고로 Microsoft Visual C에서는 abort 함수를 호출하면 SIGABRT 시그널을 발생하는 것 외에도 오류 창을 띄웁니다.
만약 abort 함수를 호출할 때 SIGABRT 시그널만 발생하고 오류 창을 뜨지 않게 하려면 _set_abort_behavior( 0, _WRITE_ABORT_MSG);를 호출합니다.
다음의 예제 코드에서는 _set_abort_behavior( 0, _WRITE_ABORT_MSG);를 호출하여 abort 함수 호출 시 오류 창이 뜨는 것을 방지하였습니다.
그리고 초기에 SIGABRT 시그널 핸들러를 등록한 후 abort 함수를 두 번 호출합니다.
그리고 SIGABRT 시그널 핸들러에서는 발생한 시그널이 SIGABRT일 때 디폴트 시그널 핸들러로 설정합니다.
따라서 실제 실행하면 첫번째 SIGABRT 시그널이 발생하면 등록한 시그널 핸들러가 동작하지만 두번째 SIGABRT 시그널이 발생하면 디폴트 행위가 동작합니다.
SIGABRT 시그널의 디폴트 행위는 프로세스 강제 종료입니다.
사용 예
//C언어 표준 라이브러리 함수 사용법 가이드
//void abort(void); SIGABRT 시그널을 발생하는 함수
//SIGABRT 시그널 핸들러를 등록하고 프로그램 방식으로 SIGARBT 시그널 발생
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void MySigHandler(int signo);
void Test();
int main(void)
{
_set_abort_behavior( 0, _WRITE_ABORT_MSG);//abort 함수 호출하였을 때 오류 창 뜨지 않게 설정
signal(SIGABRT,MySigHandler);//SIGABRT 시그널 핸들러 등록
Test();//테스트
return 0;
}
void MySigHandler(int signo)
{
printf("%d signal 발생\n",signo);
if(signo == SIGABRT)//발생한 시그널이 SIGABRT일 때
{
signal(SIGABRT,SIG_DFL);//SIGABRT 시그널 핸들러를 디폴트로 설정
}
}
void Test()
{
printf("Test 1\n");//테스트 용
abort();//SIGABRT 발생 raise(SIGABRT); 와 같음
printf("Test 2\n");//테스트 용
abort();//SIGABRT 발생 raise(SIGABRT); 와 같음
printf("Test 2\n");//테스트 용
}
출력
Test 1
22 signal 발생
사용한 함수
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
bsearch 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
---|---|
system 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
getenv 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
exit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
atexit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
realloc 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
malloc 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
free 함수 [C언어 표준 라이브러리 함수 사용법 가이드] (0) | 2016.01.03 |
calloc 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
srand 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |