
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, @xref{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: * System Calls:: Requesting service from the system 40: * Program Termination:: Telling the system you're done; return status 41: @end menu 42: 43: @node Program Arguments 44: @section Program Arguments 45: @cindex program arguments 46: @cindex command line arguments 47: @cindex arguments, to program 48: 49: @cindex program startup 50: @cindex startup of program 51: @cindex invocation of program 52: @cindex @code{main} function 53: @findex main 54: The system starts a C program by calling the function @code{main}. It 55: is up to you to write a function named @code{main}---otherwise, you 56: won't even be able to link your program without errors. 57: 58: In @w{ISO C} you can define @code{main} either to take no arguments, or to 59: take two arguments that represent the command line arguments to the 60: program, like this: 61: 62: @smallexample 63: int main (int @var{argc}, char *@var{argv}[]) 64: @end smallexample 65: 66: @cindex argc (program argument count) 67: @cindex argv (program argument vector) 68: The command line arguments are the whitespace-separated tokens given in 69: the shell command used to invoke the program; thus, in @samp{cat foo 70: bar}, the arguments are @samp{foo} and @samp{bar}. The only way a 71: program can look at its command line arguments is via the arguments of 72: @code{main}. If @code{main} doesn't take arguments, then you cannot get 73: at the command line. 74: 75: The value of the @var{argc} argument is the number of command line 76: arguments. The @var{argv} argument is a vector of C strings; its 77: elements are the individual command line argument strings. The file 78: name of the program being run is also included in the vector as the 79: first element; the value of @var{argc} counts this element. A null 80: pointer always follows the last element: @code{@var{argv}[@var{argc}]} 81: is this null pointer. 82: 83: For the command @samp{cat foo bar}, @var{argc} is 3 and @var{argv} has 84: three elements, @code{"cat"}, @code{"foo"} and @code{"bar"}. 85: 86: In Unix systems you can define @code{main} a third way, using three arguments: 87: 88: @smallexample 89: int main (int @var{argc}, char *@var{argv}[], char *@var{envp}[]) 90: @end smallexample 91: 92: The first two arguments are just the same. The third argument 93: @var{envp} gives the program's environment; it is the same as the value 94: of @code{environ}. @xref{Environment Variables}. POSIX.1 does not 95: allow this three-argument form, so to be portable it is best to write 96: @code{main} to take two arguments, and use the value of @code{environ}. 97: 98: @menu 99: * Argument Syntax:: By convention, options start with a hyphen. 100: * Parsing Program Arguments:: Ways to parse program options and arguments. 101: @end menu 102: 103: @node Argument Syntax, Parsing Program Arguments, , Program Arguments 104: @subsection Program Argument Syntax Conventions 105: @cindex program argument syntax 106: @cindex syntax, for program arguments 107: @cindex command argument syntax 108: 109: POSIX recommends these conventions for command line arguments. 110: @code{getopt} (@pxref{Getopt}) and @code{argp_parse} (@pxref{Argp}) make 111: it easy to implement them. 112: 113: @itemize @bullet 114: @item 115: Arguments are options if they begin with a hyphen delimiter (@samp{-}). 116: 117: @item 118: Multiple options may follow a hyphen delimiter in a single token if 119: the options do not take arguments. Thus, @samp{-abc} is equivalent to 120: @samp{-a -b -c}. 121: 122: @item 123: Option names are single alphanumeric characters (as for @code{isalnum}; 124: @pxref{Classification of Characters}). 125: 126: @item 127: Certain options require an argument. For example, the @samp{-o} command 128: of the @code{ld} command requires an argument---an output file name. 129: 130: @item 131: An option and its argument may or may not appear as separate tokens. (In 132: other words, the whitespace separating them is optional.) Thus, 133: @w{@samp{-o foo}} and @samp{-ofoo} are equivalent. 134: 135: @item 136: Options typically precede other non-option arguments. 137: 138: The implementations of @code{getopt} and @code{argp_parse} in the GNU C 139: library normally make it appear as if all the option arguments were 140: specified before all the non-option arguments for the purposes of 141: parsing, even if the user of your program intermixed option and 142: non-option arguments. They do this by reordering the elements of the 143: @var{argv} array. This behavior is nonstandard; if you want to suppress 144: it, define the @code{_POSIX_OPTION_ORDER} environment variable. 145: @xref{Standard Environment}. 146: 147: @item 148: The argument @samp{--} terminates all options; any following arguments 149: are treated as non-option arguments, even if they begin with a hyphen. 150: 151: @item 152: A token consisting of a single hyphen character is interpreted as an 153: ordinary non-option argument. By convention, it is used to specify 154: input from or output to the standard input and output streams. 155: 156: @item 157: Options may be supplied in any order, or appear multiple times. The 158: interpretation is left up to the particular application program. 159: @end itemize 160: 161: @cindex long-named options 162: GNU adds @dfn{long options} to these conventions. Long options consist 163: of @samp{--} followed by a name made of alphanumeric characters and 164: dashes. Option names are typically one to three words long, with 165: hyphens to separate words. Users can abbreviate the option names as 166: long as the abbreviations are unique. 167: 168: To specify an argument for a long option, write 169: @samp{--@var{name}=@var{value}}. This syntax enables a long option to 170: accept an argument that is itself optional. 171: 172: Eventually, the GNU system will provide completion for long option names 173: in the shell. 174: 175: @node Parsing Program Arguments, , Argument Syntax, Program Arguments 176: @subsection Parsing Program Arguments 177: 178: @cindex program arguments, parsing 179: @cindex command arguments, parsing 180: @cindex parsing program arguments 181: If the syntax for the command line arguments to your program is simple 182: enough, you can simply pick the arguments off from @var{argv} by hand. 183: But unless your program takes a fixed number of arguments, or all of the 184: arguments are interpreted in the same way (as file names, for example), 185: you are usually better off using @code{getopt} (@pxref{Getopt}) or 186: @code{argp_parse} (@pxref{Argp}) to do the parsing. 187: 188: @code{getopt} is more standard (the short-option only version of it is a 189: part of the POSIX standard), but using @code{argp_parse} is often 190: easier, both for very simple and very complex option structures, because 191: it does more of the dirty work for you. 192: 193: @menu 194: * Getopt:: Parsing program options using @code{getopt}. 195: * Argp:: Parsing program options using @code{argp_parse}. 196: * Suboptions:: Some programs need more detailed options. 197: * Suboptions Example:: This shows how it could be done for @code{mount}. 198: @end menu 199: 200: @c Getopt and argp start at the @section level so that there's 201: @c enough room for their internal hierarchy (mostly a problem with 202: @c argp). -Miles 203: 204: @include getopt.texi 205: @include argp.texi 206: 207: @node Suboptions, Suboptions Example, Argp, Parsing Program Arguments 208: @c This is a @section so that it's at the same level as getopt and argp 209: @subsubsection Parsing of Suboptions 210: 211: Having a single level of options is sometimes not enough. There might 212: be too many options which have to be available or a set of options is 213: closely related. 214: 215: For this case some programs use suboptions. One of the most prominent 216: programs is certainly @code{mount}(8). The @code{-o} option take one 217: argument which itself is a comma separated list of options. To ease the 218: programming of code like this the function @code{getsubopt} is 219: available. 220: 221: @comment stdlib.h 222: @deftypefun int getsubopt (char **@var{optionp}, const char* const *@var{tokens}, char **@var{valuep}) 223: 224: The @var{optionp} parameter must be a pointer to a variable containing 225: the address of the string to process. When the function returns the 226: reference is updated to point to the next suboption or to the 227: terminating @samp{\0} character if there is no more suboption available. 228: 229: The @var{tokens} parameter references an array of strings containing the 230: known suboptions. All strings must be @samp{\0} terminated and to mark 231: the end a null pointer must be stored. When @code{getsubopt} finds a 232: possible legal suboption it compares it with all strings available in 233: the @var{tokens} array and returns the index in the string as the 234: indicator. 235: 236: In case the suboption has an associated value introduced by a @samp{=} 237: character, a pointer to the value is returned in @var{valuep}. The 238: string is @samp{\0} terminated. If no argument is available 239: @var{valuep} is set to the null pointer. By doing this the caller can 240: check whether a necessary value is given or whether no unexpected value 241: is present. 242: 243: In case the next suboption in the string is not mentioned in the 244: @var{tokens} array the starting address of the suboption including a 245: possible value is returned in @var{valuep} and the return value of the 246: function is @samp{-1}. 247: @end deftypefun 248: 249: @node Suboptions Example, , Suboptions, Parsing Program Arguments 250: @subsection Parsing of Suboptions Example 251: 252: The code which might appear in the @code{mount}(8) program is a perfect 253: example of the use of @code{getsubopt}: 254: 255: @smallexample 256: @include subopt.c.texi 257: @end smallexample 258: 259: 260: @node Environment Variables 261: @section Environment Variables 262: 263: @cindex environment variable 264: When a program is executed, it receives information about the context in 265: which it was invoked in two ways. The first mechanism uses the 266: @var{argv} and @var{argc} arguments to its @code{main} function, and is 267: discussed in @ref{Program Arguments}. The second mechanism uses 268: @dfn{environment variables} and is discussed in this section. 269: 270: The @var{argv} mechanism is typically used to pass command-line 271: arguments specific to the particular program being invoked. The 272: environment, on the other hand, keeps track of information that is 273: shared by many programs, changes infrequently, and that is less 274: frequently used. 275: 276: The environment variables discussed in this section are the same 277: environment variables that you set using assignments and the 278: @code{export} command in the shell. Programs executed from the shell 279: inherit all of the environment variables from the shell. 280: @c !!! xref to right part of bash manual when it exists 281: 282: @cindex environment 283: Standard environment variables are used for information about the user's 284: home directory, terminal type, current locale, and so on; you can define 285: additional variables for other purposes. The set of all environment 286: variables that have values is collectively known as the 287: @dfn{environment}. 288: 289: Names of environment variables are case-sensitive and must not contain 290: the character @samp{=}. System-defined environment variables are 291: invariably uppercase. 292: 293: The values of environment variables can be anything that can be 294: represented as a string. A value must not contain an embedded null 295: character, since this is assumed to terminate the string. 296: 297: 298: @menu 299: * Environment Access:: How to get and set the values of 300: environment variables. 301: * Standard Environment:: These environment variables have 302: standard interpretations. 303: @end menu 304: 305: @node Environment Access 306: @subsection Environment Access 307: @cindex environment access 308: @cindex environment representation 309: 310: The value of an environment variable can be accessed with the 311: @code{getenv} function. This is declared in the header file 312: @file{stdlib.h}. All of the following functions can be safely used in 313: multi-threaded programs. It is made sure that concurrent modifications 314: to the environment do not lead to errors. 315: @pindex stdlib.h 316: 317: @comment stdlib.h 318: @comment ISO 319: @deftypefun {char *} getenv (const char *@var{name}) 320: This function returns a string that is the value of the environment 321: variable @var{name}. You must not modify this string. In some non-Unix 322: systems not using the GNU library, it might be overwritten by subsequent 323: calls to @code{getenv} (but not by any other library function). If the 324: environment variable @var{name} is not defined, the value is a null 325: pointer. 326: @end deftypefun 327: 328: 329: @comment stdlib.h 330: @comment SVID 331: @deftypefun int putenv (char *@var{string}) 332: The @code{putenv} function adds or removes definitions from the environment. 333: If the @var{string} is of the form @samp{@var{name}=@var{value}}, the 334: definition is added to the environment. Otherwise, the @var{string} is 335: interpreted as the name of an environment variable, and any definition 336: for this variable in the environment is removed. 337: 338: The difference to the @code{setenv} function is that the exact string 339: given as the parameter @var{string} is put into the environment. If the 340: user should change the string after the @code{putenv} call this will 341: reflect in automatically in the environment. This also requires that 342: @var{string} is no automatic variable which scope is left before the 343: variable is removed from the environment. The same applies of course to 344: dynamically allocated variables which are freed later. 345: 346: This function is part of the extended Unix interface. Since it was also 347: available in old SVID libraries you should define either 348: @var{_XOPEN_SOURCE} or @var{_SVID_SOURCE} before including any header. 349: @end deftypefun 350: 351: 352: @comment stdlib.h 353: @comment BSD 354: @deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace}) 355: The @code{setenv} function can be used to add a new definition to the 356: environment. The entry with the name @var{name} is replaced by the 357: value @samp{@var{name}=@var{value}}. Please note that this is also true 358: if @var{value} is the empty string. To do this a new string is created 359: and the strings @var{name} and @var{value} are copied. A null pointer 360: for the @var{value} parameter is illegal. If the environment already 361: contains an entry with key @var{name} the @var{replace} parameter 362: controls the action. If replace is zero, nothing happens. Otherwise 363: the old entry is replaced by the new one. 364: 365: Please note that you cannot remove an entry completely using this function. 366: 367: This function was originally part of the BSD library but is now part of 368: the Unix standard. 369: @end deftypefun 370: 371: @comment stdlib.h 372: @comment BSD 373: @deftypefun int unsetenv (const char *@var{name}) 374: Using this function one can remove an entry completely from the 375: environment. If the environment contains an entry with the key 376: @var{name} this whole entry is removed. A call to this function is 377: equivalent to a call to @code{putenv} when the @var{value} part of the 378: string is empty. 379: 380: The function return @code{-1} if @var{name} is a null pointer, points to 381: an empty string, or points to a string containing a @code{=} character. 382: It returns @code{0} if the call succeeded. 383: 384: This function was originally part of the BSD library but is now part of 385: the Unix standard. The BSD version had no return value, though. 386: @end deftypefun 387: 388: There is one more function to modify the whole environment. This 389: function is said to be used in the POSIX.9 (POSIX bindings for Fortran 390: 77) and so one should expect it did made it into POSIX.1. But this 391: never happened. But we still provide this function as a GNU extension 392: to enable writing standard compliant Fortran environments. 393: 394: @comment stdlib.h 395: @comment GNU 396: @deftypefun int clearenv (void) 397: The @code{clearenv} function removes all entries from the environment. 398: Using @code{putenv} and @code{setenv} new entries can be added again 399: later. 400: 401: If the function is successful it returns @code{0}. Otherwise the return 402: value is nonzero. 403: @end deftypefun 404: 405: 406: You can deal directly with the underlying representation of environment 407: objects to add more variables to the environment (for example, to 408: communicate with another program you are about to execute; 409: @pxref{Executing a File}). 410: 411: @comment unistd.h 412: @comment POSIX.1 413: @deftypevar {char **} environ 414: The environment is represented as an array of strings. Each string is 415: of the format @samp{@var{name}=@var{value}}. The order in which 416: strings appear in the environment is not significant, but the same 417: @var{name} must not appear more than once. The last element of the 418: array is a null pointer. 419: 420: This variable is declared in the header file @file{unistd.h}. 421: 422: If you just want to get the value of an environment variable, use 423: @code{getenv}. 424: @end deftypevar 425: 426: Unix systems, and the GNU system, pass the initial value of 427: @code{environ} as the third argument to @code{main}. 428: @xref{Program Arguments}. 429: 430: @node Standard Environment 431: @subsection Standard Environment Variables 432: @cindex standard environment variables 433: 434: These environment variables have standard meanings. This doesn't mean 435: that they are always present in the environment; but if these variables 436: @emph{are} present, they have these meanings. You shouldn't try to use 437: these environment variable names for some other purpose. 438: 439: @comment Extra blank lines make it look better. 440: @table @code 441: @item HOME 442: @cindex @code{HOME} environment variable 443: @cindex home directory 444: 445: This is a string representing the user's @dfn{home directory}, or 446: initial default working directory. 447: 448: The user can set @code{HOME} to any value. 449: If you need to make sure to obtain the proper home directory 450: for a particular user, you should not use @code{HOME}; instead, 451: look up the user's name in the user database (@pxref{User Database}). 452: 453: For most purposes, it is better to use @code{HOME}, precisely because 454: this lets the user specify the value. 455: 456: @c !!! also USER 457: @item LOGNAME 458: @cindex @code{LOGNAME} environment variable 459: 460: This is the name that the user used to log in. Since the value in the 461: environment can be tweaked arbitrarily, this is not a reliable way to 462: identify the user who is running a program; a function like 463: @code{getlogin} (@pxref{Who Logged In}) is better for that purpose. 464: 465: For most purposes, it is better to use @code{LOGNAME}, precisely because 466: this lets the user specify the value. 467: 468: @item PATH 469: @cindex @code{PATH} environment variable 470: 471: A @dfn{path} is a sequence of directory names which is used for 472: searching for a file. The variable @code{PATH} holds a path used 473: for searching for programs to be run. 474: 475: The @code{execlp} and @code{execvp} functions (@pxref{Executing a File}) 476: use this environment variable, as do many shells and other utilities 477: which are implemented in terms of those functions. 478: 479: The syntax of a path is a sequence of directory names separated by 480: colons. An empty string instead of a directory name stands for the 481: current directory (@pxref{Working Directory}). 482: 483: A typical value for this environment variable might be a string like: 484: 485: @smallexample 486: :/bin:/etc:/usr/bin:/usr/new/X11:/usr/new:/usr/local/bin 487: @end smallexample 488: 489: This means that if the user tries to execute a program named @code{foo}, 490: the system will look for files named @file{foo}, @file{/bin/foo}, 491: @file{/etc/foo}, and so on. The first of these files that exists is 492: the one that is executed. 493: 494: @c !!! also TERMCAP 495: @item TERM 496: @cindex @code{TERM} environment variable 497: 498: This specifies the kind of terminal that is receiving program output. 499: Some programs can make use of this information to take advantage of 500: special escape sequences or terminal modes supported by particular kinds 501: of terminals. Many programs which use the termcap library 502: (@pxref{Finding a Terminal Description,Find,,termcap,The Termcap Library 503: Manual}) use the @code{TERM} environment variable, for example. 504: 505: @item TZ 506: @cindex @code{TZ} environment variable 507: 508: This specifies the time zone. @xref{TZ Variable}, for information about 509: the format of this string and how it is used. 510: 511: @item LANG 512: @cindex @code{LANG} environment variable 513: 514: This specifies the default locale to use for attribute categories where 515: neither @code{LC_ALL} nor the specific environment variable for that 516: category is set. @xref{Locales}, for more information about 517: locales. 518: 519: @ignore 520: @c I doubt this really exists 521: @item LC_ALL 522: @cindex @code{LC_ALL} environment variable 523: 524: This is similar to the @code{LANG} environment variable. However, its 525: value takes precedence over any values provided for the individual 526: attribute category environment variables, or for the @code{LANG} 527: environment variable. 528: @end ignore 529: 530: @item LC_ALL 531: @cindex @code{LC_ALL} environment variable 532: 533: If this environment variable is set it overrides the selection for all 534: the locales done using the other @code{LC_*} environment variables. The 535: value of the other @code{LC_*} environment variables is simply ignored 536: in this case. 537: 538: @item LC_COLLATE 539: @cindex @code{LC_COLLATE} environment variable 540: 541: This specifies what locale to use for string sorting. 542: 543: @item LC_CTYPE 544: @cindex @code{LC_CTYPE} environment variable 545: 546: This specifies what locale to use for character sets and character 547: classification. 548: 549: @item LC_MESSAGES 550: @cindex @code{LC_MESSAGES} environment variable 551: 552: This specifies what locale to use for printing messages and to parse 553: responses. 554: 555: @item LC_MONETARY 556: @cindex @code{LC_MONETARY} environment variable 557: 558: This specifies what locale to use for formatting monetary values. 559: 560: @item LC_NUMERIC 561: @cindex @code{LC_NUMERIC} environment variable 562: 563: This specifies what locale to use for formatting numbers. 564: 565: @item LC_TIME 566: @cindex @code{LC_TIME} environment variable 567: 568: This specifies what locale to use for formatting date/time values. 569: 570: @item NLSPATH 571: @cindex @code{NLSPATH} environment variable 572: 573: This specifies the directories in which the @code{catopen} function 574: looks for message translation catalogs. 575: 576: @item _POSIX_OPTION_ORDER 577: @cindex @code{_POSIX_OPTION_ORDER} environment variable. 578: 579: If this environment variable is defined, it suppresses the usual 580: reordering of command line arguments by @code{getopt} and 581: @code{argp_parse}. @xref{Argument Syntax}. 582: 583: @c !!! GNU also has COREFILE, CORESERVER, EXECSERVERS 584: @end table 585: 586: @node System Calls 587: @section System Calls 588: 589: @cindex system call 590: A system call is a request for service that a program makes of the 591: kernel. The service is generally something that only the kernel has 592: the privilege to do, such as doing I/O. Programmers don't normally 593: need to be concerned with system calls because there are functions in 594: the GNU C library to do virtually everything that system calls do. 595: These functions work by making system calls themselves. For example, 596: there is a system call that changes the permissions of a file, but 597: you don't need to know about it because you can just use the GNU C 598: library's @code{chmod} function. 599: 600: @cindex kernel call 601: System calls are sometimes called kernel calls. 602: 603: However, there are times when you want to make a system call explicitly, 604: and for that, the GNU C library provides the @code{syscall} function. 605: @code{syscall} is harder to use and less portable than functions like 606: @code{chmod}, but easier and more portable than coding the system call 607: in assembler instructions. 608: 609: @code{syscall} is most useful when you are working with a system call 610: which is special to your system or is newer than the GNU C library you 611: are using. @code{syscall} is implemented in an entirely generic way; 612: the function does not know anything about what a particular system 613: call does or even if it is valid. 614: 615: The description of @code{syscall} in this section assumes a certain 616: protocol for system calls on the various platforms on which the GNU C 617: library runs. That protocol is not defined by any strong authority, but 618: we won't describe it here either because anyone who is coding 619: @code{syscall} probably won't accept anything less than kernel and C 620: library source code as a specification of the interface between them 621: anyway. 622: 623: 624: @code{syscall} is declared in @file{unistd.h}. 625: 626: @comment unistd.h 627: @comment ??? 628: @deftypefun {long int} syscall (long int @var{sysno}, ...) 629: 630: @code{syscall} performs a generic system call. 631: 632: @cindex system call number 633: @var{sysno} is the system call number. Each kind of system call is 634: identified by a number. Macros for all the possible system call numbers 635: are defined in @file{sys/syscall.h} 636: 637: The remaining arguments are the arguments for the system call, in 638: order, and their meanings depend on the kind of system call. Each kind 639: of system call has a definite number of arguments, from zero to five. 640: If you code more arguments than the system call takes, the extra ones to 641: the right are ignored. 642: 643: The return value is the return value from the system call, unless the 644: system call failed. In that case, @code{syscall} returns @code{-1} and 645: sets @code{errno} to an error code that the system call returned. Note 646: that system calls do not return @code{-1} when they succeed. 647: @cindex errno 648: 649: If you specify an invalid @var{sysno}, @code{syscall} returns @code{-1} 650: with @code{errno} = @code{ENOSYS}. 651: 652: Example: 653: 654: @smallexample 655: 656: #include <unistd.h> 657: #include <sys/syscall.h> 658: #include <errno.h> 659: 660: @dots{} 661: 662: int rc; 663: 664: rc = syscall(SYS_chmod, "/etc/passwd", 0444); 665: 666: if (rc == -1) 667: fprintf(stderr, "chmod failed, errno = %d\n", errno); 668: 669: @end smallexample 670: 671: This, if all the compatibility stars are aligned, is equivalent to the 672: following preferable code: 673: 674: @smallexample 675: 676: #include <sys/types.h> 677: #include <sys/stat.h> 678: #include <errno.h> 679: 680: @dots{} 681: 682: int rc; 683: 684: rc = chmod("/etc/passwd", 0444); 685: if (rc == -1) 686: fprintf(stderr, "chmod failed, errno = %d\n", errno); 687: 688: @end smallexample 689: 690: @end deftypefun 691: 692: 693: @node Program Termination 694: @section Program Termination 695: @cindex program termination 696: @cindex process termination 697: 698: @cindex exit status value 699: The usual way for a program to terminate is simply for its @code{main} 700: function to return. The @dfn{exit status value} returned from the 701: @code{main} function is used to report information back to the process's 702: parent process or shell. 703: 704: A program can also terminate normally by calling the @code{exit} 705: function. 706: 707: In addition, programs can be terminated by signals; this is discussed in 708: more detail in @ref{Signal Handling}. The @code{abort} function causes 709: a signal that kills the program. 710: 711: @menu 712: * Normal Termination:: If a program calls @code{exit}, a 713: process terminates normally. 714: * Exit Status:: The @code{exit status} provides information 715: about why the process terminated. 716: * Cleanups on Exit:: A process can run its own cleanup 717: functions upon normal termination. 718: * Aborting a Program:: The @code{abort} function causes 719: abnormal program termination. 720: * Termination Internals:: What happens when a process terminates. 721: @end menu 722: 723: @node Normal Termination 724: @subsection Normal Termination 725: 726: A process terminates normally when its program signals it is done by 727: calling @code{exit}. Returning from @code{main} is equivalent to 728: calling @code{exit}, and the value that @code{main} returns is used as 729: the argument to @code{exit}. 730: 731: @comment stdlib.h 732: @comment ISO 733: @deftypefun void exit (int @var{status}) 734: The @code{exit} function tells the system that the program is done, which 735: causes it to terminate the process. 736: 737: @var{status} is the program's exit status, which becomes part of the 738: process' termination status. This function does not return. 739: @end deftypefun 740: 741: Normal termination causes the following actions: 742: 743: @enumerate 744: @item 745: Functions that were registered with the @code{atexit} or @code{on_exit} 746: functions are called in the reverse order of their registration. This 747: mechanism allows your application to specify its own ``cleanup'' actions 748: to be performed at program termination. Typically, this is used to do 749: things like saving program state information in a file, or unlocking 750: locks in shared data bases. 751: 752: @item