]> pd.if.org Git - pdclib/blob - man3/exit.3
dos2unix
[pdclib] / man3 / exit.3
1 .\" This file is part of the Public Domain C Library (PDCLib).
2 .\" Permission is granted to use, modify, and / or redistribute at will.
3 .\"
4 .Dd
5 .Dt exit 3
6 .Os
7 .\"
8 .Sh NAME
9 .Nm exit
10 .Nd terminates the process
11 .\"
12 .Sh SYNOPSIS
13 .In stdlib.h
14 .Fn "noreturn void exit" "int status"
15 .Fn "noreturn void quick_exit" "int status"
16 .Fn "noreturn void _Exit" "int exitcode"
17 .\"
18 .Sh DESCRIPTION
19 Calling any of these three functions terminates the current process, returning 
20 the exit code passed as a parameter. The interpretation of the exit code is 
21 undefined, except that 0 or
22 .Dv EXIT_SUCCESS
23 shall indicate successful completion and
24 .Dv EXIT_FAILURE
25 shall indicate a non-successful completion.
26 .\"
27 .Pp
28 .Fn exit
29 first destroys all objects with C++ thread local storage duration (the C 
30 standard leaves whether or not thread local objects are destroyed or not 
31 undefined). Next, the destructors of all C++ objects of static storage duration 
32 are invoked along with all functions passed to
33 .Fn atexit 
34 in reverse order of registration (the time of registration for C++ objects of 
35 static storage duration is taken to be the time at which the constructor 
36 completes). It then flushes all open
37 .Vt FILE
38 streams with unwritten data and closes them. Finally, files created by
39 .Fn tmpfile
40 are removed, before handing control back to the host environment. Note in 
41 particular that functions registered with
42 .Fn at_quick_exit
43 are
44 .Sy not
45 called.
46 .\"
47 .Pp
48 .Fn quick_exit
49 invokes any functions registered with
50 .Fn at_quick_exit
51 in reverse order of registration, then returns control to the host 
52 environment by calling
53 .Fn _Exit .
54 No signal handlers are called, nor are any functions registered with
55 .Fn atexit .
56 .\"
57 .Pp
58 .Fn _Exit
59 returns control to the controlling environment without invoking any functions
60 registered by
61 .Fn atexit ,
62 .Fn at_quick_exit ,
63 any signal handlers, or the destructors of any thread local objects or C++ 
64 objects of static storage duration. Whether or not any open 
65 .Vt FILE
66 streams with unwritten data are flushed or not is undefined.
67 .\"
68 .Pp
69 The result of aborting a call to 
70 .Fn exit
71 or
72 .Fn quick_exit
73 by use of 
74 .Fn longjmp
75 is undefined. If any function or destructor invoked by
76 .Fn exit
77 or
78 .Fn quick_exit
79 should throw, 
80 .Fn std::terminate
81 is invoked.
82 .\"
83 .Pp
84 Undefined behaviour results if, while a call to
85 .Fn exit
86 or
87 .Fn quick_exit
88 is in progress, a call to 
89 .Fn exit
90 or
91 .Fn quick_exit
92 is made. 
93 .\"
94 .Sh IMPLEMENTATION NOTES
95 PDCLib implements the process of flushing streams in
96 .Fn _Exit ,
97 and therefore
98 .Fn exit
99 calls it after all
100 .Fn atexit
101 handlers have been invoked.
102 .\"
103 .Sh SEE ALSO
104 .Xr abort 3
105 .Xr atexit 3
106 .Xr at_quick_exit 3
107 .\"
108 .Sh STANDARDS
109 .Fn exit
110 is first defined in
111 .St -isoC-90 ;
112 .Fn _Exit
113 was introduced in
114 .St -isoC-99 .
115 .Fn quick_exit
116 was introduced in
117 .St -isoC-11 
118 and
119 ISO/IEC 14882:2011 "C++ 2011" .