atexit(3) - wariua/manpages-ko GitHub Wiki
atexit - μ μμ νλ‘μΈμ€ μ’ λ£ λ νΈμΆλλ ν¨μ λ±λ‘νκΈ°
#include <stdlib.h>
int atexit(void (*function)(void));
atexit()
ν¨μλ exit(3)λ νλ‘κ·Έλ¨ main()
λ°νμ ν΅ν μ μμ νλ‘μΈμ€ μ’
λ£ λ νΈμΆνλλ‘ μ£Όμ΄μ§ ν¨μ function
μ λ±λ‘νλ€. κ·Έλ κ² λ±λ‘ν ν¨μλ€μ λ±λ‘ μμμ μμμΌλ‘ νΈμΆλλ€. μ΄λ€ μΈμλ μ λ¬λμ§ μλλ€.
κ°μ ν¨μλ₯Ό μ¬λ¬ λ² λ±λ‘ν μλ μλ€. κ° λ±λ‘λ§λ€ ν λ²μ© νΈμΆλλ€.
POSIX.1μμλ ꡬνμμ κ·Έλ° ν¨μλ€μ μ΅μ ATEXIT_MAX
(32)κ° λ±λ‘ν μ μμ΄μΌ νλ€κ³ μꡬνλ€. ꡬν체μμ μ§μνλ μ€μ μ νμΉλ₯Ό sysconf(3)λ₯Ό μ΄μ©ν΄ μ»μ μ μλ€.
fork(2)λ₯Ό ν΅ν΄ μμ νλ‘μΈμ€λ₯Ό μμ±νλ©΄ λΆλͺ¨μ λ±λ‘ λ΄μ© μ¬λ³Έμ λ¬Όλ €λ°λλ€. exec(3) ν¨μλ€ μ€ νλλ₯Ό μ±κ³΅ νΈμΆ μ λͺ¨λ λ±λ‘ λ΄μ©μ΄ μμ΄μ§λ€.
atexit()
ν¨μλ μ±κ³΅ μ 0 κ°μ λ°ννλ€. κ·Έ μΈμ κ²½μ° 0 μλ κ°μ λ°ννλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
atexit() |
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
μκ·Έλ μ λ¬λ‘ μΈν΄ νλ‘μΈμ€κ° λΉμ μ μ’
λ£νλ κ²½μ° 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)λ₯Ό) μ¬μ©ν΄ κ·Έ 곡μ λΌμ΄λΈλ¬λ¦¬κ° λ΄λ €κ° λ νΈμΆλ ν¨μλ₯Ό μ€μ ν μ μλ€.
#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);
}
_exit(2), dlopen(3), exit(3), on_exit(3)
2017-09-15