lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame^] | 1 | @node Program Basics, Processes, Signal Handling, Top |
| 2 | @c %MENU% Writing the beginning and end of your program |
| 3 | @chapter The Basic Program/System Interface |
| 4 | |
| 5 | @cindex process |
| 6 | @cindex program |
| 7 | @cindex address space |
| 8 | @cindex thread of control |
| 9 | @dfn{Processes} are the primitive units for allocation of system |
| 10 | resources. Each process has its own address space and (usually) one |
| 11 | thread of control. A process executes a program; you can have multiple |
| 12 | processes executing the same program, but each process has its own copy |
| 13 | of the program within its own address space and executes it |
| 14 | independently of the other copies. Though it may have multiple threads |
| 15 | of control within the same program and a program may be composed of |
| 16 | multiple logically separate modules, a process always executes exactly |
| 17 | one program. |
| 18 | |
| 19 | Note that we are using a specific definition of ``program'' for the |
| 20 | purposes of this manual, which corresponds to a common definition in the |
| 21 | context of Unix system. In popular usage, ``program'' enjoys a much |
| 22 | broader definition; it can refer for example to a system's kernel, an |
| 23 | editor macro, a complex package of software, or a discrete section of |
| 24 | code executing within a process. |
| 25 | |
| 26 | Writing the program is what this manual is all about. This chapter |
| 27 | explains the most basic interface between your program and the system |
| 28 | that runs, or calls, it. This includes passing of parameters (arguments |
| 29 | and environment) from the system, requesting basic services from the |
| 30 | system, and telling the system the program is done. |
| 31 | |
| 32 | A program starts another program with the @code{exec} family of system calls. |
| 33 | This chapter looks at program startup from the execee's point of view. To |
| 34 | see the event from the execor's point of view, see @ref{Executing a File}. |
| 35 | |
| 36 | @menu |
| 37 | * Program Arguments:: Parsing your program's command-line arguments |
| 38 | * Environment Variables:: Less direct parameters affecting your program |
| 39 | * Auxiliary Vector:: Least direct parameters affecting your program |
| 40 | * System Calls:: Requesting service from the system |
| 41 | * Program Termination:: Telling the system you're done; return status |
| 42 | @end menu |
| 43 | |
| 44 | @node Program Arguments, Environment Variables, , Program Basics |
| 45 | @section Program Arguments |
| 46 | @cindex program arguments |
| 47 | @cindex command line arguments |
| 48 | @cindex arguments, to program |
| 49 | |
| 50 | @cindex program startup |
| 51 | @cindex startup of program |
| 52 | @cindex invocation of program |
| 53 | @cindex @code{main} function |
| 54 | @findex main |
| 55 | The system starts a C program by calling the function @code{main}. It |
| 56 | is up to you to write a function named @code{main}---otherwise, you |
| 57 | won't even be able to link your program without errors. |
| 58 | |
| 59 | In @w{ISO C} you can define @code{main} either to take no arguments, or to |
| 60 | take two arguments that represent the command line arguments to the |
| 61 | program, like this: |
| 62 | |
| 63 | @smallexample |
| 64 | int main (int @var{argc}, char *@var{argv}[]) |
| 65 | @end smallexample |
| 66 | |
| 67 | @cindex argc (program argument count) |
| 68 | @cindex argv (program argument vector) |
| 69 | The command line arguments are the whitespace-separated tokens given in |
| 70 | the shell command used to invoke the program; thus, in @samp{cat foo |
| 71 | bar}, the arguments are @samp{foo} and @samp{bar}. The only way a |
| 72 | program can look at its command line arguments is via the arguments of |
| 73 | @code{main}. If @code{main} doesn't take arguments, then you cannot get |
| 74 | at the command line. |
| 75 | |
| 76 | The value of the @var{argc} argument is the number of command line |
| 77 | arguments. The @var{argv} argument is a vector of C strings; its |
| 78 | elements are the individual command line argument strings. The file |
| 79 | name of the program being run is also included in the vector as the |
| 80 | first element; the value of @var{argc} counts this element. A null |
| 81 | pointer always follows the last element: @code{@var{argv}[@var{argc}]} |
| 82 | is this null pointer. |
| 83 | |
| 84 | For the command @samp{cat foo bar}, @var{argc} is 3 and @var{argv} has |
| 85 | three elements, @code{"cat"}, @code{"foo"} and @code{"bar"}. |
| 86 | |
| 87 | In Unix systems you can define @code{main} a third way, using three arguments: |
| 88 | |
| 89 | @smallexample |
| 90 | int main (int @var{argc}, char *@var{argv}[], char *@var{envp}[]) |
| 91 | @end smallexample |
| 92 | |
| 93 | The first two arguments are just the same. The third argument |
| 94 | @var{envp} gives the program's environment; it is the same as the value |
| 95 | of @code{environ}. @xref{Environment Variables}. POSIX.1 does not |
| 96 | allow this three-argument form, so to be portable it is best to write |
| 97 | @code{main} to take two arguments, and use the value of @code{environ}. |
| 98 | |
| 99 | @menu |
| 100 | * Argument Syntax:: By convention, options start with a hyphen. |
| 101 | * Parsing Program Arguments:: Ways to parse program options and arguments. |
| 102 | @end menu |
| 103 | |
| 104 | @node Argument Syntax, Parsing Program Arguments, , Program Arguments |
| 105 | @subsection Program Argument Syntax Conventions |
| 106 | @cindex program argument syntax |
| 107 | @cindex syntax, for program arguments |
| 108 | @cindex command argument syntax |
| 109 | |
| 110 | POSIX recommends these conventions for command line arguments. |
| 111 | @code{getopt} (@pxref{Getopt}) and @code{argp_parse} (@pxref{Argp}) make |
| 112 | it easy to implement them. |
| 113 | |
| 114 | @itemize @bullet |
| 115 | @item |
| 116 | Arguments are options if they begin with a hyphen delimiter (@samp{-}). |
| 117 | |
| 118 | @item |
| 119 | Multiple options may follow a hyphen delimiter in a single token if |
| 120 | the options do not take arguments. Thus, @samp{-abc} is equivalent to |
| 121 | @samp{-a -b -c}. |
| 122 | |
| 123 | @item |
| 124 | Option names are single alphanumeric characters (as for @code{isalnum}; |
| 125 | @pxref{Classification of Characters}). |
| 126 | |
| 127 | @item |
| 128 | Certain options require an argument. For example, the @samp{-o} command |
| 129 | of the @code{ld} command requires an argument---an output file name. |
| 130 | |
| 131 | @item |
| 132 | An option and its argument may or may not appear as separate tokens. (In |
| 133 | other words, the whitespace separating them is optional.) Thus, |
| 134 | @w{@samp{-o foo}} and @samp{-ofoo} are equivalent. |
| 135 | |
| 136 | @item |
| 137 | Options typically precede other non-option arguments. |
| 138 | |
| 139 | The implementations of @code{getopt} and @code{argp_parse} in @theglibc{} |
| 140 | normally make it appear as if all the option arguments were |
| 141 | specified before all the non-option arguments for the purposes of |
| 142 | parsing, even if the user of your program intermixed option and |
| 143 | non-option arguments. They do this by reordering the elements of the |
| 144 | @var{argv} array. This behavior is nonstandard; if you want to suppress |
| 145 | it, define the @code{_POSIX_OPTION_ORDER} environment variable. |
| 146 | @xref{Standard Environment}. |
| 147 | |
| 148 | @item |
| 149 | The argument @samp{--} terminates all options; any following arguments |
| 150 | are treated as non-option arguments, even if they begin with a hyphen. |
| 151 | |
| 152 | @item |
| 153 | A token consisting of a single hyphen character is interpreted as an |
| 154 | ordinary non-option argument. By convention, it is used to specify |
| 155 | input from or output to the standard input and output streams. |
| 156 | |
| 157 | @item |
| 158 | Options may be supplied in any order, or appear multiple times. The |
| 159 | interpretation is left up to the particular application program. |
| 160 | @end itemize |
| 161 | |
| 162 | @cindex long-named options |
| 163 | GNU adds @dfn{long options} to these conventions. Long options consist |
| 164 | of @samp{--} followed by a name made of alphanumeric characters and |
| 165 | dashes. Option names are typically one to three words long, with |
| 166 | hyphens to separate words. Users can abbreviate the option names as |
| 167 | long as the abbreviations are unique. |
| 168 | |
| 169 | To specify an argument for a long option, write |
| 170 | @samp{--@var{name}=@var{value}}. This syntax enables a long option to |
| 171 | accept an argument that is itself optional. |
| 172 | |
| 173 | Eventually, @gnusystems{} will provide completion for long option names |
| 174 | in the shell. |
| 175 | |
| 176 | @node Parsing Program Arguments, , Argument Syntax, Program Arguments |
| 177 | @subsection Parsing Program Arguments |
| 178 | |
| 179 | @cindex program arguments, parsing |
| 180 | @cindex command arguments, parsing |
| 181 | @cindex parsing program arguments |
| 182 | If the syntax for the command line arguments to your program is simple |
| 183 | enough, you can simply pick the arguments off from @var{argv} by hand. |
| 184 | But unless your program takes a fixed number of arguments, or all of the |
| 185 | arguments are interpreted in the same way (as file names, for example), |
| 186 | you are usually better off using @code{getopt} (@pxref{Getopt}) or |
| 187 | @code{argp_parse} (@pxref{Argp}) to do the parsing. |
| 188 | |
| 189 | @code{getopt} is more standard (the short-option only version of it is a |
| 190 | part of the POSIX standard), but using @code{argp_parse} is often |
| 191 | easier, both for very simple and very complex option structures, because |
| 192 | it does more of the dirty work for you. |
| 193 | |
| 194 | @menu |
| 195 | * Getopt:: Parsing program options using @code{getopt}. |
| 196 | * Argp:: Parsing program options using @code{argp_parse}. |
| 197 | * Suboptions:: Some programs need more detailed options. |
| 198 | * Suboptions Example:: This shows how it could be done for @code{mount}. |
| 199 | @end menu |
| 200 | |
| 201 | @c Getopt and argp start at the @section level so that there's |
| 202 | @c enough room for their internal hierarchy (mostly a problem with |
| 203 | @c argp). -Miles |
| 204 | |
| 205 | @include getopt.texi |
| 206 | @include argp.texi |
| 207 | |
| 208 | @node Suboptions, Suboptions Example, Argp, Parsing Program Arguments |
| 209 | @c This is a @section so that it's at the same level as getopt and argp |
| 210 | @subsubsection Parsing of Suboptions |
| 211 | |
| 212 | Having a single level of options is sometimes not enough. There might |
| 213 | be too many options which have to be available or a set of options is |
| 214 | closely related. |
| 215 | |
| 216 | For this case some programs use suboptions. One of the most prominent |
| 217 | programs is certainly @code{mount}(8). The @code{-o} option take one |
| 218 | argument which itself is a comma separated list of options. To ease the |
| 219 | programming of code like this the function @code{getsubopt} is |
| 220 | available. |
| 221 | |
| 222 | @comment stdlib.h |
| 223 | @deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep}) |
| 224 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| 225 | @c getsubopt ok |
| 226 | @c strchrnul dup ok |
| 227 | @c memchr dup ok |
| 228 | @c strncmp dup ok |
| 229 | |
| 230 | The @var{optionp} parameter must be a pointer to a variable containing |
| 231 | the address of the string to process. When the function returns the |
| 232 | reference is updated to point to the next suboption or to the |
| 233 | terminating @samp{\0} character if there is no more suboption available. |
| 234 | |
| 235 | The @var{tokens} parameter references an array of strings containing the |
| 236 | known suboptions. All strings must be @samp{\0} terminated and to mark |
| 237 | the end a null pointer must be stored. When @code{getsubopt} finds a |
| 238 | possible legal suboption it compares it with all strings available in |
| 239 | the @var{tokens} array and returns the index in the string as the |
| 240 | indicator. |
| 241 | |
| 242 | In case the suboption has an associated value introduced by a @samp{=} |
| 243 | character, a pointer to the value is returned in @var{valuep}. The |
| 244 | string is @samp{\0} terminated. If no argument is available |
| 245 | @var{valuep} is set to the null pointer. By doing this the caller can |
| 246 | check whether a necessary value is given or whether no unexpected value |
| 247 | is present. |
| 248 | |
| 249 | In case the next suboption in the string is not mentioned in the |
| 250 | @var{tokens} array the starting address of the suboption including a |
| 251 | possible value is returned in @var{valuep} and the return value of the |
| 252 | function is @samp{-1}. |
| 253 | @end deftypefun |
| 254 | |
| 255 | @node Suboptions Example, , Suboptions, Parsing Program Arguments |
| 256 | @subsection Parsing of Suboptions Example |
| 257 | |
| 258 | The code which might appear in the @code{mount}(8) program is a perfect |
| 259 | example of the use of @code{getsubopt}: |
| 260 | |
| 261 | @smallexample |
| 262 | @include subopt.c.texi |
| 263 | @end smallexample |
| 264 | |
| 265 | |
| 266 | @node Environment Variables, Auxiliary Vector, Program Arguments, Program Basics |
| 267 | @section Environment Variables |
| 268 | |
| 269 | @cindex environment variable |
| 270 | When a program is executed, it receives information about the context in |
| 271 | which it was invoked in two ways. The first mechanism uses the |
| 272 | @var{argv} and @var{argc} arguments to its @code{main} function, and is |
| 273 | discussed in @ref{Program Arguments}. The second mechanism uses |
| 274 | @dfn{environment variables} and is discussed in this section. |
| 275 | |
| 276 | The @var{argv} mechanism is typically used to pass command-line |
| 277 | arguments specific to the particular program being invoked. The |
| 278 | environment, on the other hand, keeps track of information that is |
| 279 | shared by many programs, changes infrequently, and that is less |
| 280 | frequently used. |
| 281 | |
| 282 | The environment variables discussed in this section are the same |
| 283 | environment variables that you set using assignments and the |
| 284 | @code{export} command in the shell. Programs executed from the shell |
| 285 | inherit all of the environment variables from the shell. |
| 286 | @c !!! xref to right part of bash manual when it exists |
| 287 | |
| 288 | @cindex environment |
| 289 | Standard environment variables are used for information about the user's |
| 290 | home directory, terminal type, current locale, and so on; you can define |
| 291 | additional variables for other purposes. The set of all environment |
| 292 | variables that have values is collectively known as the |
| 293 | @dfn{environment}. |
| 294 | |
| 295 | Names of environment variables are case-sensitive and must not contain |
| 296 | the character @samp{=}. System-defined environment variables are |
| 297 | invariably uppercase. |
| 298 | |
| 299 | The values of environment variables can be anything that can be |
| 300 | represented as a string. A value must not contain an embedded null |
| 301 | character, since this is assumed to terminate the string. |
| 302 | |
| 303 | |
| 304 | @menu |
| 305 | * Environment Access:: How to get and set the values of |
| 306 | environment variables. |
| 307 | * Standard Environment:: These environment variables have |
| 308 | standard interpretations. |
| 309 | @end menu |
| 310 | |
| 311 | @node Environment Access |
| 312 | @subsection Environment Access |
| 313 | @cindex environment access |
| 314 | @cindex environment representation |
| 315 | |
| 316 | The value of an environment variable can be accessed with the |
| 317 | @code{getenv} function. This is declared in the header file |
| 318 | @file{stdlib.h}. |
| 319 | @pindex stdlib.h |
| 320 | |
| 321 | Libraries should use @code{secure_getenv} instead of @code{getenv}, so |
| 322 | that they do not accidentally use untrusted environment variables. |
| 323 | Modifications of environment variables are not allowed in |
| 324 | multi-threaded programs. The @code{getenv} and @code{secure_getenv} |
| 325 | functions can be safely used in multi-threaded programs. |
| 326 | |
| 327 | @comment stdlib.h |
| 328 | @comment ISO |
| 329 | @deftypefun {char *} getenv (const char *@var{name}) |
| 330 | @safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}} |
| 331 | @c Unguarded access to __environ. |
| 332 | This function returns a string that is the value of the environment |
| 333 | variable @var{name}. You must not modify this string. In some non-Unix |
| 334 | systems not using @theglibc{}, it might be overwritten by subsequent |
| 335 | calls to @code{getenv} (but not by any other library function). If the |
| 336 | environment variable @var{name} is not defined, the value is a null |
| 337 | pointer. |
| 338 | @end deftypefun |
| 339 | |
| 340 | @comment stdlib.h |
| 341 | @comment GNU |
| 342 | @deftypefun {char *} secure_getenv (const char *@var{name}) |
| 343 | @safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}} |
| 344 | @c Calls getenv unless secure mode is enabled. |
| 345 | This function is similar to @code{getenv}, but it returns a null |
| 346 | pointer if the environment is untrusted. This happens when the |
| 347 | program file has SUID or SGID bits set. General-purpose libraries |
| 348 | should always prefer this function over @code{getenv} to avoid |
| 349 | vulnerabilities if the library is referenced from a SUID/SGID program. |
| 350 | |
| 351 | This function is a GNU extension. |
| 352 | @end deftypefun |
| 353 | |
| 354 | |
| 355 | @comment stdlib.h |
| 356 | @comment SVID |
| 357 | @deftypefun int putenv (char *@var{string}) |
| 358 | @safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
| 359 | @c putenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
| 360 | @c strchr dup ok |
| 361 | @c strndup dup @ascuheap @acsmem |
| 362 | @c add_to_environ dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
| 363 | @c free dup @ascuheap @acsmem |
| 364 | @c unsetenv dup @mtasuconst:@mtsenv @asulock @aculock |
| 365 | The @code{putenv} function adds or removes definitions from the environment. |
| 366 | If the @var{string} is of the form @samp{@var{name}=@var{value}}, the |
| 367 | definition is added to the environment. Otherwise, the @var{string} is |
| 368 | interpreted as the name of an environment variable, and any definition |
| 369 | for this variable in the environment is removed. |
| 370 | |
| 371 | If the function is successful it returns @code{0}. Otherwise the return |
| 372 | value is nonzero and @code{errno} is set to indicate the error. |
| 373 | |
| 374 | The difference to the @code{setenv} function is that the exact string |
| 375 | given as the parameter @var{string} is put into the environment. If the |
| 376 | user should change the string after the @code{putenv} call this will |
| 377 | reflect automatically in the environment. This also requires that |
| 378 | @var{string} not be an automatic variable whose scope is left before the |
| 379 | variable is removed from the environment. The same applies of course to |
| 380 | dynamically allocated variables which are freed later. |
| 381 | |
| 382 | This function is part of the extended Unix interface. You should define |
| 383 | @var{_XOPEN_SOURCE} before including any header. |
| 384 | @end deftypefun |
| 385 | |
| 386 | |
| 387 | @comment stdlib.h |
| 388 | @comment BSD |
| 389 | @deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace}) |
| 390 | @safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
| 391 | @c setenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
| 392 | @c add_to_environ @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
| 393 | @c strlen dup ok |
| 394 | @c libc_lock_lock @asulock @aculock |
| 395 | @c strncmp dup ok |
| 396 | @c realloc dup @ascuheap @acsmem |
| 397 | @c libc_lock_unlock @aculock |
| 398 | @c malloc dup @ascuheap @acsmem |
| 399 | @c free dup @ascuheap @acsmem |
| 400 | @c mempcpy dup ok |
| 401 | @c memcpy dup ok |
| 402 | @c KNOWN_VALUE ok |
| 403 | @c tfind(strcmp) [no @mtsrace guarded access] |
| 404 | @c strcmp dup ok |
| 405 | @c STORE_VALUE @ascuheap @acucorrupt @acsmem |
| 406 | @c tsearch(strcmp) @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt guarded access makes for mtsafe and @asulock] |
| 407 | @c strcmp dup ok |
| 408 | The @code{setenv} function can be used to add a new definition to the |
| 409 | environment. The entry with the name @var{name} is replaced by the |
| 410 | value @samp{@var{name}=@var{value}}. Please note that this is also true |
| 411 | if @var{value} is the empty string. To do this a new string is created |
| 412 | and the strings @var{name} and @var{value} are copied. A null pointer |
| 413 | for the @var{value} parameter is illegal. If the environment already |
| 414 | contains an entry with key @var{name} the @var{replace} parameter |
| 415 | controls the action. If replace is zero, nothing happens. Otherwise |
| 416 | the old entry is replaced by the new one. |
| 417 | |
| 418 | Please note that you cannot remove an entry completely using this function. |
| 419 | |
| 420 | If the function is successful it returns @code{0}. Otherwise the |
| 421 | environment is unchanged and the return value is @code{-1} and |
| 422 | @code{errno} is set. |
| 423 | |
| 424 | This function was originally part of the BSD library but is now part of |
| 425 | the Unix standard. |
| 426 | @end deftypefun |
| 427 | |
| 428 | @comment stdlib.h |
| 429 | @comment BSD |
| 430 | @deftypefun int unsetenv (const char *@var{name}) |
| 431 | @safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
| 432 | @c unsetenv @mtasuconst:@mtsenv @asulock @aculock |
| 433 | @c strchr dup ok |
| 434 | @c strlen dup ok |
| 435 | @c libc_lock_lock @asulock @aculock |
| 436 | @c strncmp dup ok |
| 437 | @c libc_lock_unlock @aculock |
| 438 | Using this function one can remove an entry completely from the |
| 439 | environment. If the environment contains an entry with the key |
| 440 | @var{name} this whole entry is removed. A call to this function is |
| 441 | equivalent to a call to @code{putenv} when the @var{value} part of the |
| 442 | string is empty. |
| 443 | |
| 444 | The function return @code{-1} if @var{name} is a null pointer, points to |
| 445 | an empty string, or points to a string containing a @code{=} character. |
| 446 | It returns @code{0} if the call succeeded. |
| 447 | |
| 448 | This function was originally part of the BSD library but is now part of |
| 449 | the Unix standard. The BSD version had no return value, though. |
| 450 | @end deftypefun |
| 451 | |
| 452 | There is one more function to modify the whole environment. This |
| 453 | function is said to be used in the POSIX.9 (POSIX bindings for Fortran |
| 454 | 77) and so one should expect it did made it into POSIX.1. But this |
| 455 | never happened. But we still provide this function as a GNU extension |
| 456 | to enable writing standard compliant Fortran environments. |
| 457 | |
| 458 | @comment stdlib.h |
| 459 | @comment GNU |
| 460 | @deftypefun int clearenv (void) |
| 461 | @safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
| 462 | @c clearenv @mtasuconst:@mtsenv @ascuheap @asulock @aculock @acsmem |
| 463 | @c libc_lock_lock @asulock @aculock |
| 464 | @c free dup @ascuheap @acsmem |
| 465 | @c libc_lock_unlock @aculock |
| 466 | The @code{clearenv} function removes all entries from the environment. |
| 467 | Using @code{putenv} and @code{setenv} new entries can be added again |
| 468 | later. |
| 469 | |
| 470 | If the function is successful it returns @code{0}. Otherwise the return |
| 471 | value is nonzero. |
| 472 | @end deftypefun |
| 473 | |
| 474 | |
| 475 | You can deal directly with the underlying representation of environment |
| 476 | objects to add more variables to the environment (for example, to |
| 477 | communicate with another program you are about to execute; |
| 478 | @pxref{Executing a File}). |
| 479 | |
| 480 | @comment unistd.h |
| 481 | @comment POSIX.1 |
| 482 | @deftypevar {char **} environ |
| 483 | The environment is represented as an array of strings. Each string is |
| 484 | of the format @samp{@var{name}=@var{value}}. The order in which |
| 485 | strings appear in the environment is not significant, but the same |
| 486 | @var{name} must not appear more than once. The last element of the |
| 487 | array is a null pointer. |
| 488 | |
| 489 | This variable is declared in the header file @file{unistd.h}. |
| 490 | |
| 491 | If you just want to get the value of an environment variable, use |
| 492 | @code{getenv}. |
| 493 | @end deftypevar |
| 494 | |
| 495 | Unix systems, and @gnusystems{}, pass the initial value of |
| 496 | @code{environ} as the third argument to @code{main}. |
| 497 | @xref{Program Arguments}. |
| 498 | |
| 499 | @node Standard Environment |
| 500 | @subsection Standard Environment Variables |
| 501 | @cindex standard environment variables |
| 502 | |
| 503 | These environment variables have standard meanings. This doesn't mean |
| 504 | that they are always present in the environment; but if these variables |
| 505 | @emph{are} present, they have these meanings. You shouldn't try to use |
| 506 | these environment variable names for some other purpose. |
| 507 | |
| 508 | @comment Extra blank lines make it look better. |
| 509 | @table @code |
| 510 | @item HOME |
| 511 | @cindex @code{HOME} environment variable |
| 512 | @cindex home directory |
| 513 | |
| 514 | This is a string representing the user's @dfn{home directory}, or |
| 515 | initial default working directory. |
| 516 | |
| 517 | The user can set @code{HOME} to any value. |
| 518 | If you need to make sure to obtain the proper home directory |
| 519 | for a particular user, you should not use @code{HOME}; instead, |
| 520 | look up the user's name in the user database (@pxref{User Database}). |
| 521 | |
| 522 | For most purposes, it is better to use @code{HOME}, precisely because |
| 523 | this lets the user specify the value. |
| 524 | |
| 525 | @c !!! also USER |
| 526 | @item LOGNAME |
| 527 | @cindex @code{LOGNAME} environment variable |
| 528 | |
| 529 | This is the name that the user used to log in. Since the value in the |
| 530 | environment can be tweaked arbitrarily, this is not a reliable way to |
| 531 | identify the user who is running a program; a function like |
| 532 | @code{getlogin} (@pxref{Who Logged In}) is better for that purpose. |
| 533 | |
| 534 | For most purposes, it is better to use @code{LOGNAME}, precisely because |
| 535 | this lets the user specify the value. |
| 536 | |
| 537 | @item PATH |
| 538 | @cindex @code{PATH} environment variable |
| 539 | |
| 540 | A @dfn{path} is a sequence of directory names which is used for |
| 541 | searching for a file. The variable @code{PATH} holds a path used |
| 542 | for searching for programs to be run. |
| 543 | |
| 544 | The @code{execlp} and @code{execvp} functions (@pxref{Executing a File}) |
| 545 | use this environment variable, as do many shells and other utilities |
| 546 | which are implemented in terms of those functions. |
| 547 | |
| 548 | The syntax of a path is a sequence of directory names separated by |
| 549 | colons. An empty string instead of a directory name stands for the |
| 550 | current directory (@pxref{Working Directory}). |
| 551 | |
| 552 | A typical value for this environment variable might be a string like: |
| 553 | |
| 554 | @smallexample |
| 555 | :/bin:/etc:/usr/bin:/usr/new/X11:/usr/new:/usr/local/bin |
| 556 | @end smallexample |
| 557 | |
| 558 | This means that if the user tries to execute a program named @code{foo}, |
| 559 | the system will look for files named @file{foo}, @file{/bin/foo}, |
| 560 | @file{/etc/foo}, and so on. The first of these files that exists is |
| 561 | the one that is executed. |
| 562 | |
| 563 | @c !!! also TERMCAP |
| 564 | @item TERM |
| 565 | @cindex @code{TERM} environment variable |
| 566 | |
| 567 | This specifies the kind of terminal that is receiving program output. |
| 568 | Some programs can make use of this information to take advantage of |
| 569 | special escape sequences or terminal modes supported by particular kinds |
| 570 | of terminals. Many programs which use the termcap library |
| 571 | (@pxref{Finding a Terminal Description,Find,,termcap,The Termcap Library |
| 572 | Manual}) use the @code{TERM} environment variable, for example. |
| 573 | |
| 574 | @item TZ |
| 575 | @cindex @code{TZ} environment variable |
| 576 | |
| 577 | This specifies the time zone. @xref{TZ Variable}, for information about |
| 578 | the format of this string and how it is used. |
| 579 | |
| 580 | @item LANG |
| 581 | @cindex @code{LANG} environment variable |
| 582 | |
| 583 | This specifies the default locale to use for attribute categories where |
| 584 | neither @code{LC_ALL} nor the specific environment variable for that |
| 585 | category is set. @xref{Locales}, for more information about |
| 586 | locales. |
| 587 | |
| 588 | @ignore |
| 589 | @c I doubt this really exists |
| 590 | @item LC_ALL |
| 591 | @cindex @code{LC_ALL} environment variable |
| 592 | |
| 593 | This is similar to the @code{LANG} environment variable. However, its |
| 594 | value takes precedence over any values provided for the individual |
| 595 | attribute category environment variables, or for the @code{LANG} |
| 596 | environment variable. |
| 597 | @end ignore |
| 598 | |
| 599 | @item LC_ALL |
| 600 | @cindex @code{LC_ALL} environment variable |
| 601 | |
| 602 | If this environment variable is set it overrides the selection for all |
| 603 | the locales done using the other @code{LC_*} environment variables. The |
| 604 | value of the other @code{LC_*} environment variables is simply ignored |
| 605 | in this case. |
| 606 | |
| 607 | @item LC_COLLATE |
| 608 | @cindex @code{LC_COLLATE} environment variable |
| 609 | |
| 610 | This specifies what locale to use for string sorting. |
| 611 | |
| 612 | @item LC_CTYPE |
| 613 | @cindex @code{LC_CTYPE} environment variable |
| 614 | |
| 615 | This specifies what locale to use for character sets and character |
| 616 | classification. |
| 617 | |
| 618 | @item LC_MESSAGES |
| 619 | @cindex @code{LC_MESSAGES} environment variable |
| 620 | |
| 621 | This specifies what locale to use for printing messages and to parse |
| 622 | responses. |
| 623 | |
| 624 | @item LC_MONETARY |
| 625 | @cindex @code{LC_MONETARY} environment variable |
| 626 | |
| 627 | This specifies what locale to use for formatting monetary values. |
| 628 | |
| 629 | @item LC_NUMERIC |
| 630 | @cindex @code{LC_NUMERIC} environment variable |
| 631 | |
| 632 | This specifies what locale to use for formatting numbers. |
| 633 | |
| 634 | @item LC_TIME |
| 635 | @cindex @code{LC_TIME} environment variable |
| 636 | |
| 637 | This specifies what locale to use for formatting date/time values. |
| 638 | |
| 639 | @item NLSPATH |
| 640 | @cindex @code{NLSPATH} environment variable |
| 641 | |
| 642 | This specifies the directories in which the @code{catopen} function |
| 643 | looks for message translation catalogs. |
| 644 | |
| 645 | @item _POSIX_OPTION_ORDER |
| 646 | @cindex @code{_POSIX_OPTION_ORDER} environment variable. |
| 647 | |
| 648 | If this environment variable is defined, it suppresses the usual |
| 649 | reordering of command line arguments by @code{getopt} and |
| 650 | @code{argp_parse}. @xref{Argument Syntax}. |
| 651 | |
| 652 | @c !!! GNU also has COREFILE, CORESERVER, EXECSERVERS |
| 653 | @end table |
| 654 | |
| 655 | @node Auxiliary Vector |
| 656 | @section Auxiliary Vector |
| 657 | @cindex auxiliary vector |
| 658 | |
| 659 | When a program is executed, it receives information from the operating |
| 660 | system about the environment in which it is operating. The form of this |
| 661 | information is a table of key-value pairs, where the keys are from the |
| 662 | set of @samp{AT_} values in @file{elf.h}. Some of the data is provided |
| 663 | by the kernel for libc consumption, and may be obtained by ordinary |
| 664 | interfaces, such as @code{sysconf}. However, on a platform-by-platform |
| 665 | basis there may be information that is not available any other way. |
| 666 | |
| 667 | @subsection Definition of @code{getauxval} |
| 668 | @comment sys/auxv.h |
| 669 | @deftypefun {unsigned long int} getauxval (unsigned long int @var{type}) |
| 670 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| 671 | @c Reads from hwcap or iterates over constant auxv. |
| 672 | This function is used to inquire about the entries in the auxiliary |
| 673 | vector. The @var{type} argument should be one of the @samp{AT_} symbols |
| 674 | defined in @file{elf.h}. If a matching entry is found, the value is |
| 675 | returned; if the entry is not found, zero is returned and @code{errno} is |
| 676 | set to @code{ENOENT}. |
| 677 | @end deftypefun |
| 678 | |
| 679 | For some platforms, the key @code{AT_HWCAP} is the easiest way to inquire |
| 680 | about any instruction set extensions available at runtime. In this case, |
| 681 | there will (of necessity) be a platform-specific set of @samp{HWCAP_} |
| 682 | values masked together that describe the capabilities of the cpu on which |
| 683 | the program is being executed. |
| 684 | |
| 685 | @node System Calls |
| 686 | @section System Calls |
| 687 | |
| 688 | @cindex system call |
| 689 | A system call is a request for service that a program makes of the |
| 690 | kernel. The service is generally something that only the kernel has |
| 691 | the privilege to do, such as doing I/O. Programmers don't normally |
| 692 | need to be concerned with system calls because there are functions in |
| 693 | @theglibc{} to do virtually everything that system calls do. |
| 694 | These functions work by making system calls themselves. For example, |
| 695 | there is a system call that changes the permissions of a file, but |
| 696 | you don't need to know about it because you can just use @theglibc{}'s |
| 697 | @code{chmod} function. |
| 698 | |
| 699 | @cindex kernel call |
| 700 | System calls are sometimes called kernel calls. |
| 701 | |
| 702 | However, there are times when you want to make a system call explicitly, |
| 703 | and for that, @theglibc{} provides the @code{syscall} function. |
| 704 | @code{syscall} is harder to use and less portable than functions like |
| 705 | @code{chmod}, but easier and more portable than coding the system call |
| 706 | in assembler instructions. |
| 707 | |
| 708 | @code{syscall} is most useful when you are working with a system call |
| 709 | which is special to your system or is newer than @theglibc{} you |
| 710 | are using. @code{syscall} is implemented in an entirely generic way; |
| 711 | the function does not know anything about what a particular system |
| 712 | call does or even if it is valid. |
| 713 | |
| 714 | The description of @code{syscall} in this section assumes a certain |
| 715 | protocol for system calls on the various platforms on which @theglibc{} |
| 716 | runs. That protocol is not defined by any strong authority, but |
| 717 | we won't describe it here either because anyone who is coding |
| 718 | @code{syscall} probably won't accept anything less than kernel and C |
| 719 | library source code as a specification of the interface between them |
| 720 | anyway. |
| 721 | |
| 722 | |
| 723 | @code{syscall} is declared in @file{unistd.h}. |
| 724 | |
| 725 | @comment unistd.h |
| 726 | @comment ??? |
| 727 | @deftypefun {long int} syscall (long int @var{sysno}, @dots{}) |
| 728 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| 729 | |
| 730 | @code{syscall} performs a generic system call. |
| 731 | |
| 732 | @cindex system call number |
| 733 | @var{sysno} is the system call number. Each kind of system call is |
| 734 | identified by a number. Macros for all the possible system call numbers |
| 735 | are defined in @file{sys/syscall.h} |
| 736 | |
| 737 | The remaining arguments are the arguments for the system call, in |
| 738 | order, and their meanings depend on the kind of system call. Each kind |
| 739 | of system call has a definite number of arguments, from zero to five. |
| 740 | If you code more arguments than the system call takes, the extra ones to |
| 741 | the right are ignored. |
| 742 | |
| 743 | The return value is the return value from the system call, unless the |
| 744 | system call failed. In that case, @code{syscall} returns @code{-1} and |
| 745 | sets @code{errno} to an error code that the system call returned. Note |
| 746 | that system calls do not return @code{-1} when they succeed. |
| 747 | @cindex errno |
| 748 | |
| 749 | If you specify an invalid @var{sysno}, @code{syscall} returns @code{-1} |
| 750 | with @code{errno} = @code{ENOSYS}. |
| 751 | |
| 752 | Example: |
| 753 | |
| 754 | @smallexample |
| 755 | |
| 756 | #include <unistd.h> |
| 757 | #include <sys/syscall.h> |
| 758 | #include <errno.h> |
| 759 | |
| 760 | @dots{} |
| 761 | |
| 762 | int rc; |
| 763 | |
| 764 | rc = syscall(SYS_chmod, "/etc/passwd", 0444); |
| 765 | |
| 766 | if (rc == -1) |
| 767 | fprintf(stderr, "chmod failed, errno = %d\n", errno); |
| 768 | |
| 769 | @end smallexample |
| 770 | |
| 771 | This, if all the compatibility stars are aligned, is equivalent to the |
| 772 | following preferable code: |
| 773 | |
| 774 | @smallexample |
| 775 | |
| 776 | #include <sys/types.h> |
| 777 | #include <sys/stat.h> |
| 778 | #include <errno.h> |
| 779 | |
| 780 | @dots{} |
| 781 | |
| 782 | int rc; |
| 783 | |
| 784 | rc = chmod("/etc/passwd", 0444); |
| 785 | if (rc == -1) |
| 786 | fprintf(stderr, "chmod failed, errno = %d\n", errno); |
| 787 | |
| 788 | @end smallexample |
| 789 | |
| 790 | @end deftypefun |
| 791 | |
| 792 | |
| 793 | @node Program Termination |
| 794 | @section Program Termination |
| 795 | @cindex program termination |
| 796 | @cindex process termination |
| 797 | |
| 798 | @cindex exit status value |
| 799 | The usual way for a program to terminate is simply for its @code{main} |
| 800 | function to return. The @dfn{exit status value} returned from the |
| 801 | @code{main} function is used to report information back to the process's |
| 802 | parent process or shell. |
| 803 | |
| 804 | A program can also terminate normally by calling the @code{exit} |
| 805 | function. |
| 806 | |
| 807 | In addition, programs can be terminated by signals; this is discussed in |
| 808 | more detail in @ref{Signal Handling}. The @code{abort} function causes |
| 809 | a signal that kills the program. |
| 810 | |
| 811 | @menu |
| 812 | * Normal Termination:: If a program calls @code{exit}, a |
| 813 | process terminates normally. |
| 814 | * Exit Status:: The @code{exit status} provides information |
| 815 | about why the process terminated. |
| 816 | * Cleanups on Exit:: A process can run its own cleanup |
| 817 | functions upon normal termination. |
| 818 | * Aborting a Program:: The @code{abort} function causes |
| 819 | abnormal program termination. |
| 820 | * Termination Internals:: What happens when a process terminates. |
| 821 | @end menu |
| 822 | |
| 823 | @node Normal Termination |
| 824 | @subsection Normal Termination |
| 825 | |
| 826 | A process terminates normally when its program signals it is done by |
| 827 | calling @code{exit}. Returning from @code{main} is equivalent to |
| 828 | calling @code{exit}, and the value that @code{main} returns is used as |
| 829 | the argument to @code{exit}. |
| 830 | |
| 831 | @comment stdlib.h |
| 832 | @comment ISO |
| 833 | @deftypefun void exit (int @var{status}) |
| 834 | @safety{@prelim{}@mtunsafe{@mtasurace{:exit}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
| 835 | @c Access to the atexit/on_exit list, the libc_atexit hook and tls dtors |
| 836 | @c is not guarded. Streams must be flushed, and that triggers the usual |
| 837 | @c AS and AC issues with streams. |
| 838 | The @code{exit} function tells the system that the program is done, which |
| 839 | causes it to terminate the process. |
| 840 | |
| 841 | @var{status} is the program's exit status, which becomes part of the |
| 842 | process' termination status. This function does not return. |
| 843 | @end deftypefun |
| 844 | |
| 845 | Normal termination causes the following actions: |
| 846 | |
| 847 | @enumerate |
| 848 | @item |
| 849 | Functions that were registered with the @code{atexit} or @code{on_exit} |
| 850 | functions are called in the reverse order of their registration. This |
| 851 | mechanism allows your application to specify its own ``cleanup'' actions |
| 852 | to be performed at program termination. Typically, this is used to do |
| 853 | things like saving program state information in a file, or unlocking |
| 854 | locks in shared data bases. |
| 855 | |
| 856 | @item |
| 857 | All open streams are closed, writing out any buffered output data. See |
| 858 | @ref{Closing Streams}. In addition, temporary files opened |
| 859 | with the @code{tmpfile} function are removed; see @ref{Temporary Files}. |
| 860 | |
| 861 | @item |
| 862 | @code{_exit} is called, terminating the program. @xref{Termination Internals}. |
| 863 | @end enumerate |
| 864 | |
| 865 | @node Exit Status |
| 866 | @subsection Exit Status |
| 867 | @cindex exit status |
| 868 | |
| 869 | When a program exits, it can return to the parent process a small |
| 870 | amount of information about the cause of termination, using the |
| 871 | @dfn{exit status}. This is a value between 0 and 255 that the exiting |
| 872 | process passes as an argument to @code{exit}. |
| 873 | |
| 874 | Normally you should use the exit status to report very broad information |
| 875 | about success or failure. You can't provide a lot of detail about the |
| 876 | reasons for the failure, and most parent processes would not want much |
| 877 | detail anyway. |
| 878 | |
| 879 | There are conventions for what sorts of status values certain programs |
| 880 | should return. The most common convention is simply 0 for success and 1 |
| 881 | for failure. Programs that perform comparison use a different |
| 882 | convention: they use status 1 to indicate a mismatch, and status 2 to |
| 883 | indicate an inability to compare. Your program should follow an |
| 884 | existing convention if an existing convention makes sense for it. |
| 885 | |
| 886 | A general convention reserves status values 128 and up for special |
| 887 | purposes. In particular, the value 128 is used to indicate failure to |
| 888 | execute another program in a subprocess. This convention is not |
| 889 | universally obeyed, but it is a good idea to follow it in your programs. |
| 890 | |
| 891 | @strong{Warning:} Don't try to use the number of errors as the exit |
| 892 | status. This is actually not very useful; a parent process would |
| 893 | generally not care how many errors occurred. Worse than that, it does |
| 894 | not work, because the status value is truncated to eight bits. |
| 895 | Thus, if the program tried to report 256 errors, the parent would |
| 896 | receive a report of 0 errors---that is, success. |
| 897 | |
| 898 | For the same reason, it does not work to use the value of @code{errno} |
| 899 | as the exit status---these can exceed 255. |
| 900 | |
| 901 | @strong{Portability note:} Some non-POSIX systems use different |
| 902 | conventions for exit status values. For greater portability, you can |
| 903 | use the macros @code{EXIT_SUCCESS} and @code{EXIT_FAILURE} for the |
| 904 | conventional status value for success and failure, respectively. They |
| 905 | are declared in the file @file{stdlib.h}. |
| 906 | @pindex stdlib.h |
| 907 | |
| 908 | @comment stdlib.h |
| 909 | @comment ISO |
| 910 | @deftypevr Macro int EXIT_SUCCESS |
| 911 | This macro can be used with the @code{exit} function to indicate |
| 912 | successful program completion. |
| 913 | |
| 914 | On POSIX systems, the value of this macro is @code{0}. On other |
| 915 | systems, the value might be some other (possibly non-constant) integer |
| 916 | expression. |
| 917 | @end deftypevr |
| 918 | |
| 919 | @comment stdlib.h |
| 920 | @comment ISO |
| 921 | @deftypevr Macro int EXIT_FAILURE |
| 922 | This macro can be used with the @code{exit} function to indicate |
| 923 | unsuccessful program completion in a general sense. |
| 924 | |
| 925 | On POSIX systems, the value of this macro is @code{1}. On other |
| 926 | systems, the value might be some other (possibly non-constant) integer |
| 927 | expression. Other nonzero status values also indicate failures. Certain |
| 928 | programs use different nonzero status values to indicate particular |
| 929 | kinds of "non-success". For example, @code{diff} uses status value |
| 930 | @code{1} to mean that the files are different, and @code{2} or more to |
| 931 | mean that there was difficulty in opening the files. |
| 932 | @end deftypevr |
| 933 | |
| 934 | Don't confuse a program's exit status with a process' termination status. |
| 935 | There are lots of ways a process can terminate besides having its program |
| 936 | finish. In the event that the process termination @emph{is} caused by program |
| 937 | termination (i.e., @code{exit}), though, the program's exit status becomes |
| 938 | part of the process' termination status. |
| 939 | |
| 940 | @node Cleanups on Exit |
| 941 | @subsection Cleanups on Exit |
| 942 | |
| 943 | Your program can arrange to run its own cleanup functions if normal |
| 944 | termination happens. If you are writing a library for use in various |
| 945 | application programs, then it is unreliable to insist that all |
| 946 | applications call the library's cleanup functions explicitly before |
| 947 | exiting. It is much more robust to make the cleanup invisible to the |
| 948 | application, by setting up a cleanup function in the library itself |
| 949 | using @code{atexit} or @code{on_exit}. |
| 950 | |
| 951 | @comment stdlib.h |
| 952 | @comment ISO |
| 953 | @deftypefun int atexit (void (*@var{function}) (void)) |
| 954 | @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
| 955 | @c atexit @ascuheap @asulock @aculock @acsmem |
| 956 | @c cxa_atexit @ascuheap @asulock @aculock @acsmem |
| 957 | @c __internal_atexit @ascuheap @asulock @aculock @acsmem |
| 958 | @c __new_exitfn @ascuheap @asulock @aculock @acsmem |
| 959 | @c __libc_lock_lock @asulock @aculock |
| 960 | @c calloc dup @ascuheap @acsmem |
| 961 | @c __libc_lock_unlock @aculock |
| 962 | @c atomic_write_barrier dup ok |
| 963 | The @code{atexit} function registers the function @var{function} to be |
| 964 | called at normal program termination. The @var{function} is called with |
| 965 | no arguments. |
| 966 | |
| 967 | The return value from @code{atexit} is zero on success and nonzero if |
| 968 | the function cannot be registered. |
| 969 | @end deftypefun |
| 970 | |
| 971 | @comment stdlib.h |
| 972 | @comment SunOS |
| 973 | @deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg}) |
| 974 | @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
| 975 | @c on_exit @ascuheap @asulock @aculock @acsmem |
| 976 | @c new_exitfn dup @ascuheap @asulock @aculock @acsmem |
| 977 | @c atomic_write_barrier dup ok |
| 978 | This function is a somewhat more powerful variant of @code{atexit}. It |
| 979 | accepts two arguments, a function @var{function} and an arbitrary |
| 980 | pointer @var{arg}. At normal program termination, the @var{function} is |
| 981 | called with two arguments: the @var{status} value passed to @code{exit}, |
| 982 | and the @var{arg}. |
| 983 | |
| 984 | This function is included in @theglibc{} only for compatibility |
| 985 | for SunOS, and may not be supported by other implementations. |
| 986 | @end deftypefun |
| 987 | |
| 988 | Here's a trivial program that illustrates the use of @code{exit} and |
| 989 | @code{atexit}: |
| 990 | |
| 991 | @smallexample |
| 992 | @include atexit.c.texi |
| 993 | @end smallexample |
| 994 | |
| 995 | @noindent |
| 996 | When this program is executed, it just prints the message and exits. |
| 997 | |
| 998 | @node Aborting a Program |
| 999 | @subsection Aborting a Program |
| 1000 | @cindex aborting a program |
| 1001 | |
| 1002 | You can abort your program using the @code{abort} function. The prototype |
| 1003 | for this function is in @file{stdlib.h}. |
| 1004 | @pindex stdlib.h |
| 1005 | |
| 1006 | @comment stdlib.h |
| 1007 | @comment ISO |
| 1008 | @deftypefun void abort (void) |
| 1009 | @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
| 1010 | @c The implementation takes a recursive lock and attempts to support |
| 1011 | @c calls from signal handlers, but if we're in the middle of flushing or |
| 1012 | @c using streams, we may encounter them in inconsistent states. |
| 1013 | The @code{abort} function causes abnormal program termination. This |
| 1014 | does not execute cleanup functions registered with @code{atexit} or |
| 1015 | @code{on_exit}. |
| 1016 | |
| 1017 | This function actually terminates the process by raising a |
| 1018 | @code{SIGABRT} signal, and your program can include a handler to |
| 1019 | intercept this signal; see @ref{Signal Handling}. |
| 1020 | @end deftypefun |
| 1021 | |
| 1022 | @c Put in by rms. Don't remove. |
| 1023 | @cartouche |
| 1024 | @strong{Future Change Warning:} Proposed Federal censorship regulations |
| 1025 | may prohibit us from giving you information about the possibility of |
| 1026 | calling this function. We would be required to say that this is not an |
| 1027 | acceptable way of terminating a program. |
| 1028 | @end cartouche |
| 1029 | |
| 1030 | @node Termination Internals |
| 1031 | @subsection Termination Internals |
| 1032 | |
| 1033 | The @code{_exit} function is the primitive used for process termination |
| 1034 | by @code{exit}. It is declared in the header file @file{unistd.h}. |
| 1035 | @pindex unistd.h |
| 1036 | |
| 1037 | @comment unistd.h |
| 1038 | @comment POSIX.1 |
| 1039 | @deftypefun void _exit (int @var{status}) |
| 1040 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| 1041 | @c Direct syscall (exit_group or exit); calls __task_terminate on hurd, |
| 1042 | @c and abort in the generic posix implementation. |
| 1043 | The @code{_exit} function is the primitive for causing a process to |
| 1044 | terminate with status @var{status}. Calling this function does not |
| 1045 | execute cleanup functions registered with @code{atexit} or |
| 1046 | @code{on_exit}. |
| 1047 | @end deftypefun |
| 1048 | |
| 1049 | @comment stdlib.h |
| 1050 | @comment ISO |
| 1051 | @deftypefun void _Exit (int @var{status}) |
| 1052 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
| 1053 | @c Alias for _exit. |
| 1054 | The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}. |
| 1055 | The @w{ISO C} committee members were not sure whether the definitions of |
| 1056 | @code{_exit} and @code{_Exit} were compatible so they have not used the |
| 1057 | POSIX name. |
| 1058 | |
| 1059 | This function was introduced in @w{ISO C99} and is declared in |
| 1060 | @file{stdlib.h}. |
| 1061 | @end deftypefun |
| 1062 | |
| 1063 | When a process terminates for any reason---either because the program |
| 1064 | terminates, or as a result of a signal---the |
| 1065 | following things happen: |
| 1066 | |
| 1067 | @itemize @bullet |
| 1068 | @item |
| 1069 | All open file descriptors in the process are closed. @xref{Low-Level I/O}. |
| 1070 | Note that streams are not flushed automatically when the process |
| 1071 | terminates; see @ref{I/O on Streams}. |
| 1072 | |
| 1073 | @item |
| 1074 | A process exit status is saved to be reported back to the parent process |
| 1075 | via @code{wait} or @code{waitpid}; see @ref{Process Completion}. If the |
| 1076 | program exited, this status includes as its low-order 8 bits the program |
| 1077 | exit status. |
| 1078 | |
| 1079 | |
| 1080 | @item |
| 1081 | Any child processes of the process being terminated are assigned a new |
| 1082 | parent process. (On most systems, including GNU, this is the @code{init} |
| 1083 | process, with process ID 1.) |
| 1084 | |
| 1085 | @item |
| 1086 | A @code{SIGCHLD} signal is sent to the parent process. |
| 1087 | |
| 1088 | @item |
| 1089 | If the process is a session leader that has a controlling terminal, then |
| 1090 | a @code{SIGHUP} signal is sent to each process in the foreground job, |
| 1091 | and the controlling terminal is disassociated from that session. |
| 1092 | @xref{Job Control}. |
| 1093 | |
| 1094 | @item |
| 1095 | If termination of a process causes a process group to become orphaned, |
| 1096 | and any member of that process group is stopped, then a @code{SIGHUP} |
| 1097 | signal and a @code{SIGCONT} signal are sent to each process in the |
| 1098 | group. @xref{Job Control}. |
| 1099 | @end itemize |