www.delorie.com/gnu/docs/glibc/libc.html   search  
 
Buy the book!


The GNU C Library

[Top] [Contents] [Index] [ ? ]

The GNU C Library

This is Edition 0.10, last updated 2001-07-06, of The GNU C Library Reference Manual, for Version 2.3.x of the GNU C Library.

1. Introduction  Purpose of the GNU C Library.
2. Error Reporting  How library functions report errors.
3. Virtual Memory Allocation And Paging  Allocating virtual memory and controlling paging.
4. Character Handling  Character testing and conversion functions.
5. String and Array Utilities  Utilities for copying and comparing strings and arrays.
6. Character Set Handling  Support for extended character sets.
7. Locales and Internationalization  The country and language can affect the behavior of library functions.
8. Message Translation  How to make the program speak the user's language.
9. Searching and Sorting  General searching and sorting functions.
10. Pattern Matching  Matching shell "globs" and regular expressions.
11. Input/Output Overview  Introduction to the I/O facilities.
12. Input/Output on Streams  High-level, portable I/O facilities.
13. Low-Level Input/Output  Low-level, less portable I/O.
14. File System Interface  Functions for manipulating files.
15. Pipes and FIFOs  A simple interprocess communication mechanism.
16. Sockets  A more complicated IPC mechanism, with networking support.
17. Low-Level Terminal Interface  How to change the characteristics of a terminal device.
18. Syslog  System logging and messaging.
19. Mathematics  Math functions, useful constants, random numbers.
20. Arithmetic Functions  Low level arithmetic functions.
21. Date and Time  Functions for getting the date and time and formatting them nicely.
22. Resource Usage And Limitation  Functions for examining resource usage and getting and setting limits.
23. Non-Local Exits  Jumping out of nested function calls.
24. Signal Handling  How to send, block, and handle signals.
25. The Basic Program/System Interface  Writing the beginning and end of your program.
26. Processes  How to create processes and run other programs.
27. Job Control  All about process groups and sessions.
28. System Databases and Name Service Switch  Accessing system databases.
29. Users and Groups  How users are identified and classified.
30. System Management  Controlling the system and getting information about it.
31. System Configuration Parameters  Parameters describing operating system limits.
32. DES Encryption and Password Handling  DES encryption and password handling.
33. Debugging support  Functions to help debugging applications.

Appendices

A. C Language Facilities in the Library  C language features provided by the library.
B. Summary of Library Facilities  A summary showing the syntax, header file, and derivation of each library feature.
C. Installing the GNU C Library  How to install the GNU C library.
D. Library Maintenance  How to enhance and port the GNU C Library.
E. Contributors to the GNU C Library  Who wrote what parts of the GNU C library.
F. Free Software Needs Free Documentation  
G. GNU Lesser General Public License  The GNU Lesser General Public License says how you can copy and share the GNU C Library.
H. GNU Free Documentation License  This manual is under the GNU Free Documentation License.

Indices

Concept Index  Index of concepts and names.
Type Index  Index of types and type qualifiers.
Function and Macro Index  Index of functions and function-like macros.
Variable and Constant Macro Index  Index of variables and variable-like macros.
Program and File Index  Index of programs and files.

 -- The Detailed Node Listing ---

Introduction

1.1 Getting Started  What this manual is for and how to use it.
1.2 Standards and Portability  Standards and sources upon which the GNU C library is based.
1.3 Using the Library  Some practical uses for the library.
1.4 Roadmap to the Manual  Overview of the remaining chapters in this manual.

Standards and Portability

1.2.1 ISO C  The international standard for the C programming language.
1.2.2 POSIX (The Portable Operating System Interface)  The ISO/IEC 9945 (aka IEEE 1003) standards for operating systems.
1.2.3 Berkeley Unix  BSD and SunOS.
1.2.4 SVID (The System V Interface Description)  The System V Interface Description.
1.2.5 XPG (The X/Open Portability Guide)  The X/Open Portability Guide.

Using the Library

1.3.1 Header Files  How to include the header files in your programs.
1.3.2 Macro Definitions of Functions  Some functions in the library may really be implemented as macros.
1.3.3 Reserved Names  The C standard reserves some names for the library, and some for users.
1.3.4 Feature Test Macros  How to control what names are defined.

Error Reporting

2.1 Checking for Errors  How errors are reported by library functions.
2.2 Error Codes  Error code macros; all of these expand into integer constant values.
2.3 Error Messages  Mapping error codes onto error messages.

Memory

3.1 Process Memory Concepts  An introduction to concepts and terminology.
3.2 Allocating Storage For Program Data  Allocating storage for your program data
3.4 Locking Pages  Preventing page faults
3.3 Resizing the Data Segment  brk, sbrk

Memory Allocation

3.2.1 Memory Allocation in C Programs  How to get different kinds of allocation in C.
3.2.2 Unconstrained Allocation  The malloc facility allows fully general dynamic allocation.
3.2.3 Allocation Debugging  Finding memory leaks and not freed memory.
3.2.4 Obstacks  Obstacks are less general than malloc but more efficient and convenient.
3.2.5 Automatic Storage with Variable Size  Allocation of variable-sized blocks of automatic storage that are freed when the calling function returns.

Unconstrained Allocation

3.2.2.1 Basic Memory Allocation  Simple use of malloc.
3.2.2.2 Examples of malloc  Examples of malloc. xmalloc.
3.2.2.3 Freeing Memory Allocated with malloc  Use free to free a block you got with malloc.
3.2.2.4 Changing the Size of a Block  Use realloc to make a block bigger or smaller.
3.2.2.5 Allocating Cleared Space  Use calloc to allocate a block and clear it.
3.2.2.6 Efficiency Considerations for malloc  Efficiency considerations in use of these functions.
3.2.2.7 Allocating Aligned Memory Blocks  Allocating specially aligned memory.
3.2.2.8 Malloc Tunable Parameters  Use mallopt to adjust allocation parameters.
3.2.2.9 Heap Consistency Checking  Automatic checking for errors.
3.2.2.10 Memory Allocation Hooks  You can use these hooks for debugging programs that use malloc.
3.2.2.11 Statistics for Memory Allocation with malloc  Getting information about how much memory your program is using.
3.2.2.12 Summary of malloc-Related Functions  Summary of malloc and related functions.

Allocation Debugging

3.2.3.1 How to install the tracing functionality  
3.2.3.2 Example program excerpts  Example programs excerpts.
3.2.3.3 Some more or less clever ideas  
3.2.3.4 Interpreting the traces  What do all these lines mean?

Obstacks

3.2.4.1 Creating Obstacks  How to declare an obstack in your program.
3.2.4.2 Preparing for Using Obstacks  Preparations needed before you can use obstacks.
3.2.4.3 Allocation in an Obstack  Allocating objects in an obstack.
3.2.4.4 Freeing Objects in an Obstack  Freeing objects in an obstack.
3.2.4.5 Obstack Functions and Macros  The obstack functions are both functions and macros.
3.2.4.6 Growing Objects  Making an object bigger by stages.
3.2.4.7 Extra Fast Growing Objects  Extra-high-efficiency (though more complicated) growing objects.
3.2.4.8 Status of an Obstack  Inquiries about the status of an obstack.
3.2.4.9 Alignment of Data in Obstacks  Controlling alignment of objects in obstacks.
3.2.4.10 Obstack Chunks  How obstacks obtain and release chunks; efficiency considerations.
3.2.4.11 Summary of Obstack Functions  

Variable Size Automatic

3.2.5.1 alloca Example  Example of using alloca.
3.2.5.2 Advantages of alloca  Reasons to use alloca.
3.2.5.3 Disadvantages of alloca  Reasons to avoid alloca.
3.2.5.4 GNU C Variable-Size Arrays  Only in GNU C, here is an alternative method of allocating dynamically and freeing automatically.

Locking Pages

3.4.1 Why Lock Pages  Reasons to read this section.
3.4.2 Locked Memory Details  Everything you need to know locked memory
3.4.3 Functions To Lock And Unlock Pages  Here's how to do it.

Character Handling

4.1 Classification of Characters  Testing whether characters are letters, digits, punctuation, etc.

4.2 Case Conversion  Case mapping, and the like.
4.3 Character class determination for wide characters  
4.4 Notes on using the wide character classes  
4.5 Mapping of wide characters.  

String and Array Utilities

5.1 Representation of Strings  Introduction to basic concepts.
5.2 String and Array Conventions  Whether to use a string function or an arbitrary array function.
5.3 String Length  Determining the length of a string.
5.4 Copying and Concatenation  Functions to copy the contents of strings and arrays.
5.5 String/Array Comparison  Functions for byte-wise and character-wise comparison.
5.6 Collation Functions  Functions for collating strings.
5.7 Search Functions  Searching for a specific element or substring.
5.8 Finding Tokens in a String  Splitting a string into tokens by looking for delimiters.
5.9 strfry  Function for flash-cooking a string.
5.10 Trivial Encryption  Obscuring data.
5.11 Encode Binary Data  Encoding and Decoding of Binary Data.
5.12 Argz and Envz Vectors  Null-separated string vectors.

Argz and Envz Vectors

5.12.1 Argz Functions  Operations on argz vectors.
5.12.2 Envz Functions  Additional operations on environment vectors.

Character Set Handling

6.1 Introduction to Extended Characters  
6.2 Overview about Character Handling Functions  
6.3 Restartable Multibyte Conversion Functions  Restartable multibyte conversion Functions.
6.4 Non-reentrant Conversion Function  
6.5 Generic Charset Conversion  

Restartable multibyte conversion

6.3.1 Selecting the conversion and its properties  
6.3.2 Representing the state of the conversion  
6.3.3 Converting Single Characters  
6.3.4 Converting Multibyte and Wide Character Strings  
6.3.5 A Complete Multibyte Conversion Example  

Non-reentrant Conversion

6.4.1 Non-reentrant Conversion of Single Characters  
6.4.2 Non-reentrant Conversion of Strings  
6.4.3 States in Non-reentrant Functions  

Generic Charset Conversion

6.5.1 Generic Character Set Conversion Interface  
6.5.2 A complete iconv example  
6.5.3 Some Details about other iconv Implementations  
6.5.4 The iconv Implementation in the GNU C library  

Locales

7.1 What Effects a Locale Has  Actions affected by the choice of locale.
7.2 Choosing a Locale  How the user specifies a locale.
7.3 Categories of Activities that Locales Affect  Different purposes for which you can select a locale.
7.4 How Programs Set the Locale  How a program specifies the locale with library functions.
7.5 Standard Locales  Locale names available on all systems.
7.6 Accessing Locale Information  How to access the information for the locale.
7.7 A dedicated function to format numbers  
7.8 Yes-or-No Questions  Check a Response against the locale.

Locale Information

7.6.1 localeconv: It is portable but ...  ISO C's localeconv.
7.6.2 Pinpoint Access to Locale Data  X/Open's nl_langinfo.

The Lame Way to Locale Data

7.6.1.1 Generic Numeric Formatting Parameters  Parameters for formatting numbers and currency amounts.
7.6.1.2 Printing the Currency Symbol  How to print the symbol that identifies an amount of money (e.g. `$').
7.6.1.3 Printing the Sign of a Monetary Amount  How to print the (positive or negative) sign for a monetary amount, if one exists.

Message Translation

8.1 X/Open Message Catalog Handling  The catgets family of functions.
8.2 The Uniforum approach to Message Translation  The gettext family of functions.

Message catalogs a la X/Open

8.1.1 The catgets function family  
8.1.2 Format of the message catalog files  
8.1.3 Generate Message Catalogs files  How to generate message catalogs files which can be used by the functions.
8.1.4 How to use the catgets interface  

The Uniforum approach

8.2.1 The gettext family of functions  
8.2.2 Programs to handle message catalogs for gettext  

Message catalogs with gettext

8.2.1.1 What has to be done to translate a message?  
8.2.1.2 How to determine which catalog to be used  
8.2.1.3 Additional functions for more complicated situations  
8.2.1.4 How to specify the output character set gettext uses  How to specify the output character set
                                    gettext uses.
8.2.1.5 How to use gettext in GUI programs  
8.2.1.6 User influence on gettext  The possibilities of the user to influence the way gettext works.

Searching and Sorting

9.1 Defining the Comparison Function  Defining how to compare two objects. Since the sort and search facilities are general, you have to specify the ordering.
9.2 Array Search Function  The bsearch function.
9.3 Array Sort Function  The qsort function.
9.4 Searching and Sorting Example  An example program.
9.5 The hsearch function.  
9.6 The tsearch function.  

Pattern Matching

10.1 Wildcard Matching  Matching a wildcard pattern against a single string.
10.2 Globbing  Finding the files that match a wildcard pattern.
10.3 Regular Expression Matching  Matching regular expressions against strings.
10.4 Shell-Style Word Expansion  Expanding shell variables, nested commands, arithmetic, and wildcards. This is what the shell does with shell commands.

Globbing

10.2.1 Calling glob  Basic use of glob.
10.2.2 Flags for Globbing  Flags that enable various options in glob.
10.2.3 More Flags for Globbing  GNU specific extensions to glob.

Regular Expressions

10.3.1 POSIX Regular Expression Compilation  Using regcomp to prepare to match.
10.3.2 Flags for POSIX Regular Expressions  Syntax variations for regcomp.
10.3.3 Matching a Compiled POSIX Regular Expression  Using regexec to match the compiled pattern that you get from regcomp.
10.3.4 Match Results with Subexpressions  Finding which parts of the string were matched.
10.3.5 Complications in Subexpression Matching  Find points of which parts were matched.
10.3.6 POSIX Regexp Matching Cleanup  Freeing storage; reporting errors.

Word Expansion

10.4.1 The Stages of Word Expansion  What word expansion does to a string.
10.4.2 Calling wordexp  How to call wordexp.
10.4.3 Flags for Word Expansion  Options you can enable in wordexp.
10.4.4 wordexp Example  A sample program that does word expansion.
10.4.5 Details of Tilde Expansion  Details of how tilde expansion works.
10.4.6 Details of Variable Substitution  Different types of variable substitution.

I/O Overview

11.1 Input/Output Concepts  Some basic information and terminology.
11.2 File Names  How to refer to a file.

I/O Concepts

11.1.1 Streams and File Descriptors  The GNU Library provides two ways to access the contents of files.
11.1.2 File Position  The number of bytes from the beginning of the file.

File Names

11.2.1 Directories  Directories contain entries for files.
11.2.2 File Name Resolution  A file name specifies how to look up a file.
11.2.3 File Name Errors  Error conditions relating to file names.
11.2.4 Portability of File Names  File name portability and syntax issues.

I/O on Streams

12.1 Streams  About the data type representing a stream.
12.2 Standard Streams  Streams to the standard input and output devices are created for you.
12.3 Opening Streams  How to create a stream to talk to a file.
12.4 Closing Streams  Close a stream when you are finished with it.
12.5 Streams and Threads  Issues with streams in threaded programs.
12.6 Streams in Internationalized Applications  Streams in internationalized applications.
12.7 Simple Output by Characters or Lines  Unformatted output by characters and lines.
12.8 Character Input  Unformatted input by characters and words.
12.9 Line-Oriented Input  Reading a line or a record from a stream.
12.10 Unreading  Peeking ahead/pushing back input just read.
12.11 Block Input/Output  Input and output operations on blocks of data.
12.12 Formatted Output  printf and related functions.
12.13 Customizing printf  You can define new conversion specifiers for
                                 printf and friends.
12.14 Formatted Input  scanf and related functions.
12.15 End-Of-File and Errors  How you can tell if an I/O error happens.
12.16 Recovering from errors  What you can do about errors.
12.17 Text and Binary Streams  Some systems distinguish between text files and binary files.
12.18 File Positioning  About random-access streams.
12.19 Portable File-Position Functions  Random access on peculiar ISO C systems.
12.20 Stream Buffering  How to control buffering of streams.
12.21 Other Kinds of Streams  Streams that do not necessarily correspond to an open file.
12.22 Formatted Messages  Print strictly formatted messages.

Unreading

12.10.1 What Unreading Means  An explanation of unreading with pictures.
12.10.2 Using ungetc To Do Unreading  How to call ungetc to do unreading.

Formatted Output

12.12.1 Formatted Output Basics  Some examples to get you started.
12.12.2 Output Conversion Syntax  General syntax of conversion specifications.
12.12.3 Table of Output Conversions  Summary of output conversions and what they do.
12.12.4 Integer Conversions  Details about formatting of integers.
12.12.5 Floating-Point Conversions  Details about formatting of floating-point numbers.
12.12.6 Other Output Conversions  Details about formatting of strings, characters, pointers, and the like.
12.12.7 Formatted Output Functions  Descriptions of the actual functions.
12.12.8 Dynamically Allocating Formatted Output  Functions that allocate memory for the output.
12.12.9 Variable Arguments Output Functions  vprintf and friends.
12.12.10 Parsing a Template String  What kinds of args does a given template call for?
12.12.11 Example of Parsing a Template String  Sample program using parse_printf_format.

Customizing Printf

12.13.1 Registering New Conversions  Using register_printf_function to register a new output conversion.
12.13.2 Conversion Specifier Options  The handler must be able to get the options specified in the template when it is called.
12.13.3 Defining the Output Handler  Defining the handler and arginfo functions that are passed as arguments to register_printf_function.
12.13.4 printf Extension Example  How to define a printf handler function.
12.13.5 Predefined printf Handlers  Predefined printf handlers.

Formatted Input

12.14.1 Formatted Input Basics  Some basics to get you started.
12.14.2 Input Conversion Syntax  Syntax of conversion specifications.
12.14.3 Table of Input Conversions  Summary of input conversions and what they do.
12.14.4 Numeric Input Conversions  Details of conversions for reading numbers.
12.14.5 String Input Conversions  Details of conversions for reading strings.
12.14.6 Dynamically Allocating String Conversions  String conversions that malloc the buffer.
12.14.7 Other Input Conversions  Details of miscellaneous other conversions.
12.14.8 Formatted Input Functions  Descriptions of the actual functions.
12.14.9 Variable Arguments Input Functions  vscanf and friends.

Stream Buffering

12.20.1 Buffering Concepts  Terminology is defined here.
12.20.2 Flushing Buffers  How to ensure that output buffers are flushed.
12.20.3 Controlling Which Kind of Buffering  How to specify what kind of buffering to use.

Other Kinds of Streams

12.21.1 String Streams  Streams that get data from or put data in a string or memory buffer.
12.21.2 Obstack Streams  Streams that store data in an obstack.
12.21.3 Programming Your Own Custom Streams  Defining your own streams with an arbitrary input data source and/or output data sink.

Custom Streams

12.21.3.1 Custom Streams and Cookies  The cookie records where to fetch or store data that is read or written.
12.21.3.2 Custom Stream Hook Functions  How you should define the four hook functions that a custom stream needs.

Formatted Messages

12.22.1 Printing Formatted Messages  The fmtmsg function.
12.22.2 Adding Severity Classes  Add more severity classes.
12.22.3 How to use fmtmsg and addseverity  

Low-Level I/O

13.1 Opening and Closing Files  How to open and close file descriptors.
13.2 Input and Output Primitives  Reading and writing data.
13.3 Setting the File Position of a Descriptor  Setting a descriptor's file position.
13.4 Descriptors and Streams  Converting descriptor to stream or vice-versa.
13.5 Dangers of Mixing Streams and Descriptors  Precautions needed if you use both descriptors and streams.
13.6 Fast Scatter-Gather I/O  Fast I/O to discontinuous buffers.
13.7 Memory-mapped I/O  Using files like memory.
13.8 Waiting for Input or Output  How to check for input or output on multiple file descriptors.
13.9 Synchronizing I/O operations  Making sure all I/O actions completed.
13.10 Perform I/O Operations in Parallel  Perform I/O in parallel.
13.11 Control Operations on Files  Various other operations on file descriptors.
13.12 Duplicating Descriptors  Fcntl commands for duplicating file descriptors.
13.13 File Descriptor Flags  Fcntl commands for manipulating flags associated with file descriptors.
13.14 File Status Flags  Fcntl commands for manipulating flags associated with open files.
13.15 File Locks  Fcntl commands for implementing file locking.
13.16 Interrupt-Driven Input  Getting an asynchronous signal when input arrives.
13.17 Generic I/O Control operations  

Stream/Descriptor Precautions

13.5.1 Linked Channels  Dealing with channels sharing a file position.
13.5.2 Independent Channels  Dealing with separately opened, unlinked channels.
13.5.3 Cleaning Streams  Cleaning a stream makes it safe to use another channel.

Asynchronous I/O

13.10.1 Asynchronous Read and Write Operations  
13.10.2 Getting the Status of AIO Operations  
13.10.3 Getting into a Consistent State  Getting into a consistent state.
13.10.4 Cancellation of AIO Operations  
13.10.5 How to optimize the AIO implementation  

File Status Flags

13.14.1 File Access Modes  Whether the descriptor can read or write.
13.14.2 Open-time Flags  Details of open.
13.14.3 I/O Operating Modes  Special modes to control I/O operations.
13.14.4 Getting and Setting File Status Flags  Fetching and changing these flags.

File System Interface

14.1 Working Directory  This is used to resolve relative file names.
14.2 Accessing Directories  Finding out what files a directory contains.
14.3 Working with Directory Trees  Apply actions to all files or a selectable subset of a directory hierarchy.
14.4 Hard Links  Adding alternate names to a file.
14.5 Symbolic Links  A file that "points to" a file name.
14.6 Deleting Files  How to delete a file, and what that means.
14.7 Renaming Files  Changing a file's name.
14.8 Creating Directories  A system call just for creating a directory.
14.9 File Attributes  Attributes of individual files.
14.10 Making Special Files  How to create special files.
14.11 Temporary Files  Naming and creating temporary files.

Accessing Directories

14.2.1 Format of a Directory Entry  Format of one directory entry.
14.2.2 Opening a Directory Stream  How to open a directory stream.
14.2.3 Reading and Closing a Directory Stream  How to read directory entries from the stream.
14.2.4 Simple Program to List a Directory  A very simple directory listing program.
14.2.5 Random Access in a Directory Stream  Rereading part of the directory already read with the same stream.
14.2.6 Scanning the Content of a Directory  Get entries for user selected subset of contents in given directory.
14.2.7 Simple Program to List a Directory, Mark II  Revised version of the program.

File Attributes

14.9.1 The meaning of the File Attributes  The names of the file attributes, and what their values mean.
14.9.2 Reading the Attributes of a File  How to read the attributes of a file.
14.9.3 Testing the Type of a File  Distinguishing ordinary files, directories, links...
14.9.4 File Owner  How ownership for new files is determined, and how to change it.
14.9.5 The Mode Bits for Access Permission  How information about a file's access mode is stored.
14.9.6 How Your Access to a File is Decided  How the system decides who can access a file.
14.9.7 Assigning File Permissions  How permissions for new files are assigned, and how to change them.
14.9.8 Testing Permission to Access a File  How to find out if your process can access a file.
14.9.9 File Times  About the time attributes of a file.
14.9.10 File Size  Manually changing the size of a file.

Pipes and FIFOs

15.1 Creating a Pipe  Making a pipe with the pipe function.
15.2 Pipe to a Subprocess  Using a pipe to communicate with a child process.
15.3 FIFO Special Files  Making a FIFO special file.
15.4 Atomicity of Pipe I/O  When pipe (or FIFO) I/O is atomic.

Sockets

16.1 Socket Concepts  Basic concepts you need to know about.
16.2 Communication Styles  Stream communication, datagrams and other styles.
16.3 Socket Addresses  How socket names ("addresses") work.
16.4 Interface Naming  Identifying specific network interfaces.
16.5 The Local Namespace  Details about the local namespace.
16.6 The Internet Namespace  Details about the Internet namespace.
16.7 Other Namespaces  Other namespaces not documented fully here.
16.8 Opening and Closing Sockets  Creating sockets and destroying them.
16.9 Using Sockets with Connections  Operations on sockets with connection state.
16.10 Datagram Socket Operations  Operations on datagram sockets.
16.11 The inetd Daemon  Inetd is a daemon that starts servers on request. The most convenient way to write a server is to make it work with Inetd.
16.12 Socket Options  Miscellaneous low-level socket options.
16.13 Networks Database  Accessing the database of network names.

Socket Addresses

16.3.1 Address Formats  About struct sockaddr.
16.3.2 Setting the Address of a Socket  Binding an address to a socket.
16.3.3 Reading the Address of a Socket  Reading the address of a socket.

Local Namespace

16.5.1 Local Namespace Concepts  What you need to understand.
16.5.2 Details of Local Namespace  Address format, symbolic names, etc.
16.5.3 Example of Local-Namespace Sockets  Example of creating a socket.

Internet Namespace

16.6.1 Internet Socket Address Formats  How socket addresses are specified in the Internet namespace.
16.6.2 Host Addresses  All about host addresses of Internet host.
16.6.6 Protocols Database  Referring to protocols by name.
16.6.3 Internet Ports  Internet port numbers.
16.6.4 The Services Database  Ports may have symbolic names.
16.6.5 Byte Order Conversion  Different hosts may use different byte ordering conventions; you need to canonicalize host address and port number.
16.6.7 Internet Socket Example  Putting it all together.

Host Addresses

16.6.2.1 Internet Host Addresses  What a host number consists of.
16.6.2.2 Host Address Data Type  Data type for a host number.
16.6.2.3 Host Address Functions  Functions to operate on them.
16.6.2.4 Host Names  Translating host names to host numbers.

Open/Close Sockets

16.8.1 Creating a Socket  How to open a socket.
16.8.2 Closing a Socket  How to close a socket.
16.8.3 Socket Pairs  These are created like pipes.

Connections

16.9.1 Making a Connection  What the client program must do.
16.9.2 Listening for Connections  How a server program waits for requests.
16.9.3 Accepting Connections  What the server does when it gets a request.
16.9.4 Who is Connected to Me?  Getting the address of the other side of a connection.
16.9.5 Transferring Data  How to send and receive data.
16.9.6 Byte Stream Socket Example  An example program: a client for communicating over a byte stream socket in the Internet namespace.
16.9.7 Byte Stream Connection Server Example  A corresponding server program.
16.9.8 Out-of-Band Data  This is an advanced feature.

Transferring Data

16.9.5.1 Sending Data  Sending data with send.
16.9.5.2 Receiving Data  Reading data with recv.
16.9.5.3 Socket Data Options  Using send and recv.

Datagrams

16.10.1 Sending Datagrams  Sending packets on a datagram socket.
16.10.2 Receiving Datagrams  Receiving packets on a datagram socket.
16.10.3 Datagram Socket Example  An example program: packets sent over a datagram socket in the local namespace.
16.10.4 Example of Reading Datagrams  Another program, that receives those packets.

Inetd

16.11.1 inetd Servers  
16.11.2 Configuring inetd  

Socket Options

16.12.1 Socket Option Functions  The basic functions for setting and getting socket options.
16.12.2 Socket-Level Options  Details of the options at the socket level.

Low-Level Terminal Interface

17.1 Identifying Terminals  How to determine if a file is a terminal device, and what its name is.
17.2 I/O Queues  About flow control and typeahead.
17.3 Two Styles of Input: Canonical or Not  Two basic styles of input processing.
17.4 Terminal Modes  How to examine and modify flags controlling details of terminal I/O: echoing, signals, editing. Posix.
17.5 BSD Terminal Modes  BSD compatible terminal mode setting
17.6 Line Control Functions  Sending break sequences, clearing terminal buffers ...
17.7 Noncanonical Mode Example  How to read single characters without echo.
17.8 Pseudo-Terminals  How to open a pseudo-terminal.

Terminal Modes

17.4.1 Terminal Mode Data Types  The data type struct termios and related types.
17.4.2 Terminal Mode Functions  Functions to read and set the terminal attributes.
17.4.3 Setting Terminal Modes Properly  The right way to set terminal attributes reliably.
17.4.4 Input Modes  Flags controlling low-level input handling.
17.4.5 Output Modes  Flags controlling low-level output handling.
17.4.6 Control Modes  Flags controlling serial port behavior.
17.4.7 Local Modes  Flags controlling high-level input handling.
17.4.8 Line Speed  How to read and set the terminal line speed.
17.4.9 Special Characters  Characters that have special effects, and how to change them.
17.4.10 Noncanonical Input  Controlling how long to wait for input.

Special Characters

17.4.9.1 Characters for Input Editing  Special characters that terminate lines and delete text, and other editing functions.
17.4.9.2 Characters that Cause Signals  Special characters that send or raise signals to or for certain classes of processes.
17.4.9.3 Special Characters for Flow Control  Special characters that suspend or resume suspended output.
17.4.9.4 Other Special Characters  Other special characters for BSD systems: they can discard output, and print status.

Pseudo-Terminals

17.8.1 Allocating Pseudo-Terminals  Allocating a pseudo terminal.
17.8.2 Opening a Pseudo-Terminal Pair  How to open both sides of a pseudo-terminal in a single operation.

Syslog

18.1 Overview of Syslog  Overview of a system's Syslog facility
18.2 Submitting Syslog Messages  Functions to submit messages to Syslog

Submitting Syslog Messages

18.2.1 openlog  Open connection to Syslog
18.2.2 syslog, vsyslog  Submit message to Syslog
18.2.3 closelog  Close connection to Syslog
18.2.4 setlogmask  Cause certain messages to be ignored
18.2.5 Syslog Example  Example of all of the above

Mathematics

19.1 Predefined Mathematical Constants  Precise numeric values for often-used constants.
19.2 Trigonometric Functions  Sine, cosine, tangent, and friends.
19.3 Inverse Trigonometric Functions  Arcsine, arccosine, etc.
19.4 Exponentiation and Logarithms  Also pow and sqrt.
19.5 Hyperbolic Functions  sinh, cosh, tanh, etc.
19.6 Special Functions  Bessel, gamma, erf.
19.7 Known Maximum Errors in Math Functions  
19.8 Pseudo-Random Numbers  Functions for generating pseudo-random numbers.
19.9 Is Fast Code or Small Code preferred?  Fast code or small code.

Pseudo-Random Numbers

19.8.1 ISO C Random Number Functions  rand and friends.
19.8.2 BSD Random Number Functions  random and friends.
19.8.3 SVID Random Number Function  drand48 and friends.

Arithmetic

20.1 Integers  Basic integer types and concepts
20.2 Integer Division  Integer division with guaranteed rounding.
20.3 Floating Point Numbers  Basic concepts. IEEE 754.
20.4 Floating-Point Number Classification Functions  The five kinds of floating-point number.
20.5 Errors in Floating-Point Calculations  When something goes wrong in a calculation.
20.6 Rounding Modes  Controlling how results are rounded.
20.7 Floating-Point Control Functions  Saving and restoring the FPU's state.
20.8 Arithmetic Functions  Fundamental operations provided by the library.
20.9 Complex Numbers  The types. Writing complex constants.
20.10 Projections, Conjugates, and Decomposing of Complex Numbers  Projection, conjugation, decomposition.
20.11 Parsing of Numbers  Converting strings to numbers.
20.12 Old-fashioned System V number-to-string functions  An archaic way to convert numbers to strings.

Floating Point Errors

20.5.1 FP Exceptions  IEEE 754 math exceptions and how to detect them.
20.5.2 Infinity and NaN  Special values returned by calculations.
20.5.3 Examining the FPU status word  Checking for exceptions after the fact.
20.5.4 Error Reporting by Mathematical Functions  How the math functions report errors.

Arithmetic Functions

20.8.1 Absolute Value  Absolute values of integers and floats.
20.8.2 Normalization Functions  Extracting exponents and putting them back.
20.8.3 Rounding Functions  Rounding floats to integers.
20.8.4 Remainder Functions  Remainders on division, precisely defined.
20.8.5 Setting and modifying single bits of FP values  Sign bit adjustment. Adding epsilon.
20.8.6 Floating-Point Comparison Functions  Comparisons without risk of exceptions.
20.8.7 Miscellaneous FP arithmetic functions  Max, min, positive difference, multiply-add.

Parsing of Numbers

20.11.1 Parsing of Integers  Functions for conversion of integer values.
20.11.2 Parsing of Floats  Functions for conversion of floating-point values.

Date and Time

21.1 Time Basics  Concepts and definitions.
21.2 Elapsed Time  Data types to represent elapsed times
21.3 Processor And CPU Time  Time a program has spent executing.
21.4 Calendar Time  Manipulation of "real" dates and times.
21.5 Setting an Alarm  Sending a signal after a specified time.
21.6 Sleeping  Waiting for a period of time.

Processor And CPU Time

21.3.1 CPU Time Inquiry  The clock function.
21.3.2 Processor Time Inquiry  The times function.

Calendar Time

21.4.1 Simple Calendar Time  Facilities for manipulating calendar time.
21.4.2 High-Resolution Calendar  A time representation with greater precision.
21.4.3 Broken-down Time  Facilities for manipulating local time.
21.4.4 High Accuracy Clock  Maintaining a high accuracy system clock.
21.4.5 Formatting Calendar Time  Converting times to strings.
21.4.6 Convert textual time and date information back  Convert textual time and date information back into broken-down time values.
21.4.7 Specifying the Time Zone with TZ  How users specify the time zone.
21.4.8 Functions and Variables for Time Zones  Functions to examine or specify the time zone.
21.4.9 Time Functions Example  An example program showing use of some of the time functions.

Parsing Date and Time

21.4.6.1 Interpret string according to given format  
21.4.6.2 A More User-friendly Way to Parse Times and Dates  User-friendly function to parse data and time strings.

Resource Usage And Limitation

22.1 Resource Usage  Measuring various resources used.
22.2 Limiting Resource Usage  Specifying limits on resource usage.
22.3 Process CPU Priority And Scheduling  Reading or setting process run priority.
22.4 Querying memory available resources  
22.5 Learn about the processors available  

Priority

22.3.1 Absolute Priority  The first tier of priority. Posix
22.3.2 Realtime Scheduling  Scheduling among the process nobility
22.3.3 Basic Scheduling Functions  Get/set scheduling policy, priority
22.3.4 Traditional Scheduling  Scheduling among the vulgar masses

Traditional Scheduling

22.3.4.1 Introduction To Traditional Scheduling  
22.3.4.2 Functions For Traditional Scheduling  

Memory Resources

22.4.1 Overview about traditional Unix memory handling  
22.4.2 How to get information about the memory subsystem?  

Non-Local Exits

23.1 Introduction to Non-Local Exits  When and how to use these facilities.
23.2 Details of Non-Local Exits  Functions for non-local exits.
23.3 Non-Local Exits and Signals  Portability issues.
23.4 Complete Context Control  Complete context control a la System V.

Signal Handling

24.1 Basic Concepts of Signals  Introduction to the signal facilities.
24.2 Standard Signals  Particular kinds of signals with standard names and meanings.
24.3 Specifying Signal Actions  Specifying what happens when a particular signal is delivered.
24.4 Defining Signal Handlers  How to write a signal handler function.
24.5 Primitives Interrupted by Signals  Signal handlers affect use of open,
 readwrite and other functions.
24.6 Generating Signals  How to send a signal to a process.
24.7 Blocking Signals  Making the system hold signals temporarily.
24.8 Waiting for a Signal  Suspending your program until a signal arrives.
24.9 Using a Separate Signal Stack  
24.10 BSD Signal Handling  Additional functions for backward compatibility with BSD.

Concepts of Signals

24.1.1 Some Kinds of Signals  Some examples of what can cause a signal.
24.1.2 Concepts of Signal Generation  Concepts of why and how signals occur.
24.1.3 How Signals Are Delivered  Concepts of what a signal does to the process.

Standard Signals

24.2.1 Program Error Signals  Used to report serious program errors.
24.2.2 Termination Signals  Used to interrupt and/or terminate the program.
24.2.3 Alarm Signals  Used to indicate expiration of timers.
24.2.4 Asynchronous I/O Signals  Used to indicate input is available.
24.2.5 Job Control Signals  Signals used to support job control.
24.2.6 Operation Error Signals  Used to report operational system errors.
24.2.7 Miscellaneous Signals  
24.2.8 Signal Messages  Printing a message describing a signal.

Signal Actions

24.3.1 Basic Signal Handling  The simple signal function.
24.3.2 Advanced Signal Handling  The more powerful sigaction function.
24.3.3 Interaction of signal and sigaction  How those two functions interact.
24.3.4 sigaction Function Example  An example of using the sigaction function.
24.3.5 Flags for sigaction  Specifying options for signal handling.
24.3.6 Initial Signal Actions  How programs inherit signal actions.

Defining Handlers

24.4.1 Signal Handlers that Return  Handlers that return normally, and what this means.
24.4.2 Handlers That Terminate the Process  How handler functions terminate a program.
24.4.3 Nonlocal Control Transfer in Handlers  Nonlocal transfer of control out of a signal handler.
24.4.4 Signals Arriving While a Handler Runs  What happens when signals arrive while the handler is already occupied.
24.4.5 Signals Close Together Merge into One  When a second signal arrives before the first is handled.
24.4.6 Signal Handling and Nonreentrant Functions  Do not call any functions unless you know they are reentrant with respect to signals.
24.4.7 Atomic Data Access and Signal Handling  A single handler can run in the middle of reading or writing a single object.

Atomic Data Access

24.4.7.1 Problems with Non-Atomic Access  A program illustrating interrupted access.
24.4.7.2 Atomic Types  Data types that guarantee no interruption.
24.4.7.3 Atomic Usage Patterns  Proving that interruption is harmless.

Generating Signals

24.6.1 Signaling Yourself  A process can send a signal to itself.
24.6.2 Signaling Another Process  Send a signal to another process.
24.6.3 Permission for using kill  
24.6.4 Using kill for Communication  

Blocking Signals

24.7.1 Why Blocking Signals is Useful  The purpose of blocking signals.
24.7.2 Signal Sets  How to specify which signals to block.
24.7.3 Process Signal Mask  Blocking delivery of signals to your process during normal execution.
24.7.4 Blocking to Test for Delivery of a Signal  
24.7.5 Blocking Signals for a Handler  Blocking additional signals while a handler is being run.
24.7.6 Checking for Pending Signals  
24.7.7 Remembering a Signal to Act On Later  How you can get almost the same effect as blocking a signal, by handling it and setting a flag to be tested later.

Waiting for a Signal

24.8.1 Using pause  The simple way, using pause.
24.8.2 Problems with pause  Why the simple way is often not very good.
24.8.3 Using sigsuspend  Reliably waiting for a specific signal.

BSD Signal Handling

24.10.1 BSD Function to Establish a Handler  
24.10.2 BSD Functions for Blocking Signals  

Program Basics

25.1 Program Arguments  Parsing your program's command-line arguments.
25.4 Environment Variables  Less direct parameters affecting your program
25.5 System Calls  Requesting service from the system
25.6 Program Termination  Telling the system you're done; return status

Program Arguments

25.1.1 Program Argument Syntax Conventions  By convention, options start with a hyphen.
25.1.2 Parsing Program Arguments  Ways to parse program options and arguments.

Parsing Program Arguments

25.2 Parsing program options using getopt  
25.3 Parsing Program Options with Argp  Parsing program options using argp_parse.
25.3.12.1 Parsing of Suboptions  Some programs need more detailed options.
25.3.13 Parsing of Suboptions Example  This shows how it could be done for mount.

Environment Variables

25.4.1 Environment Access  How to get and set the values of environment variables.
25.4.2 Standard Environment Variables  These environment variables have standard interpretations.

Program Termination

25.6.1 Normal Termination  If a program calls exit, a process terminates normally.
25.6.2 Exit Status  The exit status provides information about why the process terminated.
25.6.3 Cleanups on Exit  A process can run its own cleanup functions upon normal termination.
25.6.4 Aborting a Program  The abort function causes abnormal program termination.
25.6.5 Termination Internals  What happens when a process terminates.

Processes

26.1 Running a Command  The easy way to run another program.
26.2 Process Creation Concepts  An overview of the hard way to do it.
26.3 Process Identification  How to get the process ID of a process.
26.4 Creating a Process  How to fork a child process.
26.5 Executing a File  How to make a process execute another program.
26.6 Process Completion  How to tell when a child process has completed.
26.7 Process Completion Status  How to interpret the status value returned from a child process.
26.8 BSD Process Wait Functions  More functions, for backward compatibility.
26.9 Process Creation Example  A complete example program.

Job Control

27.1 Concepts of Job Control  Jobs can be controlled by a shell.
27.2 Job Control is Optional  Not all POSIX systems support job control.
27.3 Controlling Terminal of a Process  How a process gets its controlling terminal.
27.4 Access to the Controlling Terminal  How processes share the controlling terminal.
27.5 Orphaned Process Groups  Jobs left after the user logs out.
27.6 Implementing a Job Control Shell  What a shell must do to implement job control.
27.7 Functions for Job Control  Functions to control process groups.

Implementing a Shell

27.6.1 Data Structures for the Shell  Introduction to the sample shell.
27.6.2 Initializing the Shell  What the shell must do to take responsibility for job control.
27.6.3 Launching Jobs  Creating jobs to execute commands.
27.6.4 Foreground and Background  Putting a job in foreground of background.
27.6.5 Stopped and Terminated Jobs  Reporting job status.
27.6.6 Continuing Stopped Jobs  How to continue a stopped job in the foreground or background.
27.6.7 The Missing Pieces  Other parts of the shell.

Functions for Job Control

27.7.1 Identifying the Controlling Terminal  Determining the controlling terminal's name.
27.7.2 Process Group Functions  Functions for manipulating process groups.
27.7.3 Functions for Controlling Terminal Access  Functions for controlling terminal access.

Name Service Switch

28.1 NSS Basics  What is this NSS good for.
28.2 The NSS Configuration File  Configuring NSS.
28.3 NSS Module Internals  How does it work internally.
28.4 Extending NSS  What to do to add services or databases.

NSS Configuration File

28.2.1 Services in the NSS configuration File  Service names in the NSS configuration.
28.2.2 Actions in the NSS configuration  React appropriately to the lookup result.
28.2.3 Notes on the NSS Configuration File  Things to take care about while configuring NSS.

NSS Module Internals

28.3.1 The Naming Scheme of the NSS Modules  Construction of the interface function of the NSS modules.
28.3.2 The Interface of the Function in NSS Modules  Programming interface in the NSS module functions.

Extending NSS

28.4.1 Adding another Service to NSS  What is to do to add a new service.
28.4.2 Internals of the NSS Module Functions  Guidelines for writing new NSS service functions.

Users and Groups

29.1 User and Group IDs  Each user has a unique numeric ID; likewise for groups.
29.2 The Persona of a Process  The user IDs and group IDs of a process.
29.3 Why Change the Persona of a Process?  Why a program might need to change its user and/or group IDs.
29.4 How an Application Can Change Persona  Changing the user and group IDs.
29.5 Reading the Persona of a Process  How to examine the user and group IDs.

29.6 Setting the User ID  Functions for setting the user ID.
29.7 Setting the Group IDs  Functions for setting the group IDs.

29.8 Enabling and Disabling Setuid Access  Turning setuid access on and off.
29.9 Setuid Program Example  The pertinent parts of one sample program.
29.10 Tips for Writing Setuid Programs  How to avoid granting unlimited access.

29.11 Identifying Who Logged In  Getting the name of the user who logged in, or of the real user ID of the current process.

29.12 The User Accounting Database  Keeping information about users and various actions in databases.

29.13 User Database  Functions and data structures for accessing the user database.
29.14 Group Database  Functions and data structures for accessing the group database.
29.15 User and Group Database Example  Example program showing the use of database inquiry functions.
29.16 Netgroup Database  Functions for accessing the netgroup database.

User Accounting Database

29.12.1 Manipulating the User Accounting Database  Scanning and modifying the user accounting database.
29.12.2 XPG User Accounting Database Functions  A standardized way for doing the same thing.
29.12.3 Logging In and Out  Functions from BSD that modify the user accounting database.

User Database

29.13.1 The Data Structure that Describes a User  What each user record contains.
29.13.2 Looking Up One User  How to look for a particular user.
29.13.3 Scanning the List of All Users  Scanning the list of all users, one by one.
29.13.4 Writing a User Entry  How a program can rewrite a user's record.

Group Database

29.14.1 The Data Structure for a Group  What each group record contains.
29.14.2 Looking Up One Group  How to look for a particular group.
29.14.3 Scanning the List of All Groups  Scanning the list of all groups.

Netgroup Database

29.16.1 Netgroup Data  Data in the Netgroup database and where it comes from.
29.16.2 Looking up one Netgroup  How to look for a particular netgroup.
29.16.3 Testing for Netgroup Membership  How to test for netgroup membership.

System Management

30.1 Host Identification  Determining the name of the machine.
30.2 Platform Type Identification  Determining operating system and basic machine type
30.3 Controlling and Querying Mounts  Controlling/querying mounts
30.4 System Parameters  Getting and setting various system parameters

Filesystem Handling

30.3.1 Mount Information  What is or could be mounted?
30.3.2 Mount, Unmount, Remount  Controlling what is mounted and how

Mount Information

30.3.1.1 The `fstab' file  
30.3.1.2 The `mtab' file  
30.3.1.3 Other (Non-libc) Sources of Mount Information  Other (non-libc) sources of mount information

System Configuration

31.1 General Capacity Limits  Constants and functions that describe various process-related limits that have one uniform value for any given machine.
31.2 Overall System Options  Optional POSIX features.
31.3 Which Version of POSIX is Supported  Version numbers of POSIX.1 and POSIX.2.
31.4 Using sysconf  Getting specific configuration values of general limits and system options.
31.5 Minimum Values for General Capacity Limits  Minimum values for general limits.

31.6 Limits on File System Capacity  Size limitations that pertain to individual files. These can vary between file systems or even from file to file.
31.7 Optional Features in File Support  Optional features that some files may support.
31.8 Minimum Values for File System Limits  Minimum values for file limits.
31.9 Using pathconf  Getting the limit values for a particular file.

31.10 Utility Program Capacity Limits  Capacity limits of some POSIX.2 utility programs.
31.11 Minimum Values for Utility Limits  Minimum allowable values of those limits.

31.12 String-Valued Parameters  Getting the default search path.

Sysconf

31.4.1 Definition of sysconf  Detailed specifications of sysconf.
31.4.2 Constants for sysconf Parameters  The list of parameters sysconf can read.
31.4.3 Examples of sysconf  How to use sysconf and the parameter macros properly together.

Cryptographic Functions

32.1 Legal Problems  This software can get you locked up, or worse.
32.2 Reading Passwords  Prompting the user for a password.
32.3 Encrypting Passwords  A one-way function for UNIX passwords.
32.4 DES Encryption  Routines for DES encryption.

Debugging Support

33.1 Backtraces  Obtaining and printing a back trace of the current stack.

Language Features

A.1 Explicitly Checking Internal Consistency  Using assert to abort if something "impossible" happens.
A.2 Variadic Functions  Defining functions with varying numbers of args.
A.3 Null Pointer Constant  The macro NULL.
A.4 Important Data Types  Data types for object sizes.
A.5 Data Type Measurements  Parameters of data type representations.

Variadic Functions

A.2.1 Why Variadic Functions are Used  Reasons for making functions take variable arguments.
A.2.2 How Variadic Functions are Defined and Used  How to define and call variadic functions.
A.2.3 Example of a Variadic Function  A complete example.

How Variadic

A.2.2.1 Syntax for Variable Arguments  How to make a prototype for a function with variable arguments.
A.2.2.2 Receiving the Argument Values  Steps you must follow to access the optional argument values.
A.2.2.3 How Many Arguments Were Supplied  How to decide whether there are more arguments.
A.2.2.4 Calling Variadic Functions  Things you need to know about calling variable arguments functions.
A.2.2.5 Argument Access Macros  Detailed specification of the macros for accessing variable arguments.
A.2.3.1 Old-Style Variadic Functions  The pre-ISO way of defining variadic functions.

Data Type Measurements

A.5.1 Computing the Width of an Integer Data Type  How many bits does an integer type hold?
A.5.2 Range of an Integer Type  What are the largest and smallest values that an integer type can hold?
A.5.3 Floating Type Macros  Parameters that measure the floating point types.
A.5.4 Structure Field Offset Measurement  Getting measurements on structure types.

Floating Type Macros

A.5.3.1 Floating Point Representation Concepts  Definitions of terminology.
A.5.3.2 Floating Point Parameters  Details of specific macros.
A.5.3.3 IEEE Floating Point  The measurements for one common representation.

Installation

C.1 Configuring and compiling GNU Libc  How to compile and test GNU libc.
C.2 Installing the C Library  How to install it once you've got it compiled.
C.3 Recommended Tools for Compilation  You'll need these first.
C.4 Supported Configurations  What it runs on, what it doesn't.
C.5 Specific advice for GNU/Linux systems  
C.6 Reporting Bugs  So they'll get fixed.

Maintenance

D.1 Adding New Functions  How to add new functions or header files to the GNU C library.
D.2 Porting the GNU C Library  How to port the GNU C library to a new machine or operating system.

Porting

D.2.1 Layout of the `sysdeps' Directory Hierarchy  The layout of the `sysdeps' hierarchy.
D.2.2 Porting the GNU C Library to Unix Systems  Porting the library to an average Unix-like system.

  webmaster   donations   bookstore     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003