`at_quick_exit` 함수
at_quick_exit 함수 (at_quick_exit)
빠르게 종료하는 quick_exit가 불릴 때 마지막으로 실행할 함수를 미리 등록해 두는 함수가 at_quick_exit이에요. 겉보기엔 atexit과 비슷해 보이지만, 정상 종료(exit)와 빠른 종료(quick_exit)는 정리 수준이 달라서 등록하는 함수의 종류도 따로 관리돼요.
출처: cppreference
본문
함수 원형
<stdlib.h>에 정의돼 있어요.
int at_quick_exit( void (*func)(void) ); // (since C11)
설명 (Explanation)
func가 가리키는 함수를 빠른 종료인 quick_exit 호출 시 불리도록 등록해요.
여러 스레드에서 이 함수를 호출해도 데이터 경쟁(data race)이 생기지 않아요. 표준은 구현이 최소 32개 함수를 등록할 수 있도록 보장하며, 정확한 한도는 구현 정의예요.
주의할 점이 있어요. 등록된 함수는 정상 종료 시에는 호출되지 않아요. 그 경우까지 처리하고 싶다면 반드시 atexit을 써야 해요.
매개변수 (Parameters)
func— 빠른 프로그램 종료 시 호출될 함수를 가리키는 포인터
반환값 (Return value)
등록에 성공하면 0, 실패하면 0이 아닌 값을 돌려줘요.
예제 (Example)
f1, f2를 등록하고 quick_exit(0)을 호출해요. 역순으로 호출되므로 출력이 pushed second, pushed first 순서로 나와요.
#include <stdlib.h>
#include <stdio.h>
void f1(void)
{
puts("pushed first");
fflush(stdout);
}
void f2(void)
{
puts("pushed second");
}
int main(void)
{
at_quick_exit(f1);
at_quick_exit(f2);
quick_exit(0);
}
출력:
pushed second
pushed first
같이 보기 (See also)
abort— 정리 없이 비정상 종료exit— 정리하면서 정상 종료atexit—exit()호출 시 불릴 함수 등록quick_exit(C11) — 완전히 정리하지 않고 정상 종료