mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	2001-05-21 Andreas Jaeger <aj@suse.de> * locale/programs/ld-collate.c (handle_ellipsis): Fix message. Patch by Philipp Thomas <pthomas@suse.de>.
		
			
				
	
	
		
			729 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			729 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
@node Introduction, Error Reporting, Top, Top
 | 
						|
@chapter Introduction
 | 
						|
@c %MENU% Purpose of the GNU C Library
 | 
						|
 | 
						|
The C language provides no built-in facilities for performing such
 | 
						|
common operations as input/output, memory management, string
 | 
						|
manipulation, and the like.  Instead, these facilities are defined
 | 
						|
in a standard @dfn{library}, which you compile and link with your
 | 
						|
programs.
 | 
						|
@cindex library
 | 
						|
 | 
						|
The GNU C library, described in this document, defines all of the
 | 
						|
library functions that are specified by the @w{ISO C} standard, as well as
 | 
						|
additional features specific to POSIX and other derivatives of the Unix
 | 
						|
operating system, and extensions specific to the GNU system.
 | 
						|
 | 
						|
The purpose of this manual is to tell you how to use the facilities
 | 
						|
of the GNU library.  We have mentioned which features belong to which
 | 
						|
standards to help you identify things that are potentially non-portable
 | 
						|
to other systems.  But the emphasis in this manual is not on strict
 | 
						|
portability.
 | 
						|
 | 
						|
@menu
 | 
						|
* Getting Started::             What this manual is for and how to use it.
 | 
						|
* Standards and Portability::   Standards and sources upon which the GNU
 | 
						|
                                 C library is based.
 | 
						|
* Using the Library::           Some practical uses for the library.
 | 
						|
* Roadmap to the Manual::       Overview of the remaining chapters in
 | 
						|
                                 this manual.
 | 
						|
@end menu
 | 
						|
 | 
						|
@node Getting Started, Standards and Portability,  , Introduction
 | 
						|
@section Getting Started
 | 
						|
 | 
						|
This manual is written with the assumption that you are at least
 | 
						|
somewhat familiar with the C programming language and basic programming
 | 
						|
concepts.  Specifically, familiarity with ISO standard C
 | 
						|
(@pxref{ISO C}), rather than ``traditional'' pre-ISO C dialects, is
 | 
						|
assumed.
 | 
						|
 | 
						|
The GNU C library includes several @dfn{header files}, each of which
 | 
						|
provides definitions and declarations for a group of related facilities;
 | 
						|
this information is used by the C compiler when processing your program.
 | 
						|
For example, the header file @file{stdio.h} declares facilities for
 | 
						|
performing input and output, and the header file @file{string.h}
 | 
						|
declares string processing utilities.  The organization of this manual
 | 
						|
generally follows the same division as the header files.
 | 
						|
 | 
						|
If you are reading this manual for the first time, you should read all
 | 
						|
of the introductory material and skim the remaining chapters.  There are
 | 
						|
a @emph{lot} of functions in the GNU C library and it's not realistic to
 | 
						|
expect that you will be able to remember exactly @emph{how} to use each
 | 
						|
and every one of them.  It's more important to become generally familiar
 | 
						|
with the kinds of facilities that the library provides, so that when you
 | 
						|
are writing your programs you can recognize @emph{when} to make use of
 | 
						|
library functions, and @emph{where} in this manual you can find more
 | 
						|
specific information about them.
 | 
						|
 | 
						|
 | 
						|
@node Standards and Portability, Using the Library, Getting Started, Introduction
 | 
						|
@section Standards and Portability
 | 
						|
@cindex standards
 | 
						|
 | 
						|
This section discusses the various standards and other sources that the
 | 
						|
GNU C library is based upon.  These sources include the @w{ISO C} and
 | 
						|
POSIX standards, and the System V and Berkeley Unix implementations.
 | 
						|
 | 
						|
The primary focus of this manual is to tell you how to make effective
 | 
						|
use of the GNU library facilities.  But if you are concerned about
 | 
						|
making your programs compatible with these standards, or portable to
 | 
						|
operating systems other than GNU, this can affect how you use the
 | 
						|
library.  This section gives you an overview of these standards, so that
 | 
						|
you will know what they are when they are mentioned in other parts of
 | 
						|
the manual.
 | 
						|
 | 
						|
@xref{Library Summary}, for an alphabetical list of the functions and
 | 
						|
other symbols provided by the library.  This list also states which
 | 
						|
standards each function or symbol comes from.
 | 
						|
 | 
						|
@menu
 | 
						|
* ISO C::                       The international standard for the C
 | 
						|
                                 programming language.
 | 
						|
* POSIX::                       The ISO/IEC 9945 (aka IEEE 1003) standards
 | 
						|
                                 for operating systems.
 | 
						|
* Berkeley Unix::               BSD and SunOS.
 | 
						|
* SVID::                        The System V Interface Description.
 | 
						|
* XPG::                         The X/Open Portability Guide.
 | 
						|
@end menu
 | 
						|
 | 
						|
@node ISO C, POSIX,  , Standards and Portability
 | 
						|
@subsection ISO C
 | 
						|
@cindex ISO C
 | 
						|
 | 
						|
The GNU C library is compatible with the C standard adopted by the
 | 
						|
American National Standards Institute (ANSI):
 | 
						|
@cite{American National Standard X3.159-1989---``ANSI C''} and later
 | 
						|
by the International Standardization Organization (ISO):
 | 
						|
@cite{ISO/IEC 9899:1990, ``Programming languages---C''}.
 | 
						|
We here refer to the standard as @w{ISO C} since this is the more
 | 
						|
general standard in respect of ratification.
 | 
						|
The header files and library facilities that make up the GNU library are
 | 
						|
a superset of those specified by the @w{ISO C} standard.@refill
 | 
						|
 | 
						|
@pindex gcc
 | 
						|
If you are concerned about strict adherence to the @w{ISO C} standard, you
 | 
						|
should use the @samp{-ansi} option when you compile your programs with
 | 
						|
the GNU C compiler.  This tells the compiler to define @emph{only} ISO
 | 
						|
standard features from the library header files, unless you explicitly
 | 
						|
ask for additional features.  @xref{Feature Test Macros}, for
 | 
						|
information on how to do this.
 | 
						|
 | 
						|
Being able to restrict the library to include only @w{ISO C} features is
 | 
						|
important because @w{ISO C} puts limitations on what names can be defined
 | 
						|
by the library implementation, and the GNU extensions don't fit these
 | 
						|
limitations.  @xref{Reserved Names}, for more information about these
 | 
						|
restrictions.
 | 
						|
 | 
						|
This manual does not attempt to give you complete details on the
 | 
						|
differences between @w{ISO C} and older dialects.  It gives advice on how
 | 
						|
to write programs to work portably under multiple C dialects, but does
 | 
						|
not aim for completeness.
 | 
						|
 | 
						|
 | 
						|
@node POSIX, Berkeley Unix, ISO C, Standards and Portability
 | 
						|
@subsection POSIX (The Portable Operating System Interface)
 | 
						|
@cindex POSIX
 | 
						|
@cindex POSIX.1
 | 
						|
@cindex IEEE Std 1003.1
 | 
						|
@cindex ISO/IEC 9945-1
 | 
						|
@cindex POSIX.2
 | 
						|
@cindex IEEE Std 1003.2
 | 
						|
@cindex ISO/IEC 9945-2
 | 
						|
 | 
						|
The GNU library is also compatible with the ISO @dfn{POSIX} family of
 | 
						|
standards, known more formally as the @dfn{Portable Operating System
 | 
						|
Interface for Computer Environments} (ISO/IEC 9945).  They were also
 | 
						|
published as ANSI/IEEE Std 1003.  POSIX is derived mostly from various
 | 
						|
versions of the Unix operating system.
 | 
						|
 | 
						|
The library facilities specified by the POSIX standards are a superset
 | 
						|
of those required by @w{ISO C}; POSIX specifies additional features for
 | 
						|
@w{ISO C} functions, as well as specifying new additional functions.  In
 | 
						|
general, the additional requirements and functionality defined by the
 | 
						|
POSIX standards are aimed at providing lower-level support for a
 | 
						|
particular kind of operating system environment, rather than general
 | 
						|
programming language support which can run in many diverse operating
 | 
						|
system environments.@refill
 | 
						|
 | 
						|
The GNU C library implements all of the functions specified in
 | 
						|
@cite{ISO/IEC 9945-1:1996, the POSIX System Application Program
 | 
						|
Interface}, commonly referred to as POSIX.1.  The primary extensions to
 | 
						|
the @w{ISO C} facilities specified by this standard include file system
 | 
						|
interface primitives (@pxref{File System Interface}), device-specific
 | 
						|
terminal control functions (@pxref{Low-Level Terminal Interface}), and
 | 
						|
process control functions (@pxref{Processes}).
 | 
						|
 | 
						|
Some facilities from @cite{ISO/IEC 9945-2:1993, the POSIX Shell and
 | 
						|
Utilities standard} (POSIX.2) are also implemented in the GNU library.
 | 
						|
These include utilities for dealing with regular expressions and other
 | 
						|
pattern matching facilities (@pxref{Pattern Matching}).
 | 
						|
 | 
						|
@comment Roland sez:
 | 
						|
@comment The GNU C library as it stands conforms to 1003.2 draft 11, which
 | 
						|
@comment specifies:
 | 
						|
@comment
 | 
						|
@comment Several new macros in <limits.h>.
 | 
						|
@comment popen, pclose
 | 
						|
@comment <regex.h> (which is not yet fully implemented--wait on this)
 | 
						|
@comment fnmatch
 | 
						|
@comment getopt
 | 
						|
@comment <glob.h>
 | 
						|
@comment <wordexp.h> (not yet implemented)
 | 
						|
@comment confstr
 | 
						|
 | 
						|
 | 
						|
@node Berkeley Unix, SVID, POSIX, Standards and Portability
 | 
						|
@subsection Berkeley Unix
 | 
						|
@cindex BSD Unix
 | 
						|
@cindex 4.@var{n} BSD Unix
 | 
						|
@cindex Berkeley Unix
 | 
						|
@cindex SunOS
 | 
						|
@cindex Unix, Berkeley
 | 
						|
 | 
						|
The GNU C library defines facilities from some versions of Unix which
 | 
						|
are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD,
 | 
						|
and 4.4 BSD Unix systems (also known as @dfn{Berkeley Unix}) and from
 | 
						|
@dfn{SunOS} (a popular 4.2 BSD derivative that includes some Unix System
 | 
						|
V functionality).  These systems support most of the @w{ISO C} and POSIX
 | 
						|
facilities, and 4.4 BSD and newer releases of SunOS in fact support them all.
 | 
						|
 | 
						|
The BSD facilities include symbolic links (@pxref{Symbolic Links}), the
 | 
						|
@code{select} function (@pxref{Waiting for I/O}), the BSD signal
 | 
						|
functions (@pxref{BSD Signal Handling}), and sockets (@pxref{Sockets}).
 | 
						|
 | 
						|
@node SVID, XPG, Berkeley Unix, Standards and Portability
 | 
						|
@subsection SVID (The System V Interface Description)
 | 
						|
@cindex SVID
 | 
						|
@cindex System V Unix
 | 
						|
@cindex Unix, System V
 | 
						|
 | 
						|
The @dfn{System V Interface Description} (SVID) is a document describing
 | 
						|
the AT&T Unix System V operating system.  It is to some extent a
 | 
						|
superset of the POSIX standard (@pxref{POSIX}).
 | 
						|
 | 
						|
The GNU C library defines most of the facilities required by the SVID
 | 
						|
that are not also required by the @w{ISO C} or POSIX standards, for
 | 
						|
compatibility with  System V Unix and other Unix systems (such as
 | 
						|
SunOS) which include these facilities.  However, many of the more
 | 
						|
obscure and less generally useful facilities required by the SVID are
 | 
						|
not included.  (In fact, Unix System V itself does not provide them all.)
 | 
						|
 | 
						|
The supported facilities from System V include the methods for
 | 
						|
inter-process communication and shared memory, the @code{hsearch} and
 | 
						|
@code{drand48} families of functions, @code{fmtmsg} and several of the
 | 
						|
mathematical functions.
 | 
						|
 | 
						|
@node XPG, , SVID, Standards and Portability
 | 
						|
@subsection XPG (The X/Open Portability Guide)
 | 
						|
 | 
						|
The X/Open Portability Guide, published by the X/Open Company, Ltd., is
 | 
						|
a more general standard than POSIX.  X/Open owns the Unix copyright and
 | 
						|
the XPG specifies the requirements for systems which are intended to be
 | 
						|
a Unix system.
 | 
						|
 | 
						|
The GNU C library complies to the X/Open Portability Guide, Issue 4.2,
 | 
						|
with all extensions common to XSI (X/Open System Interface)
 | 
						|
compliant systems and also all X/Open UNIX extensions.
 | 
						|
 | 
						|
The additions on top of POSIX are mainly derived from functionality
 | 
						|
available in @w{System V} and BSD systems.  Some of the really bad
 | 
						|
mistakes in @w{System V} systems were corrected, though.  Since
 | 
						|
fulfilling the XPG standard with the Unix extensions is a
 | 
						|
precondition for getting the Unix brand chances are good that the
 | 
						|
functionality is available on commercial systems.
 | 
						|
 | 
						|
 | 
						|
@node Using the Library, Roadmap to the Manual, Standards and Portability, Introduction
 | 
						|
@section Using the Library
 | 
						|
 | 
						|
This section describes some of the practical issues involved in using
 | 
						|
the GNU C library.
 | 
						|
 | 
						|
@menu
 | 
						|
* Header Files::                How to include the header files in your
 | 
						|
                                 programs.
 | 
						|
* Macro Definitions::           Some functions in the library may really
 | 
						|
                                 be implemented as macros.
 | 
						|
* Reserved Names::              The C standard reserves some names for
 | 
						|
                                 the library, and some for users.
 | 
						|
* Feature Test Macros::         How to control what names are defined.
 | 
						|
@end menu
 | 
						|
 | 
						|
@node Header Files, Macro Definitions,  , Using the Library
 | 
						|
@subsection Header Files
 | 
						|
@cindex header files
 | 
						|
 | 
						|
Libraries for use by C programs really consist of two parts: @dfn{header
 | 
						|
files} that define types and macros and declare variables and
 | 
						|
functions; and the actual library or @dfn{archive} that contains the
 | 
						|
definitions of the variables and functions.
 | 
						|
 | 
						|
(Recall that in C, a @dfn{declaration} merely provides information that
 | 
						|
a function or variable exists and gives its type.  For a function
 | 
						|
declaration, information about the types of its arguments might be
 | 
						|
provided as well.  The purpose of declarations is to allow the compiler
 | 
						|
to correctly process references to the declared variables and functions.
 | 
						|
A @dfn{definition}, on the other hand, actually allocates storage for a
 | 
						|
variable or says what a function does.)
 | 
						|
@cindex definition (compared to declaration)
 | 
						|
@cindex declaration (compared to definition)
 | 
						|
 | 
						|
In order to use the facilities in the GNU C library, you should be sure
 | 
						|
that your program source files include the appropriate header files.
 | 
						|
This is so that the compiler has declarations of these facilities
 | 
						|
available and can correctly process references to them.  Once your
 | 
						|
program has been compiled, the linker resolves these references to
 | 
						|
the actual definitions provided in the archive file.
 | 
						|
 | 
						|
Header files are included into a program source file by the
 | 
						|
@samp{#include} preprocessor directive.  The C language supports two
 | 
						|
forms of this directive; the first,
 | 
						|
 | 
						|
@smallexample
 | 
						|
#include "@var{header}"
 | 
						|
@end smallexample
 | 
						|
 | 
						|
@noindent
 | 
						|
is typically used to include a header file @var{header} that you write
 | 
						|
yourself; this would contain definitions and declarations describing the
 | 
						|
interfaces between the different parts of your particular application.
 | 
						|
By contrast,
 | 
						|
 | 
						|
@smallexample
 | 
						|
#include <file.h>
 | 
						|
@end smallexample
 | 
						|
 | 
						|
@noindent
 | 
						|
is typically used to include a header file @file{file.h} that contains
 | 
						|
definitions and declarations for a standard library.  This file would
 | 
						|
normally be installed in a standard place by your system administrator.
 | 
						|
You should use this second form for the C library header files.
 | 
						|
 | 
						|
Typically, @samp{#include} directives are placed at the top of the C
 | 
						|
source file, before any other code.  If you begin your source files with
 | 
						|
some comments explaining what the code in the file does (a good idea),
 | 
						|
put the @samp{#include} directives immediately afterwards, following the
 | 
						|
feature test macro definition (@pxref{Feature Test Macros}).
 | 
						|
 | 
						|
For more information about the use of header files and @samp{#include}
 | 
						|
directives, @pxref{Header Files,,, cpp.info, The GNU C Preprocessor
 | 
						|
Manual}.@refill
 | 
						|
 | 
						|
The GNU C library provides several header files, each of which contains
 | 
						|
the type and macro definitions and variable and function declarations
 | 
						|
for a group of related facilities.  This means that your programs may
 | 
						|
need to include several header files, depending on exactly which
 | 
						|
facilities you are using.
 | 
						|
 | 
						|
Some library header files include other library header files
 | 
						|
automatically.  However, as a matter of programming style, you should
 | 
						|
not rely on this; it is better to explicitly include all the header
 | 
						|
files required for the library facilities you are using.  The GNU C
 | 
						|
library header files have been written in such a way that it doesn't
 | 
						|
matter if a header file is accidentally included more than once;
 | 
						|
including a header file a second time has no effect.  Likewise, if your
 | 
						|
program needs to include multiple header files, the order in which they
 | 
						|
are included doesn't matter.
 | 
						|
 | 
						|
@strong{Compatibility Note:} Inclusion of standard header files in any
 | 
						|
order and any number of times works in any @w{ISO C} implementation.
 | 
						|
However, this has traditionally not been the case in many older C
 | 
						|
implementations.
 | 
						|
 | 
						|
Strictly speaking, you don't @emph{have to} include a header file to use
 | 
						|
a function it declares; you could declare the function explicitly
 | 
						|
yourself, according to the specifications in this manual.  But it is
 | 
						|
usually better to include the header file because it may define types
 | 
						|
and macros that are not otherwise available and because it may define
 | 
						|
more efficient macro replacements for some functions.  It is also a sure
 | 
						|
way to have the correct declaration.
 | 
						|
 | 
						|
@node Macro Definitions, Reserved Names, Header Files, Using the Library
 | 
						|
@subsection Macro Definitions of Functions
 | 
						|
@cindex shadowing functions with macros
 | 
						|
@cindex removing macros that shadow functions
 | 
						|
@cindex undefining macros that shadow functions
 | 
						|
 | 
						|
If we describe something as a function in this manual, it may have a
 | 
						|
macro definition as well.  This normally has no effect on how your
 | 
						|
program runs---the macro definition does the same thing as the function
 | 
						|
would.  In particular, macro equivalents for library functions evaluate
 | 
						|
arguments exactly once, in the same way that a function call would.  The
 | 
						|
main reason for these macro definitions is that sometimes they can
 | 
						|
produce an inline expansion that is considerably faster than an actual
 | 
						|
function call.
 | 
						|
 | 
						|
Taking the address of a library function works even if it is also
 | 
						|
defined as a macro.  This is because, in this context, the name of the
 | 
						|
function isn't followed by the left parenthesis that is syntactically
 | 
						|
necessary to recognize a macro call.
 | 
						|
 | 
						|
You might occasionally want to avoid using the macro definition of a
 | 
						|
function---perhaps to make your program easier to debug.  There are
 | 
						|
two ways you can do this:
 | 
						|
 | 
						|
@itemize @bullet
 | 
						|
@item
 | 
						|
You can avoid a macro definition in a specific use by enclosing the name
 | 
						|
of the function in parentheses.  This works because the name of the
 | 
						|
function doesn't appear in a syntactic context where it is recognizable
 | 
						|
as a macro call.
 | 
						|
 | 
						|
@item
 | 
						|
You can suppress any macro definition for a whole source file by using
 | 
						|
the @samp{#undef} preprocessor directive, unless otherwise stated
 | 
						|
explicitly in the description of that facility.
 | 
						|
@end itemize
 | 
						|
 | 
						|
For example, suppose the header file @file{stdlib.h} declares a function
 | 
						|
named @code{abs} with
 | 
						|
 | 
						|
@smallexample
 | 
						|
extern int abs (int);
 | 
						|
@end smallexample
 | 
						|
 | 
						|
@noindent
 | 
						|
and also provides a macro definition for @code{abs}.  Then, in:
 | 
						|
 | 
						|
@smallexample
 | 
						|
#include <stdlib.h>
 | 
						|
int f (int *i) @{ return abs (++*i); @}
 | 
						|
@end smallexample
 | 
						|
 | 
						|
@noindent
 | 
						|
the reference to @code{abs} might refer to either a macro or a function.
 | 
						|
On the other hand, in each of the following examples the reference is
 | 
						|
to a function and not a macro.
 | 
						|
 | 
						|
@smallexample
 | 
						|
#include <stdlib.h>
 | 
						|
int g (int *i) @{ return (abs) (++*i); @}
 | 
						|
 | 
						|
#undef abs
 | 
						|
int h (int *i) @{ return abs (++*i); @}
 | 
						|
@end smallexample
 | 
						|
 | 
						|
Since macro definitions that double for a function behave in
 | 
						|
exactly the same way as the actual function version, there is usually no
 | 
						|
need for any of these methods.  In fact, removing macro definitions usually
 | 
						|
just makes your program slower.
 | 
						|
 | 
						|
 | 
						|
@node Reserved Names, Feature Test Macros, Macro Definitions, Using the Library
 | 
						|
@subsection Reserved Names
 | 
						|
@cindex reserved names
 | 
						|
@cindex name space
 | 
						|
 | 
						|
The names of all library types, macros, variables and functions that
 | 
						|
come from the @w{ISO C} standard are reserved unconditionally; your program
 | 
						|
@strong{may not} redefine these names.  All other library names are
 | 
						|
reserved if your program explicitly includes the header file that
 | 
						|
defines or declares them.  There are several reasons for these
 | 
						|
restrictions:
 | 
						|
 | 
						|
@itemize @bullet
 | 
						|
@item
 | 
						|
Other people reading your code could get very confused if you were using
 | 
						|
a function named @code{exit} to do something completely different from
 | 
						|
what the standard @code{exit} function does, for example.  Preventing
 | 
						|
this situation helps to make your programs easier to understand and
 | 
						|
contributes to modularity and maintainability.
 | 
						|
 | 
						|
@item
 | 
						|
It avoids the possibility of a user accidentally redefining a library
 | 
						|
function that is called by other library functions.  If redefinition
 | 
						|
were allowed, those other functions would not work properly.
 | 
						|
 | 
						|
@item
 | 
						|
It allows the compiler to do whatever special optimizations it pleases
 | 
						|
on calls to these functions, without the possibility that they may have
 | 
						|
been redefined by the user.  Some library facilities, such as those for
 | 
						|
dealing with variadic arguments (@pxref{Variadic Functions})
 | 
						|
and non-local exits (@pxref{Non-Local Exits}), actually require a
 | 
						|
considerable amount of cooperation on the part of the C compiler, and
 | 
						|
with respect to the implementation, it might be easier for the compiler
 | 
						|
to treat these as built-in parts of the language.
 | 
						|
@end itemize
 | 
						|
 | 
						|
In addition to the names documented in this manual, reserved names
 | 
						|
include all external identifiers (global functions and variables) that
 | 
						|
begin with an underscore (@samp{_}) and all identifiers regardless of
 | 
						|
use that begin with either two underscores or an underscore followed by
 | 
						|
a capital letter are reserved names.  This is so that the library and
 | 
						|
header files can define functions, variables, and macros for internal
 | 
						|
purposes without risk of conflict with names in user programs.
 | 
						|
 | 
						|
Some additional classes of identifier names are reserved for future
 | 
						|
extensions to the C language or the POSIX.1 environment.  While using these
 | 
						|
names for your own purposes right now might not cause a problem, they do
 | 
						|
raise the possibility of conflict with future versions of the C
 | 
						|
or POSIX standards, so you should avoid these names.
 | 
						|
 | 
						|
@itemize @bullet
 | 
						|
@item
 | 
						|
Names beginning with a capital @samp{E} followed a digit or uppercase
 | 
						|
letter may be used for additional error code names.  @xref{Error
 | 
						|
Reporting}.
 | 
						|
 | 
						|
@item
 | 
						|
Names that begin with either @samp{is} or @samp{to} followed by a
 | 
						|
lowercase letter may be used for additional character testing and
 | 
						|
conversion functions.  @xref{Character Handling}.
 | 
						|
 | 
						|
@item
 | 
						|
Names that begin with @samp{LC_} followed by an uppercase letter may be
 | 
						|
used for additional macros specifying locale attributes.
 | 
						|
@xref{Locales}.
 | 
						|
 | 
						|
@item
 | 
						|
Names of all existing mathematics functions (@pxref{Mathematics})
 | 
						|
suffixed with @samp{f} or @samp{l} are reserved for corresponding
 | 
						|
functions that operate on @code{float} and @code{long double} arguments,
 | 
						|
respectively.
 | 
						|
 | 
						|
@item
 | 
						|
Names that begin with @samp{SIG} followed by an uppercase letter are
 | 
						|
reserved for additional signal names.  @xref{Standard Signals}.
 | 
						|
 | 
						|
@item
 | 
						|
Names that begin with @samp{SIG_} followed by an uppercase letter are
 | 
						|
reserved for additional signal actions.  @xref{Basic Signal Handling}.
 | 
						|
 | 
						|
@item
 | 
						|
Names beginning with @samp{str}, @samp{mem}, or @samp{wcs} followed by a
 | 
						|
lowercase letter are reserved for additional string and array functions.
 | 
						|
@xref{String and Array Utilities}.
 | 
						|
 | 
						|
@item
 | 
						|
Names that end with @samp{_t} are reserved for additional type names.
 | 
						|
@end itemize
 | 
						|
 | 
						|
In addition, some individual header files reserve names beyond
 | 
						|
those that they actually define.  You only need to worry about these
 | 
						|
restrictions if your program includes that particular header file.
 | 
						|
 | 
						|
@itemize @bullet
 | 
						|
@item
 | 
						|
The header file @file{dirent.h} reserves names prefixed with
 | 
						|
@samp{d_}.
 | 
						|
@pindex dirent.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{fcntl.h} reserves names prefixed with
 | 
						|
@samp{l_}, @samp{F_}, @samp{O_}, and @samp{S_}.
 | 
						|
@pindex fcntl.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{grp.h} reserves names prefixed with @samp{gr_}.
 | 
						|
@pindex grp.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{limits.h} reserves names suffixed with @samp{_MAX}.
 | 
						|
@pindex limits.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{pwd.h} reserves names prefixed with @samp{pw_}.
 | 
						|
@pindex pwd.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{signal.h} reserves names prefixed with @samp{sa_}
 | 
						|
and @samp{SA_}.
 | 
						|
@pindex signal.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{sys/stat.h} reserves names prefixed with @samp{st_}
 | 
						|
and @samp{S_}.
 | 
						|
@pindex sys/stat.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{sys/times.h} reserves names prefixed with @samp{tms_}.
 | 
						|
@pindex sys/times.h
 | 
						|
 | 
						|
@item
 | 
						|
The header file @file{termios.h} reserves names prefixed with @samp{c_},
 | 
						|
@samp{V}, @samp{I}, @samp{O}, and @samp{TC}; and names prefixed with
 | 
						|
@samp{B} followed by a digit.
 | 
						|
@pindex termios.h
 | 
						|
@end itemize
 | 
						|
 | 
						|
@comment Include the section on Creature Nest Macros.
 | 
						|
@comment It is in a separate file so it can be formatted into ../NOTES.
 | 
						|
@include creature.texi
 | 
						|
 | 
						|
@node Roadmap to the Manual,  , Using the Library, Introduction
 | 
						|
@section Roadmap to the Manual
 | 
						|
 | 
						|
Here is an overview of the contents of the remaining chapters of
 | 
						|
this manual.
 | 
						|
 | 
						|
@itemize @bullet
 | 
						|
@item
 | 
						|
@ref{Error Reporting}, describes how errors detected by the library
 | 
						|
are reported.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Language Features}, contains information about library support for
 | 
						|
standard parts of the C language, including things like the @code{sizeof}
 | 
						|
operator and the symbolic constant @code{NULL}, how to write functions
 | 
						|
accepting variable numbers of arguments, and constants describing the
 | 
						|
ranges and other properties of the numerical types.  There is also a simple
 | 
						|
debugging mechanism which allows you to put assertions in your code, and
 | 
						|
have diagnostic messages printed if the tests fail.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Memory}, describes the GNU library's facilities for managing and
 | 
						|
using virtual and real memory, including dynamic allocation of virtual
 | 
						|
memory.  If you do not know in advance how much memory your program
 | 
						|
needs, you can allocate it dynamically instead, and manipulate it via
 | 
						|
pointers.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Character Handling}, contains information about character
 | 
						|
classification functions (such as @code{isspace}) and functions for
 | 
						|
performing case conversion.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{String and Array Utilities}, has descriptions of functions for
 | 
						|
manipulating strings (null-terminated character arrays) and general
 | 
						|
byte arrays, including operations such as copying and comparison.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{I/O Overview}, gives an overall look at the input and output
 | 
						|
facilities in the library, and contains information about basic concepts
 | 
						|
such as file names.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{I/O on Streams}, describes I/O operations involving streams (or
 | 
						|
@w{@code{FILE *}} objects).  These are the normal C library functions
 | 
						|
from @file{stdio.h}.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Low-Level I/O}, contains information about I/O operations
 | 
						|
on file descriptors.  File descriptors are a lower-level mechanism
 | 
						|
specific to the Unix family of operating systems.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{File System Interface}, has descriptions of operations on entire
 | 
						|
files, such as functions for deleting and renaming them and for creating
 | 
						|
new directories.  This chapter also contains information about how you
 | 
						|
can access the attributes of a file, such as its owner and file protection
 | 
						|
modes.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Pipes and FIFOs}, contains information about simple interprocess
 | 
						|
communication mechanisms.  Pipes allow communication between two related
 | 
						|
processes (such as between a parent and child), while FIFOs allow
 | 
						|
communication between processes sharing a common file system on the same
 | 
						|
machine.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Sockets}, describes a more complicated interprocess communication
 | 
						|
mechanism that allows processes running on different machines to
 | 
						|
communicate over a network.  This chapter also contains information about
 | 
						|
Internet host addressing and how to use the system network databases.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Low-Level Terminal Interface}, describes how you can change the
 | 
						|
attributes of a terminal device.  If you want to disable echo of
 | 
						|
characters typed by the user, for example, read this chapter.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Mathematics}, contains information about the math library
 | 
						|
functions.  These include things like random-number generators and
 | 
						|
remainder functions on integers as well as the usual trigonometric and
 | 
						|
exponential functions on floating-point numbers.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Arithmetic,, Low-Level Arithmetic Functions}, describes functions
 | 
						|
for simple arithmetic, analysis of floating-point values, and reading
 | 
						|
numbers from strings.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Searching and Sorting}, contains information about functions
 | 
						|
for searching and sorting arrays.  You can use these functions on any
 | 
						|
kind of array by providing an appropriate comparison function.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Pattern Matching}, presents functions for matching regular expressions
 | 
						|
and shell file name patterns, and for expanding words as the shell does.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Date and Time}, describes functions for measuring both calendar time
 | 
						|
and CPU time, as well as functions for setting alarms and timers.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Character Set Handling}, contains information about manipulating
 | 
						|
characters and strings using character sets larger than will fit in
 | 
						|
the usual @code{char} data type.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Locales}, describes how selecting a particular country
 | 
						|
or language affects the behavior of the library.  For example, the locale
 | 
						|
affects collation sequences for strings and how monetary values are
 | 
						|
formatted.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Non-Local Exits}, contains descriptions of the @code{setjmp} and
 | 
						|
@code{longjmp} functions.  These functions provide a facility for
 | 
						|
@code{goto}-like jumps which can jump from one function to another.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Signal Handling}, tells you all about signals---what they are,
 | 
						|
how to establish a handler that is called when a particular kind of
 | 
						|
signal is delivered, and how to prevent signals from arriving during
 | 
						|
critical sections of your program.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Program Basics}, tells how your programs can access their
 | 
						|
command-line arguments and environment variables.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Processes}, contains information about how to start new processes
 | 
						|
and run programs.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Job Control}, describes functions for manipulating process groups
 | 
						|
and the controlling terminal.  This material is probably only of
 | 
						|
interest if you are writing a shell or other program which handles job
 | 
						|
control specially.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Name Service Switch}, describes the services which are available
 | 
						|
for looking up names in the system databases, how to determine which
 | 
						|
service is used for which database, and how these services are
 | 
						|
implemented so that contributors can design their own services.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{User Database}, and @ref{Group Database}, tell you how to access
 | 
						|
the system user and group databases.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{System Management}, describes functions for controlling and getting
 | 
						|
information about the hardware and software configuration your program
 | 
						|
is executing under.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{System Configuration}, tells you how you can get information about
 | 
						|
various operating system limits.  Most of these parameters are provided for
 | 
						|
compatibility with POSIX.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Library Summary}, gives a summary of all the functions, variables, and
 | 
						|
macros in the library, with complete data types and function prototypes,
 | 
						|
and says what standard or system each is derived from.
 | 
						|
 | 
						|
@item
 | 
						|
@ref{Maintenance}, explains how to build and install the GNU C library on
 | 
						|
your system, how to report any bugs you might find, and how to add new
 | 
						|
functions or port the library to a new system.
 | 
						|
@end itemize
 | 
						|
 | 
						|
If you already know the name of the facility you are interested in, you
 | 
						|
can look it up in @ref{Library Summary}.  This gives you a summary of
 | 
						|
its syntax and a pointer to where you can find a more detailed
 | 
						|
description.  This appendix is particularly useful if you just want to
 | 
						|
verify the order and type of arguments to a function, for example.  It
 | 
						|
also tells you what standard or system each function, variable, or macro
 | 
						|
is derived from.
 |