2000-05-04 02:46:54 +00:00
|
|
|
@node Program Basics, Processes, Signal Handling, Top
|
1998-07-13 12:29:13 +00:00
|
|
|
@c %MENU% Writing the beginning and end of your program
|
2000-05-04 02:46:54 +00:00
|
|
|
@chapter The Basic Program/System Interface
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@cindex process
|
2000-05-04 02:46:54 +00:00
|
|
|
@cindex program
|
|
|
|
@cindex address space
|
|
|
|
@cindex thread of control
|
1995-02-18 01:27:10 +00:00
|
|
|
@dfn{Processes} are the primitive units for allocation of system
|
|
|
|
resources. Each process has its own address space and (usually) one
|
|
|
|
thread of control. A process executes a program; you can have multiple
|
|
|
|
processes executing the same program, but each process has its own copy
|
|
|
|
of the program within its own address space and executes it
|
2000-05-04 02:46:54 +00:00
|
|
|
independently of the other copies. Though it may have multiple threads
|
|
|
|
of control within the same program and a program may be composed of
|
|
|
|
multiple logically separate modules, a process always executes exactly
|
|
|
|
one program.
|
|
|
|
|
|
|
|
Note that we are using a specific definition of ``program'' for the
|
|
|
|
purposes of this manual, which corresponds to a common definition in the
|
|
|
|
context of Unix system. In popular usage, ``program'' enjoys a much
|
|
|
|
broader definition; it can refer for example to a system's kernel, an
|
|
|
|
editor macro, a complex package of software, or a discrete section of
|
|
|
|
code executing within a process.
|
|
|
|
|
|
|
|
Writing the program is what this manual is all about. This chapter
|
|
|
|
explains the most basic interface between your program and the system
|
|
|
|
that runs, or calls, it. This includes passing of parameters (arguments
|
|
|
|
and environment) from the system, requesting basic services from the
|
|
|
|
system, and telling the system the program is done.
|
|
|
|
|
|
|
|
A program starts another program with the @code{exec} family of system calls.
|
|
|
|
This chapter looks at program startup from the execee's point of view. To
|
2007-10-28 08:24:07 +00:00
|
|
|
see the event from the execor's point of view, see @ref{Executing a File}.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@menu
|
2012-05-20 17:34:00 +00:00
|
|
|
* Program Arguments:: Parsing your program's command-line arguments
|
2000-05-04 02:46:54 +00:00
|
|
|
* Environment Variables:: Less direct parameters affecting your program
|
2012-05-20 17:34:00 +00:00
|
|
|
* Auxiliary Vector:: Least direct parameters affecting your program
|
2000-05-04 02:46:54 +00:00
|
|
|
* System Calls:: Requesting service from the system
|
|
|
|
* Program Termination:: Telling the system you're done; return status
|
1995-02-18 01:27:10 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Program Arguments
|
|
|
|
@section Program Arguments
|
|
|
|
@cindex program arguments
|
|
|
|
@cindex command line arguments
|
|
|
|
@cindex arguments, to program
|
|
|
|
|
|
|
|
@cindex program startup
|
|
|
|
@cindex startup of program
|
|
|
|
@cindex invocation of program
|
|
|
|
@cindex @code{main} function
|
|
|
|
@findex main
|
|
|
|
The system starts a C program by calling the function @code{main}. It
|
|
|
|
is up to you to write a function named @code{main}---otherwise, you
|
|
|
|
won't even be able to link your program without errors.
|
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
In @w{ISO C} you can define @code{main} either to take no arguments, or to
|
1995-02-18 01:27:10 +00:00
|
|
|
take two arguments that represent the command line arguments to the
|
|
|
|
program, like this:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
int main (int @var{argc}, char *@var{argv}[])
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@cindex argc (program argument count)
|
|
|
|
@cindex argv (program argument vector)
|
|
|
|
The command line arguments are the whitespace-separated tokens given in
|
|
|
|
the shell command used to invoke the program; thus, in @samp{cat foo
|
|
|
|
bar}, the arguments are @samp{foo} and @samp{bar}. The only way a
|
|
|
|
program can look at its command line arguments is via the arguments of
|
|
|
|
@code{main}. If @code{main} doesn't take arguments, then you cannot get
|
|
|
|
at the command line.
|
|
|
|
|
|
|
|
The value of the @var{argc} argument is the number of command line
|
|
|
|
arguments. The @var{argv} argument is a vector of C strings; its
|
|
|
|
elements are the individual command line argument strings. The file
|
|
|
|
name of the program being run is also included in the vector as the
|
|
|
|
first element; the value of @var{argc} counts this element. A null
|
|
|
|
pointer always follows the last element: @code{@var{argv}[@var{argc}]}
|
|
|
|
is this null pointer.
|
|
|
|
|
|
|
|
For the command @samp{cat foo bar}, @var{argc} is 3 and @var{argv} has
|
|
|
|
three elements, @code{"cat"}, @code{"foo"} and @code{"bar"}.
|
|
|
|
|
|
|
|
In Unix systems you can define @code{main} a third way, using three arguments:
|
|
|
|
|
|
|
|
@smallexample
|
2000-11-16 02:17:26 +00:00
|
|
|
int main (int @var{argc}, char *@var{argv}[], char *@var{envp}[])
|
1995-02-18 01:27:10 +00:00
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
The first two arguments are just the same. The third argument
|
2000-05-04 02:46:54 +00:00
|
|
|
@var{envp} gives the program's environment; it is the same as the value
|
1995-02-18 01:27:10 +00:00
|
|
|
of @code{environ}. @xref{Environment Variables}. POSIX.1 does not
|
|
|
|
allow this three-argument form, so to be portable it is best to write
|
|
|
|
@code{main} to take two arguments, and use the value of @code{environ}.
|
|
|
|
|
|
|
|
@menu
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
* Argument Syntax:: By convention, options start with a hyphen.
|
1997-06-05 11:28:54 +00:00
|
|
|
* Parsing Program Arguments:: Ways to parse program options and arguments.
|
1995-02-18 01:27:10 +00:00
|
|
|
@end menu
|
|
|
|
|
1998-09-01 14:31:49 +00:00
|
|
|
@node Argument Syntax, Parsing Program Arguments, , Program Arguments
|
1995-02-18 01:27:10 +00:00
|
|
|
@subsection Program Argument Syntax Conventions
|
|
|
|
@cindex program argument syntax
|
|
|
|
@cindex syntax, for program arguments
|
|
|
|
@cindex command argument syntax
|
|
|
|
|
|
|
|
POSIX recommends these conventions for command line arguments.
|
1997-06-05 11:28:54 +00:00
|
|
|
@code{getopt} (@pxref{Getopt}) and @code{argp_parse} (@pxref{Argp}) make
|
|
|
|
it easy to implement them.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
Arguments are options if they begin with a hyphen delimiter (@samp{-}).
|
|
|
|
|
|
|
|
@item
|
|
|
|
Multiple options may follow a hyphen delimiter in a single token if
|
|
|
|
the options do not take arguments. Thus, @samp{-abc} is equivalent to
|
|
|
|
@samp{-a -b -c}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Option names are single alphanumeric characters (as for @code{isalnum};
|
1998-11-16 12:02:08 +00:00
|
|
|
@pxref{Classification of Characters}).
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@item
|
|
|
|
Certain options require an argument. For example, the @samp{-o} command
|
|
|
|
of the @code{ld} command requires an argument---an output file name.
|
|
|
|
|
|
|
|
@item
|
|
|
|
An option and its argument may or may not appear as separate tokens. (In
|
|
|
|
other words, the whitespace separating them is optional.) Thus,
|
|
|
|
@w{@samp{-o foo}} and @samp{-ofoo} are equivalent.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Options typically precede other non-option arguments.
|
|
|
|
|
2012-02-28 14:44:20 +00:00
|
|
|
The implementations of @code{getopt} and @code{argp_parse} in @theglibc{}
|
|
|
|
normally make it appear as if all the option arguments were
|
1997-06-05 11:28:54 +00:00
|
|
|
specified before all the non-option arguments for the purposes of
|
|
|
|
parsing, even if the user of your program intermixed option and
|
|
|
|
non-option arguments. They do this by reordering the elements of the
|
|
|
|
@var{argv} array. This behavior is nonstandard; if you want to suppress
|
|
|
|
it, define the @code{_POSIX_OPTION_ORDER} environment variable.
|
|
|
|
@xref{Standard Environment}.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@item
|
|
|
|
The argument @samp{--} terminates all options; any following arguments
|
|
|
|
are treated as non-option arguments, even if they begin with a hyphen.
|
|
|
|
|
|
|
|
@item
|
|
|
|
A token consisting of a single hyphen character is interpreted as an
|
|
|
|
ordinary non-option argument. By convention, it is used to specify
|
|
|
|
input from or output to the standard input and output streams.
|
|
|
|
|
|
|
|
@item
|
|
|
|
Options may be supplied in any order, or appear multiple times. The
|
|
|
|
interpretation is left up to the particular application program.
|
|
|
|
@end itemize
|
|
|
|
|
|
|
|
@cindex long-named options
|
|
|
|
GNU adds @dfn{long options} to these conventions. Long options consist
|
|
|
|
of @samp{--} followed by a name made of alphanumeric characters and
|
|
|
|
dashes. Option names are typically one to three words long, with
|
|
|
|
hyphens to separate words. Users can abbreviate the option names as
|
|
|
|
long as the abbreviations are unique.
|
|
|
|
|
|
|
|
To specify an argument for a long option, write
|
|
|
|
@samp{--@var{name}=@var{value}}. This syntax enables a long option to
|
|
|
|
accept an argument that is itself optional.
|
|
|
|
|
2012-03-08 01:27:38 +00:00
|
|
|
Eventually, @gnusystems{} will provide completion for long option names
|
1995-02-18 01:27:10 +00:00
|
|
|
in the shell.
|
|
|
|
|
1998-09-01 14:31:49 +00:00
|
|
|
@node Parsing Program Arguments, , Argument Syntax, Program Arguments
|
1997-06-05 11:28:54 +00:00
|
|
|
@subsection Parsing Program Arguments
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@cindex program arguments, parsing
|
|
|
|
@cindex command arguments, parsing
|
|
|
|
@cindex parsing program arguments
|
1997-06-05 11:28:54 +00:00
|
|
|
If the syntax for the command line arguments to your program is simple
|
|
|
|
enough, you can simply pick the arguments off from @var{argv} by hand.
|
|
|
|
But unless your program takes a fixed number of arguments, or all of the
|
|
|
|
arguments are interpreted in the same way (as file names, for example),
|
|
|
|
you are usually better off using @code{getopt} (@pxref{Getopt}) or
|
|
|
|
@code{argp_parse} (@pxref{Argp}) to do the parsing.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@code{getopt} is more standard (the short-option only version of it is a
|
|
|
|
part of the POSIX standard), but using @code{argp_parse} is often
|
|
|
|
easier, both for very simple and very complex option structures, because
|
|
|
|
it does more of the dirty work for you.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@menu
|
|
|
|
* Getopt:: Parsing program options using @code{getopt}.
|
|
|
|
* Argp:: Parsing program options using @code{argp_parse}.
|
|
|
|
* Suboptions:: Some programs need more detailed options.
|
|
|
|
* Suboptions Example:: This shows how it could be done for @code{mount}.
|
|
|
|
@end menu
|
1995-02-18 01:27:10 +00:00
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@c Getopt and argp start at the @section level so that there's
|
|
|
|
@c enough room for their internal hierarchy (mostly a problem with
|
|
|
|
@c argp). -Miles
|
1995-02-18 01:27:10 +00:00
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@include getopt.texi
|
|
|
|
@include argp.texi
|
1995-02-18 01:27:10 +00:00
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@node Suboptions, Suboptions Example, Argp, Parsing Program Arguments
|
|
|
|
@c This is a @section so that it's at the same level as getopt and argp
|
1998-09-01 14:31:49 +00:00
|
|
|
@subsubsection Parsing of Suboptions
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
|
|
|
|
Having a single level of options is sometimes not enough. There might
|
|
|
|
be too many options which have to be available or a set of options is
|
|
|
|
closely related.
|
|
|
|
|
|
|
|
For this case some programs use suboptions. One of the most prominent
|
|
|
|
programs is certainly @code{mount}(8). The @code{-o} option take one
|
|
|
|
argument which itself is a comma separated list of options. To ease the
|
|
|
|
programming of code like this the function @code{getsubopt} is
|
|
|
|
available.
|
|
|
|
|
|
|
|
@comment stdlib.h
|
2013-02-11 22:12:47 +00:00
|
|
|
@deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep})
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
|
|
|
|
The @var{optionp} parameter must be a pointer to a variable containing
|
|
|
|
the address of the string to process. When the function returns the
|
|
|
|
reference is updated to point to the next suboption or to the
|
|
|
|
terminating @samp{\0} character if there is no more suboption available.
|
|
|
|
|
|
|
|
The @var{tokens} parameter references an array of strings containing the
|
|
|
|
known suboptions. All strings must be @samp{\0} terminated and to mark
|
|
|
|
the end a null pointer must be stored. When @code{getsubopt} finds a
|
|
|
|
possible legal suboption it compares it with all strings available in
|
|
|
|
the @var{tokens} array and returns the index in the string as the
|
|
|
|
indicator.
|
|
|
|
|
|
|
|
In case the suboption has an associated value introduced by a @samp{=}
|
|
|
|
character, a pointer to the value is returned in @var{valuep}. The
|
|
|
|
string is @samp{\0} terminated. If no argument is available
|
|
|
|
@var{valuep} is set to the null pointer. By doing this the caller can
|
|
|
|
check whether a necessary value is given or whether no unexpected value
|
|
|
|
is present.
|
|
|
|
|
|
|
|
In case the next suboption in the string is not mentioned in the
|
|
|
|
@var{tokens} array the starting address of the suboption including a
|
|
|
|
possible value is returned in @var{valuep} and the return value of the
|
|
|
|
function is @samp{-1}.
|
|
|
|
@end deftypefun
|
|
|
|
|
1997-06-05 11:28:54 +00:00
|
|
|
@node Suboptions Example, , Suboptions, Parsing Program Arguments
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
@subsection Parsing of Suboptions Example
|
|
|
|
|
|
|
|
The code which might appear in the @code{mount}(8) program is a perfect
|
|
|
|
example of the use of @code{getsubopt}:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
@include subopt.c.texi
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@node Environment Variables
|
|
|
|
@section Environment Variables
|
|
|
|
|
|
|
|
@cindex environment variable
|
|
|
|
When a program is executed, it receives information about the context in
|
|
|
|
which it was invoked in two ways. The first mechanism uses the
|
|
|
|
@var{argv} and @var{argc} arguments to its @code{main} function, and is
|
|
|
|
discussed in @ref{Program Arguments}. The second mechanism uses
|
|
|
|
@dfn{environment variables} and is discussed in this section.
|
|
|
|
|
|
|
|
The @var{argv} mechanism is typically used to pass command-line
|
|
|
|
arguments specific to the particular program being invoked. The
|
|
|
|
environment, on the other hand, keeps track of information that is
|
|
|
|
shared by many programs, changes infrequently, and that is less
|
|
|
|
frequently used.
|
|
|
|
|
|
|
|
The environment variables discussed in this section are the same
|
|
|
|
environment variables that you set using assignments and the
|
|
|
|
@code{export} command in the shell. Programs executed from the shell
|
|
|
|
inherit all of the environment variables from the shell.
|
|
|
|
@c !!! xref to right part of bash manual when it exists
|
|
|
|
|
|
|
|
@cindex environment
|
|
|
|
Standard environment variables are used for information about the user's
|
|
|
|
home directory, terminal type, current locale, and so on; you can define
|
|
|
|
additional variables for other purposes. The set of all environment
|
|
|
|
variables that have values is collectively known as the
|
|
|
|
@dfn{environment}.
|
|
|
|
|
|
|
|
Names of environment variables are case-sensitive and must not contain
|
|
|
|
the character @samp{=}. System-defined environment variables are
|
|
|
|
invariably uppercase.
|
|
|
|
|
|
|
|
The values of environment variables can be anything that can be
|
|
|
|
represented as a string. A value must not contain an embedded null
|
|
|
|
character, since this is assumed to terminate the string.
|
|
|
|
|
|
|
|
|
|
|
|
@menu
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
* Environment Access:: How to get and set the values of
|
1997-08-20 03:53:21 +00:00
|
|
|
environment variables.
|
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (lib): New phony target. Depend on stamp files.
($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.
1996-07-13 Paul Eggert <eggert@twinsun.com>
* time/strftime.c (strftime): Use space padding for %e, %k, %l,
to match Emacs format-time-string specification.
(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.
Sat Jul 13 20:17:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
between MAP and its deps.
* elf/link.h: Fix decl.
* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
colon-separated list of names, map those and pass vector of ptrs as
PRELOADS list to _dl_map_object_deps.
* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
_dl_map_object_deps with empty preload list.
* elf/dl-open.c (_dl_open): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
removed.
(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
Conditionalize defn on [! MAP_ANON].
* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
on [! MAP_ANON].
* elf/rtld.c (dl_main): Likewise.
* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.
* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.
Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
* stdlib/random.c (__random): Declare as int32_t to be in sync
with declaration.
* socket/Makefile (headers): Add socketbits.h.
* misc/mntent.c (endmntent): Allow for NULL stream. SunOS does
it that way.
* grp/initgroups.c (initgroups): Add groups that user is a member
of, not the ones he is _not_ a member of.
* nss/nsswitch.c (known_compare): Make known_compare() a static
instead of a local function. The latter are difficult to debug
and slow to execute on certain platforms.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
place of sizeof (dev). The size of a literal string includes the
NUL byte.
* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.
Thu Jul 11 16:59:10 1996 David Mosberger-Tang <davidm@azstarnet.com>
* misc/mntent.c (addmntent): Seek to end of file before writing
entry. Return 1 on error, not -1.
Tue Jul 9 19:08:05 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
syscall.
Fri Jul 5 18:44:55 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
shift amount for Jensen must be 5 not 4.
Sat Jul 13 20:04:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* socket/sys/socket.h (struct osockaddr): New type.
Sat Jul 13 03:50:53 1996 Ulrich Drepper <drepper@cygnus.com>
* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
and `long double' versions can be generated.
* misc/qefgcvt.c, misc/qefgcvt_r.c: New files. Define macros
so that included efgcvt{,_r}.c file generate `long double'
versions.
* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
functions.
* manual/startup.texi: Document new getsubopt function.
* manual/examples/subopt.c: New example program for documenting
getsubopt function.
Fri Jul 12 23:58:37 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/Makefile (routines): Add getsubopt.
* stdlib/stdlib.h: Add prototype for getsubopt.
* stdlib/getsubopt.c: New file. Implement getsubopt function
to handle suboption parsing.
1996-07-14 06:04:09 +00:00
|
|
|
* Standard Environment:: These environment variables have
|
1997-08-20 03:53:21 +00:00
|
|
|
standard interpretations.
|
1995-02-18 01:27:10 +00:00
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Environment Access
|
|
|
|
@subsection Environment Access
|
|
|
|
@cindex environment access
|
|
|
|
@cindex environment representation
|
|
|
|
|
|
|
|
The value of an environment variable can be accessed with the
|
|
|
|
@code{getenv} function. This is declared in the header file
|
2012-07-25 17:46:22 +00:00
|
|
|
@file{stdlib.h}.
|
1995-02-18 01:27:10 +00:00
|
|
|
@pindex stdlib.h
|
|
|
|
|
2012-07-25 17:46:22 +00:00
|
|
|
Libraries should use @code{secure_getenv} instead of @code{getenv}, so
|
|
|
|
that they do not accidentally use untrusted environment variables.
|
|
|
|
Modifications of environment variables are not allowed in
|
|
|
|
multi-threaded programs. The @code{getenv} and @code{secure_getenv}
|
|
|
|
functions can be safely used in multi-threaded programs.
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypefun {char *} getenv (const char *@var{name})
|
|
|
|
This function returns a string that is the value of the environment
|
|
|
|
variable @var{name}. You must not modify this string. In some non-Unix
|
2012-02-28 14:44:20 +00:00
|
|
|
systems not using @theglibc{}, it might be overwritten by subsequent
|
1995-02-18 01:27:10 +00:00
|
|
|
calls to @code{getenv} (but not by any other library function). If the
|
|
|
|
environment variable @var{name} is not defined, the value is a null
|
|
|
|
pointer.
|
|
|
|
@end deftypefun
|
|
|
|
|
2012-07-25 17:46:22 +00:00
|
|
|
@comment stdlib.h
|
|
|
|
@comment GNU
|
|
|
|
@deftypefun {char *} secure_getenv (const char *@var{name})
|
|
|
|
This function is similar to @code{getenv}, but it returns a null
|
|
|
|
pointer if the environment is untrusted. This happens when the
|
|
|
|
program file has SUID or SGID bits set. General-purpose libraries
|
|
|
|
should always prefer this function over @code{getenv} to avoid
|
|
|
|
vulnerabilities if the library is referenced from a SUID/SGID program.
|
|
|
|
|
|
|
|
This function is a GNU extension.
|
|
|
|
@end deftypefun
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment SVID
|
2000-04-18 17:34:56 +00:00
|
|
|
@deftypefun int putenv (char *@var{string})
|
1995-02-18 01:27:10 +00:00
|
|
|
The @code{putenv} function adds or removes definitions from the environment.
|
|
|
|
If the @var{string} is of the form @samp{@var{name}=@var{value}}, the
|
|
|
|
definition is added to the environment. Otherwise, the @var{string} is
|
|
|
|
interpreted as the name of an environment variable, and any definition
|
|
|
|
for this variable in the environment is removed.
|
|
|
|
|
2012-04-08 17:43:41 +00:00
|
|
|
If the function is successful it returns @code{0}. Otherwise the return
|
|
|
|
value is nonzero and @code{errno} is set to indicate the error.
|
|
|
|
|
1999-07-30 06:32:48 +00:00
|
|
|
The difference to the @code{setenv} function is that the exact string
|
|
|
|
given as the parameter @var{string} is put into the environment. If the
|
|
|
|
user should change the string after the @code{putenv} call this will
|
|
|
|
reflect in automatically in the environment. This also requires that
|
|
|
|
@var{string} is no automatic variable which scope is left before the
|
2000-08-08 22:43:16 +00:00
|
|
|
variable is removed from the environment. The same applies of course to
|
|
|
|
dynamically allocated variables which are freed later.
|
1999-07-30 06:32:48 +00:00
|
|
|
|
1997-08-20 03:53:21 +00:00
|
|
|
This function is part of the extended Unix interface. Since it was also
|
|
|
|
available in old SVID libraries you should define either
|
|
|
|
@var{_XOPEN_SOURCE} or @var{_SVID_SOURCE} before including any header.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment BSD
|
|
|
|
@deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace})
|
|
|
|
The @code{setenv} function can be used to add a new definition to the
|
|
|
|
environment. The entry with the name @var{name} is replaced by the
|
|
|
|
value @samp{@var{name}=@var{value}}. Please note that this is also true
|
1999-07-30 06:32:48 +00:00
|
|
|
if @var{value} is the empty string. To do this a new string is created
|
|
|
|
and the strings @var{name} and @var{value} are copied. A null pointer
|
|
|
|
for the @var{value} parameter is illegal. If the environment already
|
|
|
|
contains an entry with key @var{name} the @var{replace} parameter
|
|
|
|
controls the action. If replace is zero, nothing happens. Otherwise
|
|
|
|
the old entry is replaced by the new one.
|
1997-08-20 03:53:21 +00:00
|
|
|
|
|
|
|
Please note that you cannot remove an entry completely using this function.
|
|
|
|
|
2012-04-08 17:43:41 +00:00
|
|
|
If the function is successful it returns @code{0}. Otherwise the
|
|
|
|
environment is unchanged and the return value is @code{-1} and
|
|
|
|
@code{errno} is set.
|
|
|
|
|
2001-01-27 08:32:08 +00:00
|
|
|
This function was originally part of the BSD library but is now part of
|
|
|
|
the Unix standard.
|
1997-08-20 03:53:21 +00:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment BSD
|
2001-01-27 08:32:08 +00:00
|
|
|
@deftypefun int unsetenv (const char *@var{name})
|
1997-08-20 03:53:21 +00:00
|
|
|
Using this function one can remove an entry completely from the
|
|
|
|
environment. If the environment contains an entry with the key
|
|
|
|
@var{name} this whole entry is removed. A call to this function is
|
|
|
|
equivalent to a call to @code{putenv} when the @var{value} part of the
|
|
|
|
string is empty.
|
|
|
|
|
2001-01-27 08:32:08 +00:00
|
|
|
The function return @code{-1} if @var{name} is a null pointer, points to
|
|
|
|
an empty string, or points to a string containing a @code{=} character.
|
|
|
|
It returns @code{0} if the call succeeded.
|
|
|
|
|
2001-05-27 07:05:32 +00:00
|
|
|
This function was originally part of the BSD library but is now part of
|
2001-01-27 08:32:08 +00:00
|
|
|
the Unix standard. The BSD version had no return value, though.
|
1997-08-20 03:53:21 +00:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
There is one more function to modify the whole environment. This
|
|
|
|
function is said to be used in the POSIX.9 (POSIX bindings for Fortran
|
|
|
|
77) and so one should expect it did made it into POSIX.1. But this
|
|
|
|
never happened. But we still provide this function as a GNU extension
|
|
|
|
to enable writing standard compliant Fortran environments.
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment GNU
|
|
|
|
@deftypefun int clearenv (void)
|
|
|
|
The @code{clearenv} function removes all entries from the environment.
|
|
|
|
Using @code{putenv} and @code{setenv} new entries can be added again
|
|
|
|
later.
|
|
|
|
|
|
|
|
If the function is successful it returns @code{0}. Otherwise the return
|
|
|
|
value is nonzero.
|
1995-02-18 01:27:10 +00:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
|
|
|
You can deal directly with the underlying representation of environment
|
|
|
|
objects to add more variables to the environment (for example, to
|
1998-11-16 12:02:08 +00:00
|
|
|
communicate with another program you are about to execute;
|
|
|
|
@pxref{Executing a File}).
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@comment unistd.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypevar {char **} environ
|
|
|
|
The environment is represented as an array of strings. Each string is
|
|
|
|
of the format @samp{@var{name}=@var{value}}. The order in which
|
|
|
|
strings appear in the environment is not significant, but the same
|
|
|
|
@var{name} must not appear more than once. The last element of the
|
|
|
|
array is a null pointer.
|
|
|
|
|
|
|
|
This variable is declared in the header file @file{unistd.h}.
|
|
|
|
|
|
|
|
If you just want to get the value of an environment variable, use
|
|
|
|
@code{getenv}.
|
|
|
|
@end deftypevar
|
|
|
|
|
2012-03-08 01:27:38 +00:00
|
|
|
Unix systems, and @gnusystems{}, pass the initial value of
|
1995-02-18 01:27:10 +00:00
|
|
|
@code{environ} as the third argument to @code{main}.
|
|
|
|
@xref{Program Arguments}.
|
|
|
|
|
|
|
|
@node Standard Environment
|
|
|
|
@subsection Standard Environment Variables
|
|
|
|
@cindex standard environment variables
|
|
|
|
|
|
|
|
These environment variables have standard meanings. This doesn't mean
|
|
|
|
that they are always present in the environment; but if these variables
|
|
|
|
@emph{are} present, they have these meanings. You shouldn't try to use
|
|
|
|
these environment variable names for some other purpose.
|
|
|
|
|
|
|
|
@comment Extra blank lines make it look better.
|
|
|
|
@table @code
|
|
|
|
@item HOME
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{HOME} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
@cindex home directory
|
|
|
|
|
|
|
|
This is a string representing the user's @dfn{home directory}, or
|
|
|
|
initial default working directory.
|
|
|
|
|
|
|
|
The user can set @code{HOME} to any value.
|
|
|
|
If you need to make sure to obtain the proper home directory
|
|
|
|
for a particular user, you should not use @code{HOME}; instead,
|
|
|
|
look up the user's name in the user database (@pxref{User Database}).
|
|
|
|
|
|
|
|
For most purposes, it is better to use @code{HOME}, precisely because
|
|
|
|
this lets the user specify the value.
|
|
|
|
|
|
|
|
@c !!! also USER
|
|
|
|
@item LOGNAME
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LOGNAME} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This is the name that the user used to log in. Since the value in the
|
|
|
|
environment can be tweaked arbitrarily, this is not a reliable way to
|
2000-05-04 02:46:54 +00:00
|
|
|
identify the user who is running a program; a function like
|
1995-02-18 01:27:10 +00:00
|
|
|
@code{getlogin} (@pxref{Who Logged In}) is better for that purpose.
|
|
|
|
|
|
|
|
For most purposes, it is better to use @code{LOGNAME}, precisely because
|
|
|
|
this lets the user specify the value.
|
|
|
|
|
|
|
|
@item PATH
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{PATH} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
A @dfn{path} is a sequence of directory names which is used for
|
|
|
|
searching for a file. The variable @code{PATH} holds a path used
|
|
|
|
for searching for programs to be run.
|
|
|
|
|
|
|
|
The @code{execlp} and @code{execvp} functions (@pxref{Executing a File})
|
|
|
|
use this environment variable, as do many shells and other utilities
|
|
|
|
which are implemented in terms of those functions.
|
|
|
|
|
|
|
|
The syntax of a path is a sequence of directory names separated by
|
1996-05-21 21:35:56 +00:00
|
|
|
colons. An empty string instead of a directory name stands for the
|
1995-02-18 01:27:10 +00:00
|
|
|
current directory (@pxref{Working Directory}).
|
|
|
|
|
|
|
|
A typical value for this environment variable might be a string like:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
:/bin:/etc:/usr/bin:/usr/new/X11:/usr/new:/usr/local/bin
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
This means that if the user tries to execute a program named @code{foo},
|
|
|
|
the system will look for files named @file{foo}, @file{/bin/foo},
|
|
|
|
@file{/etc/foo}, and so on. The first of these files that exists is
|
|
|
|
the one that is executed.
|
|
|
|
|
|
|
|
@c !!! also TERMCAP
|
|
|
|
@item TERM
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{TERM} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies the kind of terminal that is receiving program output.
|
|
|
|
Some programs can make use of this information to take advantage of
|
|
|
|
special escape sequences or terminal modes supported by particular kinds
|
|
|
|
of terminals. Many programs which use the termcap library
|
|
|
|
(@pxref{Finding a Terminal Description,Find,,termcap,The Termcap Library
|
|
|
|
Manual}) use the @code{TERM} environment variable, for example.
|
|
|
|
|
|
|
|
@item TZ
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{TZ} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies the time zone. @xref{TZ Variable}, for information about
|
|
|
|
the format of this string and how it is used.
|
|
|
|
|
|
|
|
@item LANG
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LANG} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies the default locale to use for attribute categories where
|
|
|
|
neither @code{LC_ALL} nor the specific environment variable for that
|
|
|
|
category is set. @xref{Locales}, for more information about
|
|
|
|
locales.
|
|
|
|
|
|
|
|
@ignore
|
|
|
|
@c I doubt this really exists
|
|
|
|
@item LC_ALL
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_ALL} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This is similar to the @code{LANG} environment variable. However, its
|
|
|
|
value takes precedence over any values provided for the individual
|
|
|
|
attribute category environment variables, or for the @code{LANG}
|
|
|
|
environment variable.
|
|
|
|
@end ignore
|
|
|
|
|
1997-08-20 03:53:21 +00:00
|
|
|
@item LC_ALL
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_ALL} environment variable
|
1997-08-20 03:53:21 +00:00
|
|
|
|
|
|
|
If this environment variable is set it overrides the selection for all
|
|
|
|
the locales done using the other @code{LC_*} environment variables. The
|
|
|
|
value of the other @code{LC_*} environment variables is simply ignored
|
|
|
|
in this case.
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@item LC_COLLATE
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_COLLATE} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for string sorting.
|
|
|
|
|
|
|
|
@item LC_CTYPE
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_CTYPE} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for character sets and character
|
|
|
|
classification.
|
|
|
|
|
1997-08-20 03:53:21 +00:00
|
|
|
@item LC_MESSAGES
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_MESSAGES} environment variable
|
1997-08-20 03:53:21 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for printing messages and to parse
|
1997-10-15 05:34:02 +00:00
|
|
|
responses.
|
1997-08-20 03:53:21 +00:00
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@item LC_MONETARY
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_MONETARY} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for formatting monetary values.
|
|
|
|
|
|
|
|
@item LC_NUMERIC
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_NUMERIC} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for formatting numbers.
|
|
|
|
|
|
|
|
@item LC_TIME
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{LC_TIME} environment variable
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
This specifies what locale to use for formatting date/time values.
|
|
|
|
|
1997-08-20 03:53:21 +00:00
|
|
|
@item NLSPATH
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{NLSPATH} environment variable
|
1997-08-20 03:53:21 +00:00
|
|
|
|
|
|
|
This specifies the directories in which the @code{catopen} function
|
|
|
|
looks for message translation catalogs.
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@item _POSIX_OPTION_ORDER
|
1998-03-19 14:32:08 +00:00
|
|
|
@cindex @code{_POSIX_OPTION_ORDER} environment variable.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
If this environment variable is defined, it suppresses the usual
|
1997-06-05 11:28:54 +00:00
|
|
|
reordering of command line arguments by @code{getopt} and
|
|
|
|
@code{argp_parse}. @xref{Argument Syntax}.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@c !!! GNU also has COREFILE, CORESERVER, EXECSERVERS
|
|
|
|
@end table
|
|
|
|
|
2012-05-20 17:34:00 +00:00
|
|
|
@node Auxiliary Vector
|
|
|
|
@section Auxiliary Vector
|
|
|
|
@cindex auxiliary vector
|
|
|
|
|
|
|
|
When a program is executed, it receives information from the operating
|
|
|
|
system about the environment in which it is operating. The form of this
|
|
|
|
information is a table of key-value pairs, where the keys are from the
|
|
|
|
set of @samp{AT_} values in @file{elf.h}. Some of the data is provided
|
|
|
|
by the kernel for libc consumption, and may be obtained by ordinary
|
|
|
|
interfaces, such as @code{sysconf}. However, on a platform-by-platform
|
|
|
|
basis there may be information that is not available any other way.
|
|
|
|
|
|
|
|
@subsection Definition of @code{getauxval}
|
|
|
|
@comment sys/auxv.h
|
|
|
|
@deftypefun {unsigned long int} getauxval (unsigned long int @var{type})
|
|
|
|
This function is used to inquire about the entries in the auxiliary
|
|
|
|
vector. The @var{type} argument should be one of the @samp{AT_} symbols
|
|
|
|
defined in @file{elf.h}. If a matching entry is found, the value is
|
|
|
|
returned; if the entry is not found, zero is returned.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
For some platforms, the key @code{AT_HWCAP} is the easiest way to inquire
|
|
|
|
about any instruction set extensions available at runtime. In this case,
|
|
|
|
there will (of necessity) be a platform-specific set of @samp{HWCAP_}
|
|
|
|
values masked together that describe the capabilities of the cpu on which
|
|
|
|
the program is being executed.
|
|
|
|
|
2000-05-04 02:46:54 +00:00
|
|
|
@node System Calls
|
|
|
|
@section System Calls
|
|
|
|
|
|
|
|
@cindex system call
|
|
|
|
A system call is a request for service that a program makes of the
|
|
|
|
kernel. The service is generally something that only the kernel has
|
|
|
|
the privilege to do, such as doing I/O. Programmers don't normally
|
|
|
|
need to be concerned with system calls because there are functions in
|
2012-02-28 14:44:20 +00:00
|
|
|
@theglibc{} to do virtually everything that system calls do.
|
2000-05-04 02:46:54 +00:00
|
|
|
These functions work by making system calls themselves. For example,
|
2000-08-08 22:43:16 +00:00
|
|
|
there is a system call that changes the permissions of a file, but
|
2012-02-28 14:44:20 +00:00
|
|
|
you don't need to know about it because you can just use @theglibc{}'s
|
|
|
|
@code{chmod} function.
|
2000-05-04 02:46:54 +00:00
|
|
|
|
|
|
|
@cindex kernel call
|
|
|
|
System calls are sometimes called kernel calls.
|
|
|
|
|
|
|
|
However, there are times when you want to make a system call explicitly,
|
2012-02-28 14:44:20 +00:00
|
|
|
and for that, @theglibc{} provides the @code{syscall} function.
|
2000-05-04 02:46:54 +00:00
|
|
|
@code{syscall} is harder to use and less portable than functions like
|
|
|
|
@code{chmod}, but easier and more portable than coding the system call
|
|
|
|
in assembler instructions.
|
|
|
|
|
|
|
|
@code{syscall} is most useful when you are working with a system call
|
2012-02-28 14:44:20 +00:00
|
|
|
which is special to your system or is newer than @theglibc{} you
|
2000-05-04 02:46:54 +00:00
|
|
|
are using. @code{syscall} is implemented in an entirely generic way;
|
|
|
|
the function does not know anything about what a particular system
|
|
|
|
call does or even if it is valid.
|
|
|
|
|
|
|
|
The description of @code{syscall} in this section assumes a certain
|
2012-02-28 14:44:20 +00:00
|
|
|
protocol for system calls on the various platforms on which @theglibc{}
|
|
|
|
runs. That protocol is not defined by any strong authority, but
|
2000-05-04 02:46:54 +00:00
|
|
|
we won't describe it here either because anyone who is coding
|
|
|
|
@code{syscall} probably won't accept anything less than kernel and C
|
|
|
|
library source code as a specification of the interface between them
|
|
|
|
anyway.
|
|
|
|
|
|
|
|
|
|
|
|
@code{syscall} is declared in @file{unistd.h}.
|
|
|
|
|
|
|
|
@comment unistd.h
|
|
|
|
@comment ???
|
2012-02-17 17:44:38 +00:00
|
|
|
@deftypefun {long int} syscall (long int @var{sysno}, @dots{})
|
2000-05-04 02:46:54 +00:00
|
|
|
|
|
|
|
@code{syscall} performs a generic system call.
|
|
|
|
|
|
|
|
@cindex system call number
|
|
|
|
@var{sysno} is the system call number. Each kind of system call is
|
|
|
|
identified by a number. Macros for all the possible system call numbers
|
|
|
|
are defined in @file{sys/syscall.h}
|
|
|
|
|
|
|
|
The remaining arguments are the arguments for the system call, in
|
|
|
|
order, and their meanings depend on the kind of system call. Each kind
|
|
|
|
of system call has a definite number of arguments, from zero to five.
|
|
|
|
If you code more arguments than the system call takes, the extra ones to
|
|
|
|
the right are ignored.
|
|
|
|
|
|
|
|
The return value is the return value from the system call, unless the
|
|
|
|
system call failed. In that case, @code{syscall} returns @code{-1} and
|
|
|
|
sets @code{errno} to an error code that the system call returned. Note
|
|
|
|
that system calls do not return @code{-1} when they succeed.
|
|
|
|
@cindex errno
|
|
|
|
|
|
|
|
If you specify an invalid @var{sysno}, @code{syscall} returns @code{-1}
|
|
|
|
with @code{errno} = @code{ENOSYS}.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
2002-06-30 04:04:20 +00:00
|
|
|
@dots{}
|
2000-05-04 02:46:54 +00:00
|
|
|
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
rc = syscall(SYS_chmod, "/etc/passwd", 0444);
|
|
|
|
|
2000-08-08 22:43:16 +00:00
|
|
|
if (rc == -1)
|
2000-05-04 02:46:54 +00:00
|
|
|
fprintf(stderr, "chmod failed, errno = %d\n", errno);
|
|
|
|
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
This, if all the compatibility stars are aligned, is equivalent to the
|
|
|
|
following preferable code:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
2002-06-30 04:04:20 +00:00
|
|
|
@dots{}
|
2000-05-04 02:46:54 +00:00
|
|
|
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
rc = chmod("/etc/passwd", 0444);
|
|
|
|
if (rc == -1)
|
|
|
|
fprintf(stderr, "chmod failed, errno = %d\n", errno);
|
|
|
|
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@node Program Termination
|
|
|
|
@section Program Termination
|
|
|
|
@cindex program termination
|
|
|
|
@cindex process termination
|
|
|
|
|
|
|
|
@cindex exit status value
|
|
|
|
The usual way for a program to terminate is simply for its @code{main}
|
|
|
|
function to return. The @dfn{exit status value} returned from the
|
|
|
|
@code{main} function is used to report information back to the process's
|
|
|
|
parent process or shell.
|
|
|
|
|
|
|
|
A program can also terminate normally by calling the @code{exit}
|
|
|
|
function.
|
|
|
|
|
|
|
|
In addition, programs can be terminated by signals; this is discussed in
|
|
|
|
more detail in @ref{Signal Handling}. The @code{abort} function causes
|
|
|
|
a signal that kills the program.
|
|
|
|
|
|
|
|
@menu
|
|
|
|
* Normal Termination:: If a program calls @code{exit}, a
|
|
|
|
process terminates normally.
|
1996-05-21 21:35:56 +00:00
|
|
|
* Exit Status:: The @code{exit status} provides information
|
|
|
|
about why the process terminated.
|
1995-02-18 01:27:10 +00:00
|
|
|
* Cleanups on Exit:: A process can run its own cleanup
|
1996-05-21 21:35:56 +00:00
|
|
|
functions upon normal termination.
|
1995-02-18 01:27:10 +00:00
|
|
|
* Aborting a Program:: The @code{abort} function causes
|
1996-05-21 21:35:56 +00:00
|
|
|
abnormal program termination.
|
1995-02-18 01:27:10 +00:00
|
|
|
* Termination Internals:: What happens when a process terminates.
|
|
|
|
@end menu
|
|
|
|
|
|
|
|
@node Normal Termination
|
|
|
|
@subsection Normal Termination
|
|
|
|
|
2000-05-04 02:46:54 +00:00
|
|
|
A process terminates normally when its program signals it is done by
|
|
|
|
calling @code{exit}. Returning from @code{main} is equivalent to
|
|
|
|
calling @code{exit}, and the value that @code{main} returns is used as
|
|
|
|
the argument to @code{exit}.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypefun void exit (int @var{status})
|
2000-05-04 02:46:54 +00:00
|
|
|
The @code{exit} function tells the system that the program is done, which
|
|
|
|
causes it to terminate the process.
|
|
|
|
|
|
|
|
@var{status} is the program's exit status, which becomes part of the
|
|
|
|
process' termination status. This function does not return.
|
1995-02-18 01:27:10 +00:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
Normal termination causes the following actions:
|
|
|
|
|
|
|
|
@enumerate
|
1996-05-21 21:35:56 +00:00
|
|
|
@item
|
1995-02-18 01:27:10 +00:00
|
|
|
Functions that were registered with the @code{atexit} or @code{on_exit}
|
|
|
|
functions are called in the reverse order of their registration. This
|
|
|
|
mechanism allows your application to specify its own ``cleanup'' actions
|
|
|
|
to be performed at program termination. Typically, this is used to do
|
|
|
|
things like saving program state information in a file, or unlocking
|
|
|
|
locks in shared data bases.
|
|
|
|
|
1996-05-21 21:35:56 +00:00
|
|
|
@item
|
1995-02-18 01:27:10 +00:00
|
|
|
All open streams are closed, writing out any buffered output data. See
|
|
|
|
@ref{Closing Streams}. In addition, temporary files opened
|
|
|
|
with the @code{tmpfile} function are removed; see @ref{Temporary Files}.
|
|
|
|
|
1996-05-21 21:35:56 +00:00
|
|
|
@item
|
1995-02-18 01:27:10 +00:00
|
|
|
@code{_exit} is called, terminating the program. @xref{Termination Internals}.
|
|
|
|
@end enumerate
|
|
|
|
|
|
|
|
@node Exit Status
|
|
|
|
@subsection Exit Status
|
|
|
|
@cindex exit status
|
|
|
|
|
|
|
|
When a program exits, it can return to the parent process a small
|
|
|
|
amount of information about the cause of termination, using the
|
|
|
|
@dfn{exit status}. This is a value between 0 and 255 that the exiting
|
|
|
|
process passes as an argument to @code{exit}.
|
|
|
|
|
|
|
|
Normally you should use the exit status to report very broad information
|
|
|
|
about success or failure. You can't provide a lot of detail about the
|
|
|
|
reasons for the failure, and most parent processes would not want much
|
|
|
|
detail anyway.
|
|
|
|
|
|
|
|
There are conventions for what sorts of status values certain programs
|
|
|
|
should return. The most common convention is simply 0 for success and 1
|
|
|
|
for failure. Programs that perform comparison use a different
|
|
|
|
convention: they use status 1 to indicate a mismatch, and status 2 to
|
|
|
|
indicate an inability to compare. Your program should follow an
|
|
|
|
existing convention if an existing convention makes sense for it.
|
|
|
|
|
|
|
|
A general convention reserves status values 128 and up for special
|
|
|
|
purposes. In particular, the value 128 is used to indicate failure to
|
|
|
|
execute another program in a subprocess. This convention is not
|
|
|
|
universally obeyed, but it is a good idea to follow it in your programs.
|
|
|
|
|
|
|
|
@strong{Warning:} Don't try to use the number of errors as the exit
|
|
|
|
status. This is actually not very useful; a parent process would
|
|
|
|
generally not care how many errors occurred. Worse than that, it does
|
|
|
|
not work, because the status value is truncated to eight bits.
|
|
|
|
Thus, if the program tried to report 256 errors, the parent would
|
|
|
|
receive a report of 0 errors---that is, success.
|
|
|
|
|
|
|
|
For the same reason, it does not work to use the value of @code{errno}
|
|
|
|
as the exit status---these can exceed 255.
|
|
|
|
|
|
|
|
@strong{Portability note:} Some non-POSIX systems use different
|
|
|
|
conventions for exit status values. For greater portability, you can
|
|
|
|
use the macros @code{EXIT_SUCCESS} and @code{EXIT_FAILURE} for the
|
|
|
|
conventional status value for success and failure, respectively. They
|
|
|
|
are declared in the file @file{stdlib.h}.
|
|
|
|
@pindex stdlib.h
|
|
|
|
|
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypevr Macro int EXIT_SUCCESS
|
|
|
|
This macro can be used with the @code{exit} function to indicate
|
|
|
|
successful program completion.
|
|
|
|
|
|
|
|
On POSIX systems, the value of this macro is @code{0}. On other
|
|
|
|
systems, the value might be some other (possibly non-constant) integer
|
|
|
|
expression.
|
|
|
|
@end deftypevr
|
|
|
|
|
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypevr Macro int EXIT_FAILURE
|
|
|
|
This macro can be used with the @code{exit} function to indicate
|
|
|
|
unsuccessful program completion in a general sense.
|
|
|
|
|
|
|
|
On POSIX systems, the value of this macro is @code{1}. On other
|
|
|
|
systems, the value might be some other (possibly non-constant) integer
|
1997-03-09 06:16:49 +00:00
|
|
|
expression. Other nonzero status values also indicate failures. Certain
|
1995-02-18 01:27:10 +00:00
|
|
|
programs use different nonzero status values to indicate particular
|
|
|
|
kinds of "non-success". For example, @code{diff} uses status value
|
|
|
|
@code{1} to mean that the files are different, and @code{2} or more to
|
|
|
|
mean that there was difficulty in opening the files.
|
|
|
|
@end deftypevr
|
|
|
|
|
2000-05-04 02:46:54 +00:00
|
|
|
Don't confuse a program's exit status with a process' termination status.
|
2012-02-17 01:23:04 +00:00
|
|
|
There are lots of ways a process can terminate besides having its program
|
2000-05-04 02:46:54 +00:00
|
|
|
finish. In the event that the process termination @emph{is} caused by program
|
[BZ #2510, BZ #2830, BZ #3137, BZ #3313, BZ #3426, BZ #3465, BZ #3480, BZ #3483, BZ #3493, BZ #3514, BZ #3515, BZ #3664, BZ #3673, BZ #3674]
2007-01-11 Jakub Jelinek <jakub@redhat.com>
* sysdeps/i386/soft-fp/sfp-machine.h: Remove.
* sysdeps/x86_64/soft-fp/sfp-machine.h: Likewise.
2007-01-10 Ulrich Drepper <drepper@redhat.com>
* io/fts.c: Make sure fts_cur is always valid after return from
fts_read.
Patch by Miloslav Trmac <mitr@redhat.com>.
2006-10-27 Richard Sandiford <richard@codesourcery.com>
* elf/elf.h (R_MIPS_GLOB_DAT): Define.
(R_MIPS_NUM): Bump by 1.
2007-01-03 Jakub Jelinek <jakub@redhat.com>
* posix/execvp.c: Include alloca.h.
(allocate_scripts_argv): Renamed to...
(scripts_argv): ... this. Don't allocate buffer here nor count
arguments.
(execvp): Use alloca if possible.
* posix/Makefile: Add rules to build and run tst-vfork3 test.
* posix/tst-vfork3.c: New test.
* stdlib/Makefile (tst-strtod3-ENV): Define.
2007-01-02 Ulrich Drepper <drepper@redhat.com>
* posix/getconf.c: Update copyright year.
* nss/getent.c: Likewise.
* iconv/iconvconfig.c: Likewise.
* iconv/iconv_prog.c: Likewise.
* elf/ldconfig.c: Likewise.
* catgets/gencat.c: Likewise.
* csu/version.c: Likewise.
* elf/ldd.bash.in: Likewise.
* elf/sprof.c (print_version): Likewise.
* locale/programs/locale.c: Likewise.
* locale/programs/localedef.c: Likewise.
* nscd/nscd.c (print_version): Likewise.
* debug/xtrace.sh: Likewise.
* malloc/memusage.sh: Likewise.
* malloc/mtrace.pl: Likewise.
* debug/catchsegv.sh: Likewise.
2006-12-24 Ulrich Drepper <drepper@redhat.com>
* malloc/malloc.c (sYSMALLOc): Remove some unnecessary alignment
attempts.
2006-12-23 Ulrich Drepper <drepper@redhat.com>
* posix/wordexp.c: Remove some unnecessary tests.
2006-12-20 SUGIOKA Toshinobu <sugioka@itonet.co.jp>
* sysdeps/unix/sysv/linux/sh/bits/shm.h: New file.
* nss/getXXbyYY_r.c: Include atomic.h.
(INTERNAL (REENTRANT_NAME)): Write startp after start_fct,
add atomic_write_barrier () in between.
2006-11-28 Jakub Jelinek <jakub@redhat.com>
* elf/dl-support.c: Include dl-procinfo.h.
* sysdeps/powerpc/dl-procinfo.h (PPC_PLATFORM_POWER4,
PPC_PLATFORM_PPC970, PPC_PLATFORM_POWER5, PPC_PLATFORM_POWER5_PLUS,
PPC_PLATFORM_POWER6, PPC_PLATFORM_CELL_BE, PPC_PLATFORM_POWER6X):
Define.
(_dl_string_platform): Use PPC_PLATFORM_* macros instead of
hardcoded constants.
* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platform): Use
PPC_PLATFORM_* macros for array designators.
2006-11-11 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add 3 new cap
names to the beginning.
(_dl_powerpc_platforms): Add "power6x".
* sysdeps/powerpc/dl-procinfo.h (_DL_HWCAP_FIRST): Decrease.
(HWCAP_IMPORTANT): Add PPC_FEATURE_HAS_DFP.
(_DL_PLATFORMS_COUNT): Increase.
(_dl_string_platform): Handle power6x case.
* sysdeps/powerpc/sysdep.h (PPC_FEATURE_PA6T, PPC_FEATURE_HAS_DFP,
PPC_FEATURE_POWER6_EXT): Define.
(PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS): Correct Comment.
[-2^31 .. 2^31) range.
* sysdeps/unix/sysv/linux/bits/statvfs.h: Define ST_RELATIME.
* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
Handle relatime mount option.
2006-12-13 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Include
kernel-features.h.
2006-12-11 Ulrich Drepper <drepper@redhat.com>
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Parse thousand
separators also if no non-zero digits found.
* stdlib/Makefile (tests): Add tst-strtod3.
[BZ #3664]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix test to recognize
empty parsed strings.
* stdlib/Makefile (tests): Add tst-strtod2.
* stdlib/tst-strtod2.c: New file.
[BZ #3673]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix exp_limit
computation.
* stdlib/Makefile (tests): Add tst-atof2.
* stdlib/tst-atof2.c: New file.
[BZ #3674]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Adjust exponent value
correctly if removing trailing zero of hex-float.
* stdlib/Makefile (tests): Add tst-atof1.
* stdlib/tst-atof1.c: New file.
* misc/mntent_r.c (__hasmntopt): Check p[optlen] even when p == rest.
Start searching for next comma at p rather than rest.
* misc/Makefile (tests): Add tst-mntent2.
* misc/tst-mntent2.c: New test.
2006-12-08 Ulrich Drepper <drepper@redhat.com>
* malloc/memusage.c: Handle realloc with new size of zero and
non-NULL pointer correctly.
(me): Really write first record twice.
(struct entry): Make format bi-arch safe.
(dest): Write out more realloc statistics.
* malloc/memusagestat.c (struct entry): Make format bi-arch safe.
2006-12-05 Jakub Jelinek <jakub@redhat.com>
* nis/nis_subr.c (nis_getnames): Revert last change.
2006-12-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/sys/io.h: Removed.
2006-11-30 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/i386/i686/memcmp.S: Use jump table as the base of
jump table entries.
2006-11-30 Jan Kratochvil <jan.kratochvil@redhat.com>
* sysdeps/unix/sysv/linux/i386/clone.S: Provide CFI for the outermost
`clone' function to ensure proper unwinding stop of gdb.
* sysdeps/unix/sysv/linux/x86_64/clone.S: Likewise.
2006-12-01 Ulrich Drepper <drepper@redhat.com>
* nscd/nscd.init: Remove obsolete and commented-out -S option
handling.
2006-11-23 Jakub Jelinek <jakub@redhat.com>
[BZ #3514]
* manual/string.texi (strncmp): Fix pastos from wcscmp description.
[BZ #3515]
* manual/string.texi (strtok): Remove duplicate paragraph.
2006-12-01 Jan Kratochvil <jan.kratochvil@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/sigaction.c: Fix compatibility with
libgcc not supporting `rflags' unwinding (register # >= 17).
2006-11-30 Jakub Jelinek <jakub@redhat.com>
* sunrpc/svc_run.c (svc_run): Set my_pollfd to new_pollfd if realloc
succeeded.
2006-11-29 Daniel Jacobowitz <dan@codesourcery.com>
Jakub Jelinek <jakub@redhat.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/sigaction.c (restore_rt): Add correct
unwind information.
* sysdeps/unix/sysv/linux/x86_64/Makefile: Provide symbols for
'restore_rt' even in the 'signal' directory.
* sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym: Extend the regs list.
malloc crashed. Don't allocate memory unnecessarily in each
loop.
2006-10-21 Jakub Jelinek <jakub@redhat.com>
* resolv/mapv4v6addr.h (map_v4v6_address): Fix last change.
2006-11-20 Ulrich Drepper <drepper@redhat.com>
* resolv/mapv4v6addr.h (map_v4v6_address): Optimize a bit.
2006-11-18 Bruno Haible <bruno@clisp.org>
* sysdeps/unix/sysv/linux/i386/getgroups.c (__getgroups): Invoke
__sysconf only after having tried to call getgroups32.
2006-11-19 Ulrich Drepper <drepper@redhat.com>
* nss/nss_files/files-hosts.c (LINE_PARSER): Support IPv6-style
addresses for IPv4 queries if they can be mapped.
2006-11-16 Jakub Jelinek <jakub@redhat.com>
* sysdeps/x86_64/fpu/s_copysignf.S (__copysignf): Switch to .text.
* sysdeps/x86_64/fpu/s_copysign.S (__copysign): Likewise.
(signmask): Add .size directive.
(othermask): Add .type directive.
2006-11-14 Ulrich Drepper <drepper@redhat.com>
* po/nl.po: Update from translation team.
* timezone/zdump.c: Redo fix for BZ #3137.
2006-11-14 Jakub Jelinek <jakub@redhat.com>
* nss/nss_files/files-alias.c (get_next_alias): Set line back
to first_unused after parsing :include: file.
* timezone/africa: Update from tzdata2006o.
* timezone/antarctica: Likewise.
* timezone/asia: Likewise.
* timezone/australasia: Likewise.
* timezone/backward: Likewise.
* timezone/europe: Likewise.
* timezone/iso3166.tab: Likewise.
* timezone/northamerica: Likewise.
* timezone/southamerica: Likewise.
* timezone/zone.tab: Likewise.
* time/tzfile.c (__tzfile_read): Extend to handle new file format
on machines with 64-bit time_t.
* timezone/checktab.awk: Update from tzcode2006o.
* timezone/ialloc.c: Likewise.
* timezone/private.h: Likewise.
* timezone/scheck.c: Likewise.
* timezone/tzfile.h: Likewise.
* timezone/tzselect.ksh: Likewise.
* timezone/zdump.c: Likewise.
* timezone/zic.c: Likewise.
[BZ #3483]
* elf/ldconfig.c (main): Call setlocale and textdomain.
Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
[BZ #3480]
* manual/argp.texi: Fix typos.
* manual/charset.texi: Likewise.
* manual/errno.texi: Likewise.
* manual/filesys.texi: Likewise.
* manual/lang.texi: Likewise.
* manual/maint.texi: Likewise.
* manual/memory.texi: Likewise.
* manual/message.texi: Likewise.
* manual/resource.texi: Likewise.
* manual/search.texi: Likewise.
* manual/signal.texi: Likewise.
* manual/startup.texi: Likewise.
* manual/stdio.texi: Likewise.
* manual/sysinfo.texi: Likewise.
* manual/syslog.texi: Likewise.
* manual/time.texi: Likewise.
Patch by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
[BZ #3465]
* sunrpc/clnt_raw.c: Minimal message improvements.
* sunrpc/pm_getmaps.c: Likewise.
* nis/nss_nisplus/nisplus-publickey.c: Likewise.
* nis/nis_print_group_entry.c: Likewise.
* locale/programs/repertoire.c: Likewise.
* locale/programs/charmap.c: Likewise.
* malloc/memusage.sh: Likewise.
* elf/dl-deps.c: Likewise.
* locale/programs/ld-collate.c: Likewise.
* libio/vswprintf.c: Likewise.
* malloc/memusagestat.c: Likewise.
* sunrpc/auth_unix.c: Likewise.
* sunrpc/rpc_main.c: Likewise.
* nscd/cache.c: Likewise.
* locale/programs/repertoire.c: Unify output messages.
* locale/programs/charmap.c: Likewise.
* locale/programs/ld-ctype.c: Likewise.
* locale/programs/ld-monetary.c: Likewise.
* locale/programs/ld-numeric.c: Likewise.
* locale/programs/ld-time.c: Likewise.
* elf/ldconfig.c: Likewise.
* nscd/selinux.c: Likewise.
* elf/cache.c: Likewise.
Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
2006-11-10 Jakub Jelinek <jakub@redhat.com>
* string/strxfrm_l.c (STRXFRM): Fix trailing \1 optimization
if N is one bigger than return value.
* string/tst-strxfrm2.c (do_test): Also test strxfrm with l1 + 1
and l1 last arguments, if buf is defined, verify the return value
equals to strlen (buf) and verify no byte beyond passed length
is modified.
2006-11-10 Ulrich Drepper <drepper@redhat.com>
* po/sv.po: Update from translation team.
* sysdeps/gnu/siglist.c (__old_sys_siglist, __old_sys_sigabbrev):
Use __new_sys_siglist instead of _sys_siglist_internal as
second macro argument.
(_old_sys_siglist): Use declare_symbol_alias macro instead of
strong_alias.
2006-11-09 Ulrich Drepper <drepper@redhat.com>
[BZ #3493]
* posix/unistd.h (sysconf): Remove const attribute.
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Fix test for
temporary or deprecated addresses.
Patch by Sridhar Samudrala <sri@us.ibm.com>.
* string/Makefile (tests): Add tst-strxfrm2.
* string/tst-strxfrm2.c: New file.
2006-10-09 Jakub Jelinek <jakub@redhat.com>
* elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0
rather than r->r_brk.
* string/strxfrm_l.c (STRXFRM): Do the trailing \1 removal
optimization even if needed > n.
2006-11-07 Jakub Jelinek <jakub@redhat.com>
* include/libc-symbols.h (declare_symbol): Rename to...
(declare_symbol_alias): ... this. Add ORIGINAL argument, imply
strong_alias (ORIGINAL, SYMBOL) in asm to make sure it preceedes
.size directive.
* sysdeps/gnu/errlist-compat.awk: Adjust for declare_symbol_alias
changes.
* sysdeps/gnu/siglist.c: Likewise.
2006-11-03 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/fpu/bits/mathinline.h
[__LIBC_INTERNAL_MATH_INLINES]: Moved to ...
* sysdeps/powerpc/fpu/math_private.h: ...here. New file.
2006-11-05 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word):
Update handling of cache descriptor 0x49 for new models.
* sysdeps/unix/sysv/linux/x86_64/sysconf.c (intel_check_word):
Likewise.
2006-11-02 Ulrich Drepper <drepper@redhat.com>
* configure.in: Work around ld --help change and avoid -z relro
test completely if the architecture doesn't care about security.
2006-11-01 Ulrich Drepper <drepper@redhat.com>
* po/sv.po: Update from translation team.
2006-10-31 Ulrich Drepper <drepper@redhat.com>
* stdlib/atexit.c (atexit): Don't mark as hidden when used to
generate compatibility version.
2006-10-29 Ulrich Drepper <drepper@redhat.com>
* configure.in: Relax -z relro requirement a bit.
* po/sv.po: Update from translation team.
2006-10-29 Jakub Jelinek <jakub@redhat.com>
* elf/dl-sym.c (do_sym): Use RTLD_SINGLE_THREAD_P.
* elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Likewise.
* elf/dl-close.c (_dl_close_worker): Likewise.
* elf/dl-open.c (_dl_open_worker): Likewise.
* sysdeps/generic/sysdep-cancel.h (RTLD_SINGLE_THREAD_P): Define.
* configure.in: Require assembler support for visibility, compiler
support for visibility and aliases, linker support for various -z
options.
* Makeconfig: Remove conditional code which now is unnecessary.
* config.h.in: Likewise.
* config.make.in: Likewise.
* dlfcn/Makefile: Likewise.
* elf/Makefile: Likewise.
* elf/dl-load.c: Likewise.
* elf/rtld.c: Likewise.
* include/libc-symbols.h: Likewise.
* include/stdio.h: Likewise.
* io/Makefile: Likewise.
* io/fstat.c: Likewise.
* io/fstat64.c: Likewise.
* io/fstatat.c: Likewise.
* io/fstatat64.c: Likewise.
* io/lstat.c: Likewise.
* io/lstat64.c: Likewise.
* io/mknod.c: Likewise.
* io/mknodat.c: Likewise.
* io/stat.c: Likewise.
* io/stat64.c: Likewise.
* libio/stdio.c: Likewise.
* nscd/Makefile: Likewise.
* stdlib/Makefile: Likewise.
* stdlib/atexit.c: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* sysdeps/i386/dl-machine.h: Likewise.
* sysdeps/i386/sysdep.h: Likewise.
* sysdeps/i386/i686/memcmp.S: Likewise.
* sysdeps/powerpc/powerpc32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sigaction.c: Likewise.
* Makerules: USE_TLS support is now default.
* tls.make.c: Likewise.
* csu/Versions: Likewise.
* csu/libc-start.c: Likewise.
* csu/libc-tls.c: Likewise.
* csu/version.c: Likewise.
* dlfcn/dlinfo.c: Likewise.
* elf/dl-addr.c: Likewise.
* elf/dl-cache.c: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-iteratephdr.c: Likewise.
* elf/dl-load.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-reloc.c: Likewise.
* elf/dl-support.c: Likewise.
* elf/dl-sym.c: Likewise.
* elf/dl-sysdep.c: Likewise.
* elf/dl-tls.c: Likewise.
* elf/ldconfig.c: Likewise.
* elf/rtld.c: Likewise.
* elf/tst-tls-dlinfo.c: Likewise.
* elf/tst-tls1.c: Likewise.
* elf/tst-tls10.h: Likewise.
* elf/tst-tls14.c: Likewise.
* elf/tst-tls2.c: Likewise.
* elf/tst-tls3.c: Likewise.
* elf/tst-tls4.c: Likewise.
* elf/tst-tls5.c: Likewise.
* elf/tst-tls6.c: Likewise.
* elf/tst-tls7.c: Likewise.
* elf/tst-tls8.c: Likewise.
* elf/tst-tls9.c: Likewise.
* elf/tst-tlsmod1.c: Likewise.
* elf/tst-tlsmod13.c: Likewise.
* elf/tst-tlsmod13a.c: Likewise.
* elf/tst-tlsmod14a.c: Likewise.
* elf/tst-tlsmod2.c: Likewise.
* elf/tst-tlsmod3.c: Likewise.
* elf/tst-tlsmod4.c: Likewise.
* elf/tst-tlsmod5.c: Likewise.
* elf/tst-tlsmod6.c: Likewise.
* include/errno.h: Likewise.
* include/link.h: Likewise.
* include/tls.h: Likewise.
* locale/global-locale.c: Likewise.
* locale/localeinfo.h: Likewise.
* malloc/arena.c: Likewise.
* malloc/hooks.c: Likewise.
* malloc/malloc.c: Likewise.
* resolv/Versions: Likewise.
* sysdeps/alpha/dl-machine.h: Likewise.
* sysdeps/alpha/libc-tls.c: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* sysdeps/generic/tls.h: Likewise.
* sysdeps/i386/dl-machine.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/ia64/libc-tls.c: Likewise.
* sysdeps/mach/hurd/fork.c: Likewise.
* sysdeps/mach/hurd/i386/tls.h: Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.c: Likwise.
* sysdeps/powerpc/powerpc32/dl-machine.h: Likewise.
* sysdeps/powerpc/powerpc64/dl-machine.h: Likewise.
* sysdeps/s390/libc-tls.c: Likewise.
* sysdeps/s390/s390-32/dl-machine.h: Likewise.
* sysdeps/s390/s390-64/dl-machine.h: Likewise.
* sysdeps/sh/dl-machine.h: Likewise.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
* sysdeps/x86_64/dl-machine.h: Likewise.
[BZ #3426]
* stdlib/stdlib.h: Adjust comment for canonicalize_file_name to
reality.
2006-10-27 Jakub Jelinek <jakub@redhat.com>
* elf/dl-lookup.c (_dl_debug_bindings): Remove unused symbol_scope
argument.
(_dl_lookup_symbol_x): Adjust caller.
* sysdeps/generic/ldsodefs.h (struct link_namespaces): Remove
_ns_global_scope.
* elf/rtld.c (dl_main): Don't initialize _ns_global_scope.
* elf/dl-libc.c: Revert l_scope name changes.
* elf/dl-load.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/rtld.c: Likewise.
* elf/dl-close.c (_dl_close): Likewise.
* elf/dl-open.c (dl_open_worker): Likewise. If not SINGLE_THREAD_P,
always use __rtld_mrlock_{change,done}. Always free old scope list
here if not l_scope_mem.
* elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Revert l_scope name
change. Never free scope list here. Just __rtld_mrlock_lock before
the lookup and __rtld_mrlock_unlock it after the lookup.
* elf/dl-sym.c: Likewise.
* include/link.h (struct r_scoperec): Remove.
(struct link_map): Replace l_scoperec with l_scope, l_scoperec_mem
with l_scope_mem and l_scoperec_lock with l_scope_lock.
2006-10-25 Ulrich Drepper <drepper@redhat.com>
* sysdeps/gnu/netinet/tcp.h: Define TCP_CONGESTION.
2006-10-18 Ulrich Drepper <drepper@redhat.com>
* configure.in: Disable building profile libraries by default.
2006-10-18 Ulrich Drepper <drepper@redhat.com>
* elf/dl-lookup.c (_dl_lookup_symbol_x): Add warning to
_dl_lookup_symbol_x code.
2006-10-17 Jakub Jelinek <jakub@redhat.com>
* elf/dl-runtime.c: Include sysdep-cancel.h.
(_dl_fixup, _dl_profile_fixup): Use __rtld_mrlock_* and
scoperec->nusers only if !SINGLE_THREAD_P. Use atomic_*
instead of catomic_* macros.
* elf/dl-sym.c: Include sysdep-cancel.h.
(do_sym): Use __rtld_mrlock_* and scoperec->nusers only
if !SINGLE_THREAD_P. Use atomic_* instead of catomic_* macros.
* elf/dl-close.c: Include sysdep-cancel.h.
(_dl_close): Use __rtld_mrlock_* and scoperec->nusers only
if !SINGLE_THREAD_P. Use atomic_* instead of catomic_* macros.
* elf/dl-open.c: Include sysdep-cancel.h.
(dl_open_worker): Use __rtld_mrlock_* and scoperec->nusers only
if !SINGLE_THREAD_P. Use atomic_* instead of catomic_* macros.
2006-10-17 Jakub Jelinek <jakub@redhat.com>
[BZ #3313]
* malloc/malloc.c (malloc_consolidate): Set maxfb to address of last
fastbin rather than end of fastbin array.
2006-10-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/i386/i486/bits/atomic.h (catomic_decrement): Use correct
body macro.
* sysdeps/x86_64/bits/atomic.h
(__arch_c_compare_and_exchange_val_64_acq): Add missing casts.
(catomic_decrement): Use correct body macro.
2006-10-17 Jakub Jelinek <jakub@redhat.com>
* include/atomic.h: Add a unique prefix to all local variables
in macros.
* csu/tst-atomic.c (do_test): Test also catomic_* macros.
2006-10-14 Ulrich Drepper <drepper@redhat.com>
* resolv/arpa/nameser.h: Document that ns_t_a6 is deprecated.
[BZ #3313]
* malloc/malloc.c (malloc_consolidate): Don't use get_fast_max to
determine highest fast bin to consolidate, always look into all of
them.
(do_check_malloc_state): Only require for empty bins for large
sizes in main arena.
* libio/stdio.h: Add more __wur attributes.
2006-11-12 Andreas Jaeger <aj@suse.de>
[BZ #2510]
* manual/search.texi (Hash Search Function): Clarify.
(Array Search Function): Clarify.
2006-11-12 Joseph Myers <joseph@codesourcery.com>
[BZ #2830]
* math/atest-exp.c (main): Cast hex value to mp_limb_t before
shifting.
* math/atest-exp2.c (read_mpn_hex): Likewise.
* math/atest-sincos.c (main): Likewise.
* sysdeps/unix/sysv/linux/syscalls.list: Add epoll_pwait.
* sysdeps/unix/sysv/linux/sys/epoll.h: Declare epoll_pwait.
* sysdeps/unix/sysv/linux/Versions (libc): Add epoll_pwait for
version GLIBC_2.6.
* Versions.def: Add GLIBC_2.6 for libc.
* sysdeps/i386/i486/bits/atomic.h: Add catomic_* support.
2006-10-11 Jakub Jelinek <jakub@redhat.com>
* malloc/malloc.c (_int_malloc): Remove unused any_larger variable.
* nis/nis_defaults.c (__nis_default_access): Don't call getenv twice.
* nis/nis_subr.c (nis_getnames): Use __secure_getenv instead of getenv.
* sysdeps/generic/unsecvars.h: Add NIS_PATH.
2006-10-11 Ulrich Drepper <drepper@redhat.com>
* include/atomic.c: Define catomic_* operations.
* sysdeps/x86_64/bits/atomic.h: Likewise. Fix a few minor problems.
* stdlib/cxa_finalize.c: Use catomic_* operations instead of atomic_*.
* malloc/memusage.c: Likewise.
* gmon/mcount.c: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-profile.c: Likewise.
* elf/dl-sym.c: Likewise.
* elf/dl-runtime.c: Likewise.
* elf/dl-fptr.c: Likewise.
* resolv/res_libc.c: Likewise.
2006-10-10 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/utimes.c: Use a union to avoid an improper cast.
* sysdeps/mach/hurd/futimes.c: Likewise.
* sysdeps/mach/hurd/lutimes.c: Likewise.
2006-10-09 Ulrich Drepper <drepper@redhat.com>
Jakub Jelinek <jakub@redhat.com>
Implement reference counting of scope records.
* elf/dl-close.c (_dl_close): Remove all scopes from removed objects
from the list in objects which remain. Always allocate new scope
record.
* elf/dl-open.c (dl_open_worker): When growing array for scopes,
don't resize, allocate a new one.
* elf/dl-runtime.c: Update reference counters before using a scope
array.
* elf/dl-sym.c: Likewise.
* elf/dl-libc.c: Adjust for l_scope name change.
* elf/dl-load.c: Likewise.
* elf/dl-object.c: Likewise.
* elf/rtld.c: Likewise.
* include/link.h: Include <rtld-lowlevel.h>. Define struct
r_scoperec. Replace r_scope with pointer to r_scoperec structure.
Add l_scoperec_lock.
* sysdeps/generic/ldsodefs.h: Include <rtld-lowlevel.h>.
* sysdeps/generic/rtld-lowlevel.h: New file.
* include/atomic.h: Rename atomic_and to atomic_and_val and
atomic_or to atomic_or_val. Define new macros atomic_and and
atomic_or which do not return values.
* sysdeps/x86_64/bits/atomic.h: Define atomic_and and atomic_or.
Various cleanups.
* sysdeps/i386/i486/bits/atomic.h: Likewise.
* po/sv.po: Update from translation team.
2006-10-07 Ulrich Drepper <drepper@redhat.com>
* Versions.def: Add GLIBC_2.6 to libpthread.
* include/shlib-compat.h (SHLIB_COMPAT): Expand parameters before use.
(versioned_symbol): Likewise.
(compat_symbol): Likewise.
* po/tr.po: Update from translation team.
* nis/Banner: Removed. It's been integral part forever and the
author info is incomplete anyway.
* libio/Banner: Likewise.
2006-10-06 Ulrich Drepper <drepper@redhat.com>
* version.h (VERSION): Bump to 2.5.90 for new development tree.
2007-01-11 21:51:07 +00:00
|
|
|
termination (i.e., @code{exit}), though, the program's exit status becomes
|
2000-05-04 02:46:54 +00:00
|
|
|
part of the process' termination status.
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
@node Cleanups on Exit
|
|
|
|
@subsection Cleanups on Exit
|
|
|
|
|
|
|
|
Your program can arrange to run its own cleanup functions if normal
|
|
|
|
termination happens. If you are writing a library for use in various
|
|
|
|
application programs, then it is unreliable to insist that all
|
|
|
|
applications call the library's cleanup functions explicitly before
|
|
|
|
exiting. It is much more robust to make the cleanup invisible to the
|
|
|
|
application, by setting up a cleanup function in the library itself
|
|
|
|
using @code{atexit} or @code{on_exit}.
|
|
|
|
|
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypefun int atexit (void (*@var{function}) (void))
|
|
|
|
The @code{atexit} function registers the function @var{function} to be
|
|
|
|
called at normal program termination. The @var{function} is called with
|
|
|
|
no arguments.
|
|
|
|
|
|
|
|
The return value from @code{atexit} is zero on success and nonzero if
|
1996-05-21 21:35:56 +00:00
|
|
|
the function cannot be registered.
|
1995-02-18 01:27:10 +00:00
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@comment stdlib.h
|
|
|
|
@comment SunOS
|
|
|
|
@deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg})
|
|
|
|
This function is a somewhat more powerful variant of @code{atexit}. It
|
|
|
|
accepts two arguments, a function @var{function} and an arbitrary
|
|
|
|
pointer @var{arg}. At normal program termination, the @var{function} is
|
|
|
|
called with two arguments: the @var{status} value passed to @code{exit},
|
|
|
|
and the @var{arg}.
|
|
|
|
|
2012-02-28 14:44:20 +00:00
|
|
|
This function is included in @theglibc{} only for compatibility
|
1995-02-18 01:27:10 +00:00
|
|
|
for SunOS, and may not be supported by other implementations.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
Here's a trivial program that illustrates the use of @code{exit} and
|
|
|
|
@code{atexit}:
|
|
|
|
|
|
|
|
@smallexample
|
|
|
|
@include atexit.c.texi
|
|
|
|
@end smallexample
|
|
|
|
|
|
|
|
@noindent
|
|
|
|
When this program is executed, it just prints the message and exits.
|
|
|
|
|
|
|
|
@node Aborting a Program
|
|
|
|
@subsection Aborting a Program
|
|
|
|
@cindex aborting a program
|
|
|
|
|
|
|
|
You can abort your program using the @code{abort} function. The prototype
|
|
|
|
for this function is in @file{stdlib.h}.
|
|
|
|
@pindex stdlib.h
|
|
|
|
|
|
|
|
@comment stdlib.h
|
1996-12-08 08:01:13 +00:00
|
|
|
@comment ISO
|
1995-02-18 01:27:10 +00:00
|
|
|
@deftypefun void abort (void)
|
|
|
|
The @code{abort} function causes abnormal program termination. This
|
|
|
|
does not execute cleanup functions registered with @code{atexit} or
|
|
|
|
@code{on_exit}.
|
|
|
|
|
|
|
|
This function actually terminates the process by raising a
|
|
|
|
@code{SIGABRT} signal, and your program can include a handler to
|
|
|
|
intercept this signal; see @ref{Signal Handling}.
|
|
|
|
@end deftypefun
|
|
|
|
|
|
|
|
@c Put in by rms. Don't remove.
|
|
|
|
@cartouche
|
|
|
|
@strong{Future Change Warning:} Proposed Federal censorship regulations
|
|
|
|
may prohibit us from giving you information about the possibility of
|
|
|
|
calling this function. We would be required to say that this is not an
|
|
|
|
acceptable way of terminating a program.
|
|
|
|
@end cartouche
|
|
|
|
|
|
|
|
@node Termination Internals
|
|
|
|
@subsection Termination Internals
|
|
|
|
|
|
|
|
The @code{_exit} function is the primitive used for process termination
|
|
|
|
by @code{exit}. It is declared in the header file @file{unistd.h}.
|
|
|
|
@pindex unistd.h
|
|
|
|
|
|
|
|
@comment unistd.h
|
|
|
|
@comment POSIX.1
|
|
|
|
@deftypefun void _exit (int @var{status})
|
|
|
|
The @code{_exit} function is the primitive for causing a process to
|
|
|
|
terminate with status @var{status}. Calling this function does not
|
|
|
|
execute cleanup functions registered with @code{atexit} or
|
|
|
|
@code{on_exit}.
|
|
|
|
@end deftypefun
|
|
|
|
|
1999-02-07 12:50:11 +00:00
|
|
|
@comment stdlib.h
|
|
|
|
@comment ISO
|
|
|
|
@deftypefun void _Exit (int @var{status})
|
|
|
|
The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}.
|
|
|
|
The @w{ISO C} committee members were not sure whether the definitions of
|
|
|
|
@code{_exit} and @code{_Exit} were compatible so they have not used the
|
|
|
|
POSIX name.
|
|
|
|
|
1999-10-31 17:37:43 +00:00
|
|
|
This function was introduced in @w{ISO C99} and is declared in
|
1999-02-07 12:50:11 +00:00
|
|
|
@file{stdlib.h}.
|
|
|
|
@end deftypefun
|
|
|
|
|
2000-05-04 02:46:54 +00:00
|
|
|
When a process terminates for any reason---either because the program
|
|
|
|
terminates, or as a result of a signal---the
|
1995-02-18 01:27:10 +00:00
|
|
|
following things happen:
|
|
|
|
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
|
|
All open file descriptors in the process are closed. @xref{Low-Level I/O}.
|
|
|
|
Note that streams are not flushed automatically when the process
|
1998-11-16 12:02:08 +00:00
|
|
|
terminates; see @ref{I/O on Streams}.
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@item
|
2000-05-04 02:46:54 +00:00
|
|
|
A process exit status is saved to be reported back to the parent process
|
|
|
|
via @code{wait} or @code{waitpid}; see @ref{Process Completion}. If the
|
|
|
|
program exited, this status includes as its low-order 8 bits the program
|
|
|
|
exit status.
|
|
|
|
|
1995-02-18 01:27:10 +00:00
|
|
|
|
|
|
|
@item
|
|
|
|
Any child processes of the process being terminated are assigned a new
|
|
|
|
parent process. (On most systems, including GNU, this is the @code{init}
|
|
|
|
process, with process ID 1.)
|
|
|
|
|
|
|
|
@item
|
|
|
|
A @code{SIGCHLD} signal is sent to the parent process.
|
|
|
|
|
|
|
|
@item
|
|
|
|
If the process is a session leader that has a controlling terminal, then
|
|
|
|
a @code{SIGHUP} signal is sent to each process in the foreground job,
|
|
|
|
and the controlling terminal is disassociated from that session.
|
|
|
|
@xref{Job Control}.
|
|
|
|
|
|
|
|
@item
|
|
|
|
If termination of a process causes a process group to become orphaned,
|
|
|
|
and any member of that process group is stopped, then a @code{SIGHUP}
|
|
|
|
signal and a @code{SIGCONT} signal are sent to each process in the
|
|
|
|
group. @xref{Job Control}.
|
|
|
|
@end itemize
|