diff options
Diffstat (limited to 'manual/intro.texi')
-rw-r--r-- | manual/intro.texi | 1506 |
1 files changed, 0 insertions, 1506 deletions
diff --git a/manual/intro.texi b/manual/intro.texi deleted file mode 100644 index cc9c99f543..0000000000 --- a/manual/intro.texi +++ /dev/null @@ -1,1506 +0,0 @@ -@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 - -@Theglibc{}, 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 @gnusystems{}. - -The purpose of this manual is to tell you how to use the facilities -of @theglibc{}. 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. - -@Theglibc{} 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 @theglibc{} 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 @theglibc{} -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 @glibcadj{} 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 - -@Theglibc{} 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 @theglibc{} 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 - -@Theglibc{} 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 - -@Theglibc{} 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 @theglibc{}. -These include utilities for dealing with regular expressions and other -pattern matching facilities (@pxref{Pattern Matching}). - -@menu -* POSIX Safety Concepts:: Safety concepts from POSIX. -* Unsafe Features:: Features that make functions unsafe. -* Conditionally Safe Features:: Features that make functions unsafe - in the absence of workarounds. -* Other Safety Remarks:: Additional safety features and remarks. -@end menu - -@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 POSIX Safety Concepts, Unsafe Features, , POSIX -@subsubsection POSIX Safety Concepts -@cindex POSIX Safety Concepts - -This manual documents various safety properties of @glibcadj{} -functions, in lines that follow their prototypes and look like: - -@sampsafety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} - -The properties are assessed according to the criteria set forth in the -POSIX standard for such safety contexts as Thread-, Async-Signal- and -Async-Cancel- -Safety. Intuitive definitions of these properties, -attempting to capture the meaning of the standard definitions, follow. - -@itemize @bullet - -@item -@cindex MT-Safe -@cindex Thread-Safe -@code{MT-Safe} or Thread-Safe functions are safe to call in the presence -of other threads. MT, in MT-Safe, stands for Multi Thread. - -Being MT-Safe does not imply a function is atomic, nor that it uses any -of the memory synchronization mechanisms POSIX exposes to users. It is -even possible that calling MT-Safe functions in sequence does not yield -an MT-Safe combination. For example, having a thread call two MT-Safe -functions one right after the other does not guarantee behavior -equivalent to atomic execution of a combination of both functions, since -concurrent calls in other threads may interfere in a destructive way. - -Whole-program optimizations that could inline functions across library -interfaces may expose unsafe reordering, and so performing inlining -across the @glibcadj{} interface is not recommended. The documented -MT-Safety status is not guaranteed under whole-program optimization. -However, functions defined in user-visible headers are designed to be -safe for inlining. - - -@item -@cindex AS-Safe -@cindex Async-Signal-Safe -@code{AS-Safe} or Async-Signal-Safe functions are safe to call from -asynchronous signal handlers. AS, in AS-Safe, stands for Asynchronous -Signal. - -Many functions that are AS-Safe may set @code{errno}, or modify the -floating-point environment, because their doing so does not make them -unsuitable for use in signal handlers. However, programs could -misbehave should asynchronous signal handlers modify this thread-local -state, and the signal handling machinery cannot be counted on to -preserve it. Therefore, signal handlers that call functions that may -set @code{errno} or modify the floating-point environment @emph{must} -save their original values, and restore them before returning. - - -@item -@cindex AC-Safe -@cindex Async-Cancel-Safe -@code{AC-Safe} or Async-Cancel-Safe functions are safe to call when -asynchronous cancellation is enabled. AC in AC-Safe stands for -Asynchronous Cancellation. - -The POSIX standard defines only three functions to be AC-Safe, namely -@code{pthread_cancel}, @code{pthread_setcancelstate}, and -@code{pthread_setcanceltype}. At present @theglibc{} provides no -guarantees beyond these three functions, but does document which -functions are presently AC-Safe. This documentation is provided for use -by @theglibc{} developers. - -Just like signal handlers, cancellation cleanup routines must configure -the floating point environment they require. The routines cannot assume -a floating point environment, particularly when asynchronous -cancellation is enabled. If the configuration of the floating point -environment cannot be performed atomically then it is also possible that -the environment encountered is internally inconsistent. - - -@item -@cindex MT-Unsafe -@cindex Thread-Unsafe -@cindex AS-Unsafe -@cindex Async-Signal-Unsafe -@cindex AC-Unsafe -@cindex Async-Cancel-Unsafe -@code{MT-Unsafe}, @code{AS-Unsafe}, @code{AC-Unsafe} functions are not -safe to call within the safety contexts described above. Calling them -within such contexts invokes undefined behavior. - -Functions not explicitly documented as safe in a safety context should -be regarded as Unsafe. - - -@item -@cindex Preliminary -@code{Preliminary} safety properties are documented, indicating these -properties may @emph{not} be counted on in future releases of -@theglibc{}. - -Such preliminary properties are the result of an assessment of the -properties of our current implementation, rather than of what is -mandated and permitted by current and future standards. - -Although we strive to abide by the standards, in some cases our -implementation is safe even when the standard does not demand safety, -and in other cases our implementation does not meet the standard safety -requirements. The latter are most likely bugs; the former, when marked -as @code{Preliminary}, should not be counted on: future standards may -require changes that are not compatible with the additional safety -properties afforded by the current implementation. - -Furthermore, the POSIX standard does not offer a detailed definition of -safety. We assume that, by ``safe to call'', POSIX means that, as long -as the program does not invoke undefined behavior, the ``safe to call'' -function behaves as specified, and does not cause other functions to -deviate from their specified behavior. We have chosen to use its loose -definitions of safety, not because they are the best definitions to use, -but because choosing them harmonizes this manual with POSIX. - -Please keep in mind that these are preliminary definitions and -annotations, and certain aspects of the definitions are still under -discussion and might be subject to clarification or change. - -Over time, we envision evolving the preliminary safety notes into stable -commitments, as stable as those of our interfaces. As we do, we will -remove the @code{Preliminary} keyword from safety notes. As long as the -keyword remains, however, they are not to be regarded as a promise of -future behavior. - - -@end itemize - -Other keywords that appear in safety notes are defined in subsequent -sections. - - -@node Unsafe Features, Conditionally Safe Features, POSIX Safety Concepts, POSIX -@subsubsection Unsafe Features -@cindex Unsafe Features - -Functions that are unsafe to call in certain contexts are annotated with -keywords that document their features that make them unsafe to call. -AS-Unsafe features in this section indicate the functions are never safe -to call when asynchronous signals are enabled. AC-Unsafe features -indicate they are never safe to call when asynchronous cancellation is -enabled. There are no MT-Unsafe marks in this section. - -@itemize @bullet - -@item @code{lock} -@cindex lock - -Functions marked with @code{lock} as an AS-Unsafe feature may be -interrupted by a signal while holding a non-recursive lock. If the -signal handler calls another such function that takes the same lock, the -result is a deadlock. - -Functions annotated with @code{lock} as an AC-Unsafe feature may, if -cancelled asynchronously, fail to release a lock that would have been -released if their execution had not been interrupted by asynchronous -thread cancellation. Once a lock is left taken, attempts to take that -lock will block indefinitely. - - -@item @code{corrupt} -@cindex corrupt - -Functions marked with @code{corrupt} as an AS-Unsafe feature may corrupt -data structures and misbehave when they interrupt, or are interrupted -by, another such function. Unlike functions marked with @code{lock}, -these take recursive locks to avoid MT-Safety problems, but this is not -enough to stop a signal handler from observing a partially-updated data -structure. Further corruption may arise from the interrupted function's -failure to notice updates made by signal handlers. - -Functions marked with @code{corrupt} as an AC-Unsafe feature may leave -data structures in a corrupt, partially updated state. Subsequent uses -of the data structure may misbehave. - -@c A special case, probably not worth documenting separately, involves -@c reallocing, or even freeing pointers. Any case involving free could -@c be easily turned into an ac-safe leak by resetting the pointer before -@c releasing it; I don't think we have any case that calls for this sort -@c of fixing. Fixing the realloc cases would require a new interface: -@c instead of @code{ptr=realloc(ptr,size)} we'd have to introduce -@c @code{acsafe_realloc(&ptr,size)} that would modify ptr before -@c releasing the old memory. The ac-unsafe realloc could be implemented -@c in terms of an internal interface with this semantics (say -@c __acsafe_realloc), but since realloc can be overridden, the function -@c we call to implement realloc should not be this internal interface, -@c but another internal interface that calls __acsafe_realloc if realloc -@c was not overridden, and calls the overridden realloc with async -@c cancel disabled. --lxoliva - - -@item @code{heap} -@cindex heap - -Functions marked with @code{heap} may call heap memory management -functions from the @code{malloc}/@code{free} family of functions and are -only as safe as those functions. This note is thus equivalent to: - -@sampsafety{@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} - - -@c Check for cases that should have used plugin instead of or in -@c addition to this. Then, after rechecking gettext, adjust i18n if -@c needed. -@item @code{dlopen} -@cindex dlopen - -Functions marked with @code{dlopen} use the dynamic loader to load -shared libraries into the current execution image. This involves -opening files, mapping them into memory, allocating additional memory, -resolving symbols, applying relocations and more, all of this while -holding internal dynamic loader locks. - -The locks are enough for these functions to be AS- and AC-Unsafe, but -other issues may arise. At present this is a placeholder for all -potential safety issues raised by @code{dlopen}. - -@c dlopen runs init and fini sections of the module; does this mean -@c dlopen always implies plugin? - - -@item @code{plugin} -@cindex plugin - -Functions annotated with @code{plugin} may run code from plugins that -may be external to @theglibc{}. Such plugin functions are assumed to be -MT-Safe, AS-Unsafe and AC-Unsafe. Examples of such plugins are stack -@cindex NSS -unwinding libraries, name service switch (NSS) and character set -@cindex iconv -conversion (iconv) back-ends. - -Although the plugins mentioned as examples are all brought in by means -of dlopen, the @code{plugin} keyword does not imply any direct -involvement of the dynamic loader or the @code{libdl} interfaces, those -are covered by @code{dlopen}. For example, if one function loads a -module and finds the addresses of some of its functions, while another -just calls those already-resolved functions, the former will be marked -with @code{dlopen}, whereas the latter will get the @code{plugin}. When -a single function takes all of these actions, then it gets both marks. - - -@item @code{i18n} -@cindex i18n - -Functions marked with @code{i18n} may call internationalization -functions of the @code{gettext} family and will be only as safe as those -functions. This note is thus equivalent to: - -@sampsafety{@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascudlopen{}}@acunsafe{@acucorrupt{}}} - - -@item @code{timer} -@cindex timer - -Functions marked with @code{timer} use the @code{alarm} function or -similar to set a time-out for a system call or a long-running operation. -In a multi-threaded program, there is a risk that the time-out signal -will be delivered to a different thread, thus failing to interrupt the -intended thread. Besides being MT-Unsafe, such functions are always -AS-Unsafe, because calling them in signal handlers may interfere with -timers set in the interrupted code, and AC-Unsafe, because there is no -safe way to guarantee an earlier timer will be reset in case of -asynchronous cancellation. - -@end itemize - - -@node Conditionally Safe Features, Other Safety Remarks, Unsafe Features, POSIX -@subsubsection Conditionally Safe Features -@cindex Conditionally Safe Features - -For some features that make functions unsafe to call in certain -contexts, there are known ways to avoid the safety problem other than -refraining from calling the function altogether. The keywords that -follow refer to such features, and each of their definitions indicate -how the whole program needs to be constrained in order to remove the -safety problem indicated by the keyword. Only when all the reasons that -make a function unsafe are observed and addressed, by applying the -documented constraints, does the function become safe to call in a -context. - -@itemize @bullet - -@item @code{init} -@cindex init - -Functions marked with @code{init} as an MT-Unsafe feature perform -MT-Unsafe initialization when they are first called. - -Calling such a function at least once in single-threaded mode removes -this specific cause for the function to be regarded as MT-Unsafe. If no -other cause for that remains, the function can then be safely called -after other threads are started. - -Functions marked with @code{init} as an AS- or AC-Unsafe feature use the -internal @code{libc_once} machinery or similar to initialize internal -data structures. - -If a signal handler interrupts such an initializer, and calls any -function that also performs @code{libc_once} initialization, it will -deadlock if the thread library has been loaded. - -Furthermore, if an initializer is partially complete before it is -canceled or interrupted by a signal whose handler requires the same -initialization, some or all of the initialization may be performed more -than once, leaking resources or even resulting in corrupt internal data. - -Applications that need to call functions marked with @code{init} as an -AS- or AC-Unsafe feature should ensure the initialization is performed -before configuring signal handlers or enabling cancellation, so that the -AS- and AC-Safety issues related with @code{libc_once} do not arise. - -@c We may have to extend the annotations to cover conditions in which -@c initialization may or may not occur, since an initial call in a safe -@c context is no use if the initialization doesn't take place at that -@c time: it doesn't remove the risk for later calls. - - -@item @code{race} -@cindex race - -Functions annotated with @code{race} as an MT-Safety issue operate on -objects in ways that may cause data races or similar forms of -destructive interference out of concurrent execution. In some cases, -the objects are passed to the functions by users; in others, they are -used by the functions to return values to users; in others, they are not -even exposed to users. - -We consider access to objects passed as (indirect) arguments to -functions to be data race free. The assurance of data race free objects -is the caller's responsibility. We will not mark a function as -MT-Unsafe or AS-Unsafe if it misbehaves when users fail to take the -measures required by POSIX to avoid data races when dealing with such -objects. As a general rule, if a function is documented as reading from -an object passed (by reference) to it, or modifying it, users ought to -use memory synchronization primitives to avoid data races just as they -would should they perform the accesses themselves rather than by calling -the library function. @code{FILE} streams are the exception to the -general rule, in that POSIX mandates the library to guard against data -races in many functions that manipulate objects of this specific opaque -type. We regard this as a convenience provided to users, rather than as -a general requirement whose expectations should extend to other types. - -In order to remind users that guarding certain arguments is their -responsibility, we will annotate functions that take objects of certain -types as arguments. We draw the line for objects passed by users as -follows: objects whose types are exposed to users, and that users are -expected to access directly, such as memory buffers, strings, and -various user-visible @code{struct} types, do @emph{not} give reason for -functions to be annotated with @code{race}. It would be noisy and -redundant with the general requirement, and not many would be surprised -by the library's lack of internal guards when accessing objects that can -be accessed directly by users. - -As for objects that are opaque or opaque-like, in that they are to be -manipulated only by passing them to library functions (e.g., -@code{FILE}, @code{DIR}, @code{obstack}, @code{iconv_t}), there might be -additional expectations as to internal coordination of access by the -library. We will annotate, with @code{race} followed by a colon and the -argument name, functions that take such objects but that do not take -care of synchronizing access to them by default. For example, -@code{FILE} stream @code{unlocked} functions will be annotated, but -those that perform implicit locking on @code{FILE} streams by default -will not, even though the implicit locking may be disabled on a -per-stream basis. - -In either case, we will not regard as MT-Unsafe functions that may -access user-supplied objects in unsafe ways should users fail to ensure -the accesses are well defined. The notion prevails that users are -expected to safeguard against data races any user-supplied objects that -the library accesses on their behalf. - -@c The above describes @mtsrace; @mtasurace is described below. - -This user responsibility does not apply, however, to objects controlled -by the library itself, such as internal objects and static buffers used -to return values from certain calls. When the library doesn't guard -them against concurrent uses, these cases are regarded as MT-Unsafe and -AS-Unsafe (although the @code{race} mark under AS-Unsafe will be omitted -as redundant with the one under MT-Unsafe). As in the case of -user-exposed objects, the mark may be followed by a colon and an -identifier. The identifier groups all functions that operate on a -certain unguarded object; users may avoid the MT-Safety issues related -with unguarded concurrent access to such internal objects by creating a -non-recursive mutex related with the identifier, and always holding the -mutex when calling any function marked as racy on that identifier, as -they would have to should the identifier be an object under user -control. The non-recursive mutex avoids the MT-Safety issue, but it -trades one AS-Safety issue for another, so use in asynchronous signals -remains undefined. - -When the identifier relates to a static buffer used to hold return -values, the mutex must be held for as long as the buffer remains in use -by the caller. Many functions that return pointers to static buffers -offer reentrant variants that store return values in caller-supplied -buffers instead. In some cases, such as @code{tmpname}, the variant is -chosen not by calling an alternate entry point, but by passing a -non-@code{NULL} pointer to the buffer in which the returned values are -to be stored. These variants are generally preferable in multi-threaded -programs, although some of them are not MT-Safe because of other -internal buffers, also documented with @code{race} notes. - - -@item @code{const} -@cindex const - -Functions marked with @code{const} as an MT-Safety issue non-atomically -modify internal objects that are better regarded as constant, because a -substantial portion of @theglibc{} accesses them without -synchronization. Unlike @code{race}, that causes both readers and -writers of internal objects to be regarded as MT-Unsafe and AS-Unsafe, -this mark is applied to writers only. Writers remain equally MT- and -AS-Unsafe to call, but the then-mandatory constness of objects they -modify enables readers to be regarded as MT-Safe and AS-Safe (as long as -no other reasons for them to be unsafe remain), since the lack of -synchronization is not a problem when the objects are effectively -constant. - -The identifier that follows the @code{const} mark will appear by itself -as a safety note in readers. Programs that wish to work around this -safety issue, so as to call writers, may use a non-recursve -@code{rwlock} associated with the identifier, and guard @emph{all} calls -to functions marked with @code{const} followed by the identifier with a -write lock, and @emph{all} calls to functions marked with the identifier -by itself with a read lock. The non-recursive locking removes the -MT-Safety problem, but it trades one AS-Safety problem for another, so -use in asynchronous signals remains undefined. - -@c But what if, instead of marking modifiers with const:id and readers -@c with just id, we marked writers with race:id and readers with ro:id? -@c Instead of having to define each instance of “id”, we'd have a -@c general pattern governing all such “id”s, wherein race:id would -@c suggest the need for an exclusive/write lock to make the function -@c safe, whereas ro:id would indicate “id” is expected to be read-only, -@c but if any modifiers are called (while holding an exclusive lock), -@c then ro:id-marked functions ought to be guarded with a read lock for -@c safe operation. ro:env or ro:locale, for example, seems to convey -@c more clearly the expectations and the meaning, than just env or -@c locale. - - -@item @code{sig} -@cindex sig - -Functions marked with @code{sig} as a MT-Safety issue (that implies an -identical AS-Safety issue, omitted for brevity) may temporarily install -a signal handler for internal purposes, which may interfere with other -uses of the signal, identified after a colon. - -This safety problem can be worked around by ensuring that no other uses -of the signal will take place for the duration of the call. Holding a -non-recursive mutex while calling all functions that use the same -temporary signal; blocking that signal before the call and resetting its -handler afterwards is recommended. - -There is no safe way to guarantee the original signal handler is -restored in case of asynchronous cancellation, therefore so-marked -functions are also AC-Unsafe. - -@c fixme: at least deferred cancellation should get it right, and would -@c obviate the restoring bit below, and the qualifier above. - -Besides the measures recommended to work around the MT- and AS-Safety -problem, in order to avert the cancellation problem, disabling -asynchronous cancellation @emph{and} installing a cleanup handler to -restore the signal to the desired state and to release the mutex are -recommended. - - -@item @code{term} -@cindex term - -Functions marked with @code{term} as an MT-Safety issue may change the -terminal settings in the recommended way, namely: call @code{tcgetattr}, -modify some flags, and then call @code{tcsetattr}; this creates a window -in which changes made by other threads are lost. Thus, functions marked -with @code{term} are MT-Unsafe. The same window enables changes made by -asynchronous signals to be lost. These functions are also AS-Unsafe, -but the corresponding mark is omitted as redundant. - -It is thus advisable for applications using the terminal to avoid -concurrent and reentrant interactions with it, by not using it in signal -handlers or blocking signals that might use it, and holding a lock while -calling these functions and interacting with the terminal. This lock -should also be used for mutual exclusion with functions marked with -@code{@mtasurace{:tcattr(fd)}}, where @var{fd} is a file descriptor for -the controlling terminal. The caller may use a single mutex for -simplicity, or use one mutex per terminal, even if referenced by -different file descriptors. - -Functions marked with @code{term} as an AC-Safety issue are supposed to -restore terminal settings to their original state, after temporarily -changing them, but they may fail to do so if cancelled. - -@c fixme: at least deferred cancellation should get it right, and would -@c obviate the restoring bit below, and the qualifier above. - -Besides the measures recommended to work around the MT- and AS-Safety -problem, in order to avert the cancellation problem, disabling -asynchronous cancellation @emph{and} installing a cleanup handler to -restore the terminal settings to the original state and to release the -mutex are recommended. - - -@end itemize - - -@node Other Safety Remarks, , Conditionally Safe Features, POSIX -@subsubsection Other Safety Remarks -@cindex Other Safety Remarks - -Additional keywords may be attached to functions, indicating features -that do not make a function unsafe to call, but that may need to be -taken into account in certain classes of programs: - -@itemize @bullet - -@item @code{locale} -@cindex locale - -Functions annotated with @code{locale} as an MT-Safety issue read from -the locale object without any form of synchronization. Functions -annotated with @code{locale} called concurrently with locale changes may -behave in ways that do not correspond to any of the locales active -during their execution, but an unpredictable mix thereof. - -We do not mark these functions as MT- or AS-Unsafe, however, because -functions that modify the locale object are marked with -@code{const:locale} and regarded as unsafe. Being unsafe, the latter -are not to be called when multiple threads are running or asynchronous -signals are enabled, and so the locale can be considered effectively -constant in these contexts, which makes the former safe. - -@c Should the locking strategy suggested under @code{const} be used, -@c failure to guard locale uses is not as fatal as data races in -@c general: unguarded uses will @emph{not} follow dangling pointers or -@c access uninitialized, unmapped or recycled memory. Each access will -@c read from a consistent locale object that is or was active at some -@c point during its execution. Without synchronization, however, it -@c cannot even be assumed that, after a change in locale, earlier -@c locales will no longer be used, even after the newly-chosen one is -@c used in the thread. Nevertheless, even though unguarded reads from -@c the locale will not violate type safety, functions that access the -@c locale multiple times may invoke all sorts of undefined behavior -@c because of the unexpected locale changes. - - -@item @code{env} -@cindex env - -Functions marked with @code{env} as an MT-Safety issue access the -environment with @code{getenv} or similar, without any guards to ensure -safety in the presence of concurrent modifications. - -We do not mark these functions as MT- or AS-Unsafe, however, because -functions that modify the environment are all marked with -@code{const:env} and regarded as unsafe. Being unsafe, the latter are -not to be called when multiple threads are running or asynchronous -signals are enabled, and so the environment can be considered -effectively constant in these contexts, which makes the former safe. - - -@item @code{hostid} -@cindex hostid - -The function marked with @code{hostid} as an MT-Safety issue reads from -the system-wide data structures that hold the ``host ID'' of the -machine. These data structures cannot generally be modified atomically. -Since it is expected that the ``host ID'' will not normally change, the -function that reads from it (@code{gethostid}) is regarded as safe, -whereas the function that modifies it (@code{sethostid}) is marked with -@code{@mtasuconst{:@mtshostid{}}}, indicating it may require special -care if it is to be called. In this specific case, the special care -amounts to system-wide (not merely intra-process) coordination. - - -@item @code{sigintr} -@cindex sigintr - -Functions marked with @code{sigintr} as an MT-Safety issue access the -@code{_sigintr} internal data structure without any guards to ensure -safety in the presence of concurrent modifications. - -We do not mark these functions as MT- or AS-Unsafe, however, because -functions that modify the this data structure are all marked with -@code{const:sigintr} and regarded as unsafe. Being unsafe, the latter -are not to be called when multiple threads are running or asynchronous -signals are enabled, and so the data structure can be considered -effectively constant in these contexts, which makes the former safe. - - -@item @code{fd} -@cindex fd - -Functions annotated with @code{fd} as an AC-Safety issue may leak file -descriptors if asynchronous thread cancellation interrupts their -execution. - -Functions that allocate or deallocate file descriptors will generally be -marked as such. Even if they attempted to protect the file descriptor -allocation and deallocation with cleanup regions, allocating a new -descriptor and storing its number where the cleanup region could release -it cannot be performed as a single atomic operation. Similarly, -releasing the descriptor and taking it out of the data structure -normally responsible for releasing it cannot be performed atomically. -There will always be a window in which the descriptor cannot be released -because it was not stored in the cleanup handler argument yet, or it was -already taken out before releasing it. It cannot be taken out after -release: an open descriptor could mean either that the descriptor still -has to be closed, or that it already did so but the descriptor was -reallocated by another thread or signal handler. - -Such leaks could be internally avoided, with some performance penalty, -by temporarily disabling asynchronous thread cancellation. However, -since callers of allocation or deallocation functions would have to do -this themselves, to avoid the same sort of leak in their own layer, it -makes more sense for the library to assume they are taking care of it -than to impose a performance penalty that is redundant when the problem -is solved in upper layers, and insufficient when it is not. - -This remark by itself does not cause a function to be regarded as -AC-Unsafe. However, cumulative effects of such leaks may pose a -problem for some programs. If this is the case, suspending asynchronous -cancellation for the duration of calls to such functions is recommended. - - -@item @code{mem} -@cindex mem - -Functions annotated with @code{mem} as an AC-Safety issue may leak -memory if asynchronous thread cancellation interrupts their execution. - -The problem is similar to that of file descriptors: there is no atomic -interface to allocate memory and store its address in the argument to a -cleanup handler, or to release it and remove its address from that -argument, without at least temporarily disabling asynchronous -cancellation, which these functions do not do. - -This remark does not by itself cause a function to be regarded as -generally AC-Unsafe. However, cumulative effects of such leaks may be -severe enough for some programs that disabling asynchronous cancellation -for the duration of calls to such functions may be required. - - -@item @code{cwd} -@cindex cwd - -Functions marked with @code{cwd} as an MT-Safety issue may temporarily -change the current working directory during their execution, which may -cause relative pathnames to be resolved in unexpected ways in other -threads or within asynchronous signal or cancellation handlers. - -This is not enough of a reason to mark so-marked functions as MT- or -AS-Unsafe, but when this behavior is optional (e.g., @code{nftw} with -@code{FTW_CHDIR}), avoiding the option may be a good alternative to -using full pathnames or file descriptor-relative (e.g. @code{openat}) -system calls. - - -@item @code{!posix} -@cindex !posix - -This remark, as an MT-, AS- or AC-Safety note to a function, indicates -the safety status of the function is known to differ from the specified -status in the POSIX standard. For example, POSIX does not require a -function to be Safe, but our implementation is, or vice-versa. - -For the time being, the absence of this remark does not imply the safety -properties we documented are identical to those mandated by POSIX for -the corresponding functions. - - -@item @code{:identifier} -@cindex :identifier - -Annotations may sometimes be followed by identifiers, intended to group -several functions that e.g. access the data structures in an unsafe way, -as in @code{race} and @code{const}, or to provide more specific -information, such as naming a signal in a function marked with -@code{sig}. It is envisioned that it may be applied to @code{lock} and -@code{corrupt} as well in the future. - -In most cases, the identifier will name a set of functions, but it may -name global objects or function arguments, or identifiable properties or -logical components associated with them, with a notation such as -e.g. @code{:buf(arg)} to denote a buffer associated with the argument -@var{arg}, or @code{:tcattr(fd)} to denote the terminal attributes of a -file descriptor @var{fd}. - -The most common use for identifiers is to provide logical groups of -functions and arguments that need to be protected by the same -synchronization primitive in order to ensure safe operation in a given -context. - - -@item @code{/condition} -@cindex /condition - -Some safety annotations may be conditional, in that they only apply if a -boolean expression involving arguments, global variables or even the -underlying kernel evaluates to true. Such conditions as -@code{/hurd} or @code{/!linux!bsd} indicate the preceding marker only -applies when the underlying kernel is the HURD, or when it is neither -Linux nor a BSD kernel, respectively. @code{/!ps} and -@code{/one_per_line} indicate the preceding marker only applies when -argument @var{ps} is NULL, or global variable @var{one_per_line} is -nonzero. - -When all marks that render a function unsafe are adorned with such -conditions, and none of the named conditions hold, then the function can -be regarded as safe. - - -@end itemize - - -@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 - -@Theglibc{} 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}). - -@Theglibc{} 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. - -@Theglibc{} 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 -@theglibc{}. - -@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 @theglibc{}, 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 - -@Theglibc{} 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 @glibcadj{} -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. -@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. - -@c The chapter overview ordering is: -@c Error Reporting (2) -@c Virtual Memory Allocation and Paging (3) -@c Character Handling (4) -@c Strings and Array Utilities (5) -@c Character Set Handling (6) -@c Locales and Internationalization (7) -@c Searching and Sorting (9) -@c Pattern Matching (10) -@c Input/Output Overview (11) -@c Input/Output on Streams (12) -@c Low-level Input/Ooutput (13) -@c File System Interface (14) -@c Pipes and FIFOs (15) -@c Sockets (16) -@c Low-Level Terminal Interface (17) -@c Syslog (18) -@c Mathematics (19) -@c Aritmetic Functions (20) -@c Date and Time (21) -@c Non-Local Exist (23) -@c Signal Handling (24) -@c The Basic Program/System Interface (25) -@c Processes (26) -@c Job Control (28) -@c System Databases and Name Service Switch (29) -@c Users and Groups (30) -- References `User Database' and `Group Database' -@c System Management (31) -@c System Configuration Parameters (32) -@c C Language Facilities in the Library (AA) -@c Summary of Library Facilities (AB) -@c Installing (AC) -@c Library Maintenance (AD) - -@c The following chapters need overview text to be added: -@c Message Translation (8) -@c Resource Usage And Limitations (22) -@c Inter-Process Communication (27) -@c DES Encryption and Password Handling (33) -@c Debugging support (34) -@c POSIX Threads (35) -@c Internal Probes (36) -@c Platform-specific facilities (AE) -@c Contributors to (AF) -@c Free Software Needs Free Documentation (AG) -@c GNU Lesser General Public License (AH) -@c GNU Free Documentation License (AI) - -@itemize @bullet -@item -@ref{Error Reporting}, describes how errors detected by the library -are reported. - - -@item -@ref{Memory}, describes @theglibc{}'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{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{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{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{Date and Time}, describes functions for measuring both calendar time -and CPU time, as well as functions for setting alarms and timers. - -@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{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{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{Installation}, explains how to build and install @theglibc{} on -your system, and how to report any bugs you might find. - -@item -@ref{Maintenance}, explains 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. |