atexit(3) - wariua/manpages-ko GitHub Wiki

NAME

atexit - 정상적 ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜ λ“±λ‘ν•˜κΈ°

SYNOPSIS

#include <stdlib.h>

int atexit(void (*function)(void));

DESCRIPTION

atexit() ν•¨μˆ˜λŠ” exit(3)λ‚˜ ν”„λ‘œκ·Έλž¨ main() λ°˜ν™˜μ„ ν†΅ν•œ 정상적 ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ λ•Œ ν˜ΈμΆœν•˜λ„λ‘ μ£Όμ–΄μ§„ ν•¨μˆ˜ function을 λ“±λ‘ν•œλ‹€. κ·Έλ ‡κ²Œ λ“±λ‘ν•œ ν•¨μˆ˜λ“€μ€ 등둝 μˆœμ„œμ˜ μ—­μˆœμœΌλ‘œ ν˜ΈμΆœλœλ‹€. μ–΄λ–€ μΈμžλ„ μ „λ‹¬λ˜μ§€ μ•ŠλŠ”λ‹€.

같은 ν•¨μˆ˜λ₯Ό μ—¬λŸ¬ 번 등둝할 μˆ˜λ„ μžˆλ‹€. 각 λ“±λ‘λ§ˆλ‹€ ν•œ λ²ˆμ”© ν˜ΈμΆœλœλ‹€.

POSIX.1μ—μ„œλŠ” κ΅¬ν˜„μ—μ„œ 그런 ν•¨μˆ˜λ“€μ„ μ΅œμ†Œ ATEXIT_MAX(32)개 등둝할 수 μžˆμ–΄μ•Ό ν•œλ‹€κ³  μš”κ΅¬ν•œλ‹€. κ΅¬ν˜„μ²΄μ—μ„œ μ§€μ›ν•˜λŠ” μ‹€μ œ μ œν•œμΉ˜λ₯Ό sysconf(3)λ₯Ό μ΄μš©ν•΄ 얻을 수 μžˆλ‹€.

fork(2)λ₯Ό 톡해 μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜λ©΄ λΆ€λͺ¨μ˜ 등둝 λ‚΄μš© 사본을 λ¬Όλ €λ°›λŠ”λ‹€. exec(3) ν•¨μˆ˜λ“€ 쀑 ν•˜λ‚˜λ₯Ό 성곡 호좜 μ‹œ λͺ¨λ“  등둝 λ‚΄μš©μ΄ μ—†μ–΄μ§„λ‹€.

RETURN VALUE

atexit() ν•¨μˆ˜λŠ” 성곡 μ‹œ 0 값을 λ°˜ν™˜ν•œλ‹€. κ·Έ μ™Έμ˜ 경우 0 μ•„λ‹Œ 값을 λ°˜ν™˜ν•œλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
atexit() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

NOTES

μ‹œκ·Έλ„ μ „λ‹¬λ‘œ 인해 ν”„λ‘œμ„ΈμŠ€κ°€ 비정상 μ’…λ£Œν•˜λŠ” 경우 atexit()둜 (그리고 on_exit(3)둜) λ“±λ‘ν•œ ν•¨μˆ˜λ“€μ„ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.

λ“±λ‘ν•œ ν•¨μˆ˜μ—μ„œ _exit(2)λ₯Ό ν˜ΈμΆœν•˜λŠ” 경우 남은 ν•¨μˆ˜λ“€μ„ ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©° exit(3)κ°€ μˆ˜ν–‰ν•˜λŠ” λ‚˜λ¨Έμ§€ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ 단계듀을 μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.

POSIX.1μ—μ„œλŠ” exit(3) 쀑볡 호좜의 (즉 atexit()둜 λ“±λ‘ν•œ ν•¨μˆ˜ μ•ˆμ—μ„œ exit(3)λ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒμ˜) κ²°κ³Όκ°€ κ·œμ •λ˜μ–΄ μžˆμ§€ μ•Šλ‹€κ³  ν•œλ‹€. μ–΄λ–€ μ‹œμŠ€ν…œμ—μ„œλŠ” (λ¦¬λˆ…μŠ€μ—μ„œλŠ” μ•„λ‹˜) 이 λ•Œλ¬Έμ— λ¬΄ν•œ μž¬κ·€κ°€ λ°œμƒν•  수 μžˆλ‹€. 이식 κ°€λŠ₯ν•œ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” atexit()둜 λ“±λ‘ν•œ ν•¨μˆ˜ μ•ˆμ—μ„œ exit(3)λ₯Ό λΆ€λ₯΄μ§€ 말아야 ν•œλ‹€.

atexit() ν•¨μˆ˜μ™€ on_exit(3) ν•¨μˆ˜λŠ” 같은 λͺ©λ‘μ— ν•¨μˆ˜λ₯Ό λ“±λ‘ν•œλ‹€. 정상적 ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ μ‹œ 이 두 ν•¨μˆ˜λ‘œ λ“±λ‘ν•œ μ—­μˆœμœΌλ‘œ 등둝 ν•¨μˆ˜λ“€μ„ ν˜ΈμΆœν•œλ‹€.

POSIX.1에 λ”°λ₯΄λ©΄ atexit()둜 λ“±λ‘ν•œ ν•¨μˆ˜μ˜ 싀행을 longjmp(3)둜 μ’…λ£Œν•œ 경우 κ·Έ κ²°κ³Όκ°€ κ·œμ •λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

λ¦¬λˆ…μŠ€ μ°Έκ³  사항

glibc 2.2.3λΆ€ν„° 곡유 라이브러리 λ‚΄μ—μ„œ atexit()λ₯Ό (그리고 on_exit(3)λ₯Ό) μ‚¬μš©ν•΄ κ·Έ 곡유 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λ‚΄λ €κ°ˆ λ•Œ 호좜될 ν•¨μˆ˜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

EXAMPLE

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void
bye(void)
{
    printf("That was all, folks\n");
}

int
main(void)
{
    long a;
    int i;

    a = sysconf(_SC_ATEXIT_MAX);
    printf("ATEXIT_MAX = %ld\n", a);

    i = atexit(bye);
    if (i != 0) {
        fprintf(stderr, "cannot set exit function\n");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}

SEE ALSO

_exit(2), dlopen(3), exit(3), on_exit(3)


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️