728x90
반응형
C 표준 API 프로그램 종료 및 반환값 (atexit, quick_exit)
C 언어에서 프로그램이 종료될 때 실행해야 할 정리 작업이 있다면, atexit
또는 quick_exit
을 사용할 수 있습니다.
이 글에서는 atexit
과 quick_exit
의 차이점을 살펴보고, 각각을 활용하는 방법을 예제 코드와 함께 설명하겠습니다.
1. atexit 함수
개요
atexit
함수는 프로그램이 exit
함수를 호출하여 정상적으로 종료될 때 실행할 콜백 함수를 등록하는 기능을 제공합니다.
이를 활용하면 프로그램 종료 전에 반드시 수행해야 하는 작업(예: 파일 닫기, 메모리 해제, 로그 기록 등)을 등록할 수 있습니다.
함수 원형
#include <stdlib.h>
int atexit(void (*func)(void));
func
: 프로그램 종료 시 실행할 함수의 포인터- 반환값 : 성공하면 0을, 실패하면 0이 아닌 값을 반환
사용 예제
#include <stdio.h>
#include <stdlib.h>
void cleanup(void) {
printf("프로그램이 종료됩니다. 정리 작업 수행 중...\n");
}
int main() {
if (atexit(cleanup) != 0) {
fprintf(stderr, "atexit 등록 실패\n");
return EXIT_FAILURE;
}
printf("메인 함수 실행 중...\n");
return 0; // 프로그램 종료 시 cleanup 실행
}
실행 결과
메인 함수 실행 중...
프로그램이 종료됩니다. 정리 작업 수행 중...
특징
atexit
으로 등록된 함수는 프로그램이 정상적으로 종료될 때 실행됨- 여러 개의 함수 등록 가능 (최대 개수는 구현에 따라 다름)
- 등록된 함수는 반대로 실행됨 (마지막에 등록된 함수가 먼저 실행됨)
여러 개의 atexit
함수 등록 예제
#include <stdio.h>
#include <stdlib.h>
void cleanup1(void) { printf("Cleanup 1 실행\n"); }
void cleanup2(void) { printf("Cleanup 2 실행\n"); }
int main() {
atexit(cleanup1);
atexit(cleanup2);
printf("메인 함수 실행 중...\n");
return 0;
}
실행 결과
메인 함수 실행 중...
Cleanup 2 실행
Cleanup 1 실행
2. quick_exit 함수
개요
quick_exit
함수는 exit
와 유사하지만, 일반적인 종료 과정 (atexit
실행 등)을 생략하고 빠르게 프로그램을 종료합니다.
이를 위해 at_quick_exit
을 사용하여 종료 시 실행할 함수를 등록할 수 있습니다.
함수 원형
#include <stdlib.h>
void quick_exit(int status);
int at_quick_exit(void (*func)(void));
quick_exit(int status)
: 빠른 종료 수행at_quick_exit(void (*func)(void))
:quick_exit
호출 시 실행할 함수를 등록at_quick_exit
반환값: 성공 시 0, 실패 시 0이 아닌 값 반환
사용 예제
#include <stdio.h>
#include <stdlib.h>
void quick_cleanup(void) {
printf("quick_exit 호출: 정리 작업 수행 중...\n");
}
int main() {
if (at_quick_exit(quick_cleanup) != 0) {
fprintf(stderr, "at_quick_exit 등록 실패\n");
return EXIT_FAILURE;
}
printf("메인 함수 실행 중...\n");
quick_exit(0);
// 아래 코드는 실행되지 않음
printf("이 메시지는 출력되지 않습니다.\n");
return 0;
}
실행 결과
메인 함수 실행 중...
quick_exit 호출: 정리 작업 수행 중...
특징
quick_exit
을 호출하면 등록된at_quick_exit
함수만 실행됨atexit
에 등록된 함수는 실행되지 않음- 프로그램이 비정상 종료될 때 (
abort
호출, 시스템 종료 등)quick_exit
함수는 실행되지 않음
3. atexit vs quick_exit 비교
기능 | atexit | quick_exit |
---|---|---|
함수 호출 시점 | exit 호출 시 실행됨 |
quick_exit 호출 시 실행됨 |
정리 작업 등록 함수 | atexit(func) |
at_quick_exit(func) |
여러 개 등록 가능 여부 | 가능 (역순 실행) | 가능 (역순 실행) |
exit(0) 에서 실행 여부 |
실행됨 | 실행되지 않음 |
quick_exit(0) 에서 실행 여부 |
실행되지 않음 | 실행됨 |
abort() 에서 실행 여부 |
실행되지 않음 | 실행되지 않음 |
4. 결론
atexit
과 quick_exit
은 프로그램 종료 시 필요한 정리 작업을 수행하는데 유용한 함수입니다.
atexit
: 일반적인 종료 처리 (exit
) 시 실행quick_exit
: 빠른 종료가 필요할 때 (quick_exit
) 실행at_quick_exit
:quick_exit
시 실행할 정리 작업을 등록
일반적인 경우 atexit
을 사용하여 종료 처리를 등록하면 충분하지만, 긴급한 종료가 필요할 경우 quick_exit
을 사용할 수 있습니다.
특히 quick_exit
은 atexit
의 콜백을 실행하지 않으므로, at_quick_exit
을 별도로 등록해야 한다는 점을 유의해야 합니다.
이제 atexit
과 quick_exit
을 활용하여 보다 안정적인 프로그램 종료 처리를 구현해 보세요!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C qsort와 bsearch를 활용한 정렬 및 검색 (0) | 2025.02.28 |
---|---|
C 언어에서 rand와 srand를 활용한 난수 생성 (0) | 2025.02.27 |
C 표준 API: 시스템 호출 및 종료 (system, exit, abort) (0) | 2025.02.25 |
C 언어에서 환경 변수 다루기 (getenv, putenv, setenv, unsetenv) (0) | 2025.02.24 |
C 언어 표준 API - time.h의 시간 변환 및 포맷팅 (strftime, gmtime, localtime) (0) | 2025.02.23 |