`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 — 정리하면서 정상 종료
  • atexitexit() 호출 시 불릴 함수 등록
  • quick_exit(C11) — 완전히 정리하지 않고 정상 종료