summaryrefslogtreecommitdiffstats
path: root/man3/atexit.3
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--man3/atexit.3170
1 files changed, 170 insertions, 0 deletions
diff --git a/man3/atexit.3 b/man3/atexit.3
new file mode 100644
index 0000000..4a57ac5
--- /dev/null
+++ b/man3/atexit.3
@@ -0,0 +1,170 @@
+'\" t
+.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.\" References consulted:
+.\" Linux libc source code
+.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
+.\" 386BSD man pages
+.\" Modified 1993-03-29, David Metcalfe
+.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
+.\" Modified 2003-10-25, Walter Harms
+.\"
+.TH atexit 3 2023-07-20 "Linux man-pages 6.05.01"
+.SH NAME
+atexit \- register a function to be called at normal process termination
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <stdlib.h>
+.PP
+.BI "int atexit(void (*" function )(void));
+.fi
+.SH DESCRIPTION
+The
+.BR atexit ()
+function registers the given
+.I function
+to be
+called at normal process termination, either via
+.BR exit (3)
+or via return from the program's
+.IR main ().
+Functions so registered are called in
+the reverse order of their registration; no arguments are passed.
+.PP
+The same function may be registered multiple times:
+it is called once for each registration.
+.PP
+POSIX.1 requires that an implementation allow at least
+.\" POSIX.1-2001, POSIX.1-2008
+.B ATEXIT_MAX
+(32) such functions to be registered.
+The actual limit supported by an implementation can be obtained using
+.BR sysconf (3).
+.PP
+When a child process is created via
+.BR fork (2),
+it inherits copies of its parent's registrations.
+Upon a successful call to one of the
+.BR exec (3)
+functions,
+all registrations are removed.
+.SH RETURN VALUE
+The
+.BR atexit ()
+function returns the value 0 if successful; otherwise
+it returns a nonzero value.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbx lb lb
+l l l.
+Interface Attribute Value
+T{
+.na
+.nh
+.BR atexit ()
+T} Thread safety MT-Safe
+.TE
+.sp 1
+.SH VERSIONS
+POSIX.1 says that the result of calling
+.\" POSIX.1-2001, POSIX.1-2008
+.BR exit (3)
+more than once (i.e., calling
+.BR exit (3)
+within a function registered using
+.BR atexit ())
+is undefined.
+On some systems (but not Linux), this can result in an infinite recursion;
+.\" This can happen on OpenBSD 4.2 for example, and is documented
+.\" as occurring on FreeBSD as well.
+.\" glibc does "the Right Thing" -- invocation of the remaining
+.\" exit handlers carries on as normal.
+portable programs should not invoke
+.BR exit (3)
+inside a function registered using
+.BR atexit ().
+.SH STANDARDS
+C11, POSIX.1-2008.
+.SH HISTORY
+POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
+.SH NOTES
+Functions registered using
+.BR atexit ()
+(and
+.BR on_exit (3))
+are not called if a process terminates abnormally because
+of the delivery of a signal.
+.PP
+If one of the registered functions calls
+.BR _exit (2),
+then any remaining functions are not invoked,
+and the other process termination steps performed by
+.BR exit (3)
+are not performed.
+.PP
+The
+.BR atexit ()
+and
+.BR on_exit (3)
+functions register functions on the same list:
+at normal process termination,
+the registered functions are invoked in reverse order
+of their registration by these two functions.
+.PP
+According to POSIX.1, the result is undefined if
+.BR longjmp (3)
+is used to terminate execution of one of the functions registered using
+.BR atexit ().
+.\" In glibc, things seem to be handled okay
+.SS Linux notes
+Since glibc 2.2.3,
+.BR atexit ()
+(and
+.BR on_exit (3))
+can be used within a shared library to establish functions
+that are called when the shared library is unloaded.
+.SH EXAMPLES
+.\" SRC BEGIN (atexit.c)
+.EX
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+\&
+void
+bye(void)
+{
+ printf("That was all, folks\en");
+}
+\&
+int
+main(void)
+{
+ long a;
+ int i;
+\&
+ a = sysconf(_SC_ATEXIT_MAX);
+ printf("ATEXIT_MAX = %ld\en", a);
+\&
+ i = atexit(bye);
+ if (i != 0) {
+ fprintf(stderr, "cannot set exit function\en");
+ exit(EXIT_FAILURE);
+ }
+\&
+ exit(EXIT_SUCCESS);
+}
+.EE
+.\" SRC END
+.SH SEE ALSO
+.BR _exit (2),
+.BR dlopen (3),
+.BR exit (3),
+.BR on_exit (3)