- Introduction: Purpose of the GNU C Library.
- Error Reporting: How library functions report errors.
- Memory: Allocating virtual memory and controlling
paging.
- Character Handling: Character testing and conversion functions.
- String and Array Utilities: Utilities for copying and comparing strings
and arrays.
- Character Set Handling: Support for extended character sets.
- Locales: The country and language can affect the
behavior of library functions.
- Message Translation: How to make the program speak the user's
language.
- Searching and Sorting: General searching and sorting functions.
- Pattern Matching: Matching shell ``globs'' and regular
expressions.
- I/O Overview: Introduction to the I/O facilities.
- I/O on Streams: High-level, portable I/O facilities.
- Low-Level I/O: Low-level, less portable I/O.
- File System Interface: Functions for manipulating files.
- Pipes and FIFOs: A simple interprocess communication
mechanism.
- Sockets: A more complicated IPC mechanism, with
networking support.
- Low-Level Terminal Interface: How to change the characteristics of a
terminal device.
- Syslog: System logging and messaging.
- Mathematics: Math functions, useful constants, random
numbers.
- Arithmetic: Low level arithmetic functions.
- Date and Time: Functions for getting the date and time and
formatting them nicely.
- Resource Usage And Limitation: Functions for examining resource usage and
getting and setting limits.
- Non-Local Exits: Jumping out of nested function calls.
- Signal Handling: How to send, block, and handle signals.
- Program Basics: Writing the beginning and end of your
program.
- Processes: How to create processes and run other
programs.
- Job Control: All about process groups and sessions.
- Name Service Switch: Accessing system databases.
- Users and Groups: How users are identified and classified.
- System Management: Controlling the system and getting
information about it.
- System Configuration: Parameters describing operating system
limits.
- Cryptographic Functions: DES encryption and password handling.
- Debugging Support: Functions to help debugging applications..
Appendices
- Language Features: C language features provided by the library.
- Library Summary: A summary showing the syntax, header file,
and derivation of each library feature.
- Installation: How to install the GNU C library.
- Maintenance: How to enhance and port the GNU C Library.
- Contributors: Who wrote what parts of the GNU C library.
- Free Manuals: Free Software Needs Free Documentation.
- Copying: The GNU Lesser General Public License says
how you can copy and share the GNU C Library.
- 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 Index: Index of functions and function-like macros.
- Variable Index: Index of variables and variable-like macros.
- File Index: Index of programs and files.
--- The Detailed Node Listing ---
Introduction
- 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.
Standards and Portability
- 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.
Using the Library
- 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.
Error Reporting
- Checking for Errors: How errors are reported by library functions.
- Error Codes: Error code macros; all of these expand
into integer constant values.
- Error Messages: Mapping error codes onto error messages.
Memory
- Memory Concepts: An introduction to concepts and terminology.
- Memory Allocation: Allocating storage for your program data
- Locking Pages: Preventing page faults
- Resizing the Data Segment:
brk
, sbrk
Memory Allocation
- Memory Allocation and C: How to get different kinds of allocation in C.
- Unconstrained Allocation: The
malloc
facility allows fully general
dynamic allocation.
- Allocation Debugging: Finding memory leaks and not freed memory.
- Obstacks: Obstacks are less general than malloc
but more efficient and convenient.
- Variable Size Automatic: Allocation of variable-sized blocks
of automatic storage that are freed when the
calling function returns.
Unconstrained Allocation
- Basic Allocation: Simple use of
malloc
.
- Malloc Examples: Examples of
malloc
. xmalloc
.
- Freeing after Malloc: Use
free
to free a block you
got with malloc
.
- Changing Block Size: Use
realloc
to make a block
bigger or smaller.
- Allocating Cleared Space: Use
calloc
to allocate a
block and clear it.
- Efficiency and Malloc: Efficiency considerations in use of
these functions.
- Aligned Memory Blocks: Allocating specially aligned memory.
- Malloc Tunable Parameters: Use
mallopt
to adjust allocation
parameters.
- Heap Consistency Checking: Automatic checking for errors.
- Hooks for Malloc: You can use these hooks for debugging
programs that use
malloc
.
- Statistics of Malloc: Getting information about how much
memory your program is using.
- Summary of Malloc: Summary of
malloc
and related functions.
Allocation Debugging
- Tracing malloc: How to install the tracing functionality.
- Using the Memory Debugger: Example programs excerpts.
- Tips for the Memory Debugger: Some more or less clever ideas.
- Interpreting the traces: What do all these lines mean?
Obstacks
- Creating Obstacks: How to declare an obstack in your program.
- Preparing for Obstacks: Preparations needed before you can
use obstacks.
- Allocation in an Obstack: Allocating objects in an obstack.
- Freeing Obstack Objects: Freeing objects in an obstack.
- Obstack Functions: The obstack functions are both
functions and macros.
- Growing Objects: Making an object bigger by stages.
- Extra Fast Growing: Extra-high-efficiency (though more
complicated) growing objects.
- Status of an Obstack: Inquiries about the status of an obstack.
- Obstacks Data Alignment: Controlling alignment of objects in obstacks.
- Obstack Chunks: How obstacks obtain and release chunks;
efficiency considerations.
- Summary of Obstacks:
Variable Size Automatic
- Alloca Example: Example of using
alloca
.
- Advantages of Alloca: Reasons to use
alloca
.
- Disadvantages of Alloca: Reasons to avoid
alloca
.
- GNU C Variable-Size Arrays: Only in GNU C, here is an alternative
method of allocating dynamically and
freeing automatically.
Locking Pages
- Why Lock Pages: Reasons to read this section.
- Locked Memory Details: Everything you need to know locked
memory
- Page Lock Functions: Here's how to do it.
Character Handling
- Classification of Characters: Testing whether characters are
letters, digits, punctuation, etc.
- Case Conversion: Case mapping, and the like.
- Classification of Wide Characters: Character class determination for
wide characters.
- Using Wide Char Classes: Notes on using the wide character
classes.
- Wide Character Case Conversion: Mapping of wide characters.
String and Array Utilities
- Representation of Strings: Introduction to basic concepts.
- String/Array Conventions: Whether to use a string function or an
arbitrary array function.
- String Length: Determining the length of a string.
- Copying and Concatenation: Functions to copy the contents of strings
and arrays.
- String/Array Comparison: Functions for byte-wise and character-wise
comparison.
- Collation Functions: Functions for collating strings.
- Search Functions: Searching for a specific element or substring.
- Finding Tokens in a String: Splitting a string into tokens by looking
for delimiters.
- strfry: Function for flash-cooking a string.
- Trivial Encryption: Obscuring data.
- Encode Binary Data: Encoding and Decoding of Binary Data.
- Argz and Envz Vectors: Null-separated string vectors.
Argz and Envz Vectors
- Argz Functions: Operations on argz vectors.
- Envz Functions: Additional operations on environment vectors.
Character Set Handling
- Extended Char Intro: Introduction to Extended Characters.
- Charset Function Overview: Overview about Character Handling
Functions.
- Restartable multibyte conversion: Restartable multibyte conversion
Functions.
- Non-reentrant Conversion: Non-reentrant Conversion Function.
- Generic Charset Conversion: Generic Charset Conversion.
Restartable multibyte conversion
- Selecting the Conversion: Selecting the conversion and its properties.
- Keeping the state: Representing the state of the conversion.
- Converting a Character: Converting Single Characters.
- Converting Strings: Converting Multibyte and Wide Character
Strings.
- Multibyte Conversion Example: A Complete Multibyte Conversion Example.
Non-reentrant Conversion
- Non-reentrant Character Conversion: Non-reentrant Conversion of Single
Characters.
- Non-reentrant String Conversion: Non-reentrant Conversion of Strings.
- Shift State: States in Non-reentrant Functions.
Generic Charset Conversion
- Generic Conversion Interface: Generic Character Set Conversion Interface.
- iconv Examples: A complete
iconv
example.
- Other iconv Implementations: Some Details about other
iconv
Implementations.
- glibc iconv Implementation: The
iconv
Implementation in the GNU C
library.
Locales
- Effects of Locale: Actions affected by the choice of
locale.
- Choosing Locale: How the user specifies a locale.
- Locale Categories: Different purposes for which you can
select a locale.
- Setting the Locale: How a program specifies the locale
with library functions.
- Standard Locales: Locale names available on all systems.
- Locale Information: How to access the information for the locale.
- Formatting Numbers: A dedicated function to format numbers.
- Yes-or-No Questions: Check a Response against the locale.
Locale Information
- The Lame Way to Locale Data: ISO C's
localeconv
.
- The Elegant and Fast Way: X/Open's
nl_langinfo
.
The Lame Way to Locale Data
- General Numeric: Parameters for formatting numbers and
currency amounts.
- Currency Symbol: How to print the symbol that identifies an
amount of money (e.g.
$
).
- Sign of Money Amount: How to print the (positive or negative) sign
for a monetary amount, if one exists.
Message Translation
- Message catalogs a la X/Open: The
catgets
family of functions.
- The Uniforum approach: The
gettext
family of functions.
Message catalogs a la X/Open
- The catgets Functions: The
catgets
function family.
- The message catalog files: Format of the message catalog files.
- The gencat program: How to generate message catalogs files which
can be used by the functions.
- Common Usage: How to use the
catgets
interface.
The Uniforum approach
- Message catalogs with gettext: The
gettext
family of functions.
- Helper programs for gettext: Programs to handle message catalogs
for
gettext
.
Message catalogs with gettext
- Translation with gettext: What has to be done to translate a message.
- Locating gettext catalog: How to determine which catalog to be used.
- Advanced gettext functions: Additional functions for more complicated
situations.
- Charset conversion in gettext: How to specify the output character set
gettext
uses.
- GUI program problems: How to use
gettext
in GUI programs.
- Using gettextized software: The possibilities of the user to influence
the way
gettext
works.
Searching and Sorting
- Comparison Functions: Defining how to compare two objects.
Since the sort and search facilities
are general, you have to specify the
ordering.
- Array Search Function: The
bsearch
function.
- Array Sort Function: The
qsort
function.
- Search/Sort Example: An example program.
- Hash Search Function: The
hsearch
function.
- Tree Search Function: The
tsearch
function.
Pattern Matching
- Wildcard Matching: Matching a wildcard pattern against a single string.
- Globbing: Finding the files that match a wildcard pattern.
- Regular Expressions: Matching regular expressions against strings.
- Word Expansion: Expanding shell variables, nested commands,
arithmetic, and wildcards.
This is what the shell does with shell commands.
Globbing
- Calling Glob: Basic use of
glob
.
- Flags for Globbing: Flags that enable various options in
glob
.
- More Flags for Globbing: GNU specific extensions to
glob
.
Regular Expressions
- POSIX Regexp Compilation: Using
regcomp
to prepare to match.
- Flags for POSIX Regexps: Syntax variations for
regcomp
.
- Matching POSIX Regexps: Using
regexec
to match the compiled
pattern that you get from regcomp
.
- Regexp Subexpressions: Finding which parts of the string were matched.
- Subexpression Complications: Find points of which parts were matched.
- Regexp Cleanup: Freeing storage; reporting errors.
Word Expansion
- Expansion Stages: What word expansion does to a string.
- Calling Wordexp: How to call
wordexp
.
- Flags for Wordexp: Options you can enable in
wordexp
.
- Wordexp Example: A sample program that does word expansion.
- Tilde Expansion: Details of how tilde expansion works.
- Variable Substitution: Different types of variable substitution.
I/O Overview
- I/O Concepts: Some basic information and terminology.
- File Names: How to refer to a file.
I/O Concepts
- Streams and File Descriptors: The GNU Library provides two ways
to access the contents of files.
- File Position: The number of bytes from the
beginning of the file.
File Names
- Directories: Directories contain entries for files.
- File Name Resolution: A file name specifies how to look up a file.
- File Name Errors: Error conditions relating to file names.
- File Name Portability: File name portability and syntax issues.
I/O on Streams
- Streams: About the data type representing a stream.
- Standard Streams: Streams to the standard input and output
devices are created for you.
- Opening Streams: How to create a stream to talk to a file.
- Closing Streams: Close a stream when you are finished with it.
- Streams and Threads: Issues with streams in threaded programs.
- Streams and I18N: Streams in internationalized applications.
- Simple Output: Unformatted output by characters and lines.
- Character Input: Unformatted input by characters and words.
- Line Input: Reading a line or a record from a stream.
- Unreading: Peeking ahead/pushing back input just read.
- Block Input/Output: Input and output operations on blocks of data.
- Formatted Output:
printf
and related functions.
- Customizing Printf: You can define new conversion specifiers for
printf
and friends.
- Formatted Input:
scanf
and related functions.
- EOF and Errors: How you can tell if an I/O error happens.
- Error Recovery: What you can do about errors.
- Binary Streams: Some systems distinguish between text files
and binary files.
- File Positioning: About random-access streams.
- Portable Positioning: Random access on peculiar ISO C systems.
- Stream Buffering: How to control buffering of streams.
- Other Kinds of Streams: Streams that do not necessarily correspond
to an open file.
- Formatted Messages: Print strictly formatted messages.
Unreading
- Unreading Idea: An explanation of unreading with pictures.
- How Unread: How to call
ungetc
to do unreading.
Formatted Output
- Formatted Output Basics: Some examples to get you started.
- Output Conversion Syntax: General syntax of conversion
specifications.
- Table of Output Conversions: Summary of output conversions and
what they do.
- Integer Conversions: Details about formatting of integers.
- Floating-Point Conversions: Details about formatting of
floating-point numbers.
- Other Output Conversions: Details about formatting of strings,
characters, pointers, and the like.
- Formatted Output Functions: Descriptions of the actual functions.
- Dynamic Output: Functions that allocate memory for the output.
- Variable Arguments Output:
vprintf
and friends.
- Parsing a Template String: What kinds of args does a given template
call for?
- Example of Parsing: Sample program using
parse_printf_format
.
Customizing Printf
- Registering New Conversions: Using
register_printf_function
to register a new output conversion.
- Conversion Specifier Options: The handler must be able to get
the options specified in the
template when it is called.
- Defining the Output Handler: Defining the handler and arginfo
functions that are passed as arguments
to
register_printf_function
.
- Printf Extension Example: How to define a
printf
handler function.
- Predefined Printf Handlers: Predefined
printf
handlers.
Formatted Input
- Formatted Input Basics: Some basics to get you started.
- Input Conversion Syntax: Syntax of conversion specifications.
- Table of Input Conversions: Summary of input conversions and what they do.
- Numeric Input Conversions: Details of conversions for reading numbers.
- String Input Conversions: Details of conversions for reading strings.
- Dynamic String Input: String conversions that
malloc
the buffer.
- Other Input Conversions: Details of miscellaneous other conversions.
- Formatted Input Functions: Descriptions of the actual functions.
- Variable Arguments Input:
vscanf
and friends.
Stream Buffering
- Buffering Concepts: Terminology is defined here.
- Flushing Buffers: How to ensure that output buffers are flushed.
- Controlling Buffering: How to specify what kind of buffering to use.
Other Kinds of Streams
- String Streams: Streams that get data from or put data in
a string or memory buffer.
- Obstack Streams: Streams that store data in an obstack.
- Custom Streams: Defining your own streams with an arbitrary
input data source and/or output data sink.
Custom Streams
- Streams and Cookies: The cookie records where to fetch or
store data that is read or written.
- Hook Functions: How you should define the four hook
functions that a custom stream needs.
Formatted Messages
- Printing Formatted Messages: The
fmtmsg
function.
- Adding Severity Classes: Add more severity classes.
- Example: How to use
fmtmsg
and addseverity
.
Low-Level I/O
- Opening and Closing Files: How to open and close file
descriptors.
- I/O Primitives: Reading and writing data.
- File Position Primitive: Setting a descriptor's file
position.
- Descriptors and Streams: Converting descriptor to stream
or vice-versa.
- Stream/Descriptor Precautions: Precautions needed if you use both
descriptors and streams.
- Scatter-Gather: Fast I/O to discontinuous buffers.
- Memory-mapped I/O: Using files like memory.
- Waiting for I/O: How to check for input or output
on multiple file descriptors.
- Synchronizing I/O: Making sure all I/O actions completed.
- Asynchronous I/O: Perform I/O in parallel.
- Control Operations: Various other operations on file
descriptors.
- Duplicating Descriptors: Fcntl commands for duplicating
file descriptors.
- Descriptor Flags: Fcntl commands for manipulating
flags associated with file
descriptors.
- File Status Flags: Fcntl commands for manipulating
flags associated with open files.
- File Locks: Fcntl commands for implementing
file locking.
- Interrupt Input: Getting an asynchronous signal when
input arrives.
- IOCTLs: Generic I/O Control operations.
Stream/Descriptor Precautions
- Linked Channels: Dealing with channels sharing a file position.
- Independent Channels: Dealing with separately opened, unlinked channels.
- Cleaning Streams: Cleaning a stream makes it safe to use
another channel.
Asynchronous I/O
- Asynchronous Reads/Writes: Asynchronous Read and Write Operations.
- Status of AIO Operations: Getting the Status of AIO Operations.
- Synchronizing AIO Operations: Getting into a consistent state.
- Cancel AIO Operations: Cancellation of AIO Operations.
- Configuration of AIO: How to optimize the AIO implementation.
File Status Flags
- Access Modes: Whether the descriptor can read or write.
- Open-time Flags: Details of
open
.
- Operating Modes: Special modes to control I/O operations.
- Getting File Status Flags: Fetching and changing these flags.
File System Interface
- Working Directory: This is used to resolve relative
file names.
- Accessing Directories: Finding out what files a directory
contains.
- Working with Directory Trees: Apply actions to all files or a selectable
subset of a directory hierarchy.
- Hard Links: Adding alternate names to a file.
- Symbolic Links: A file that ``points to'' a file name.
- Deleting Files: How to delete a file, and what that means.
- Renaming Files: Changing a file's name.
- Creating Directories: A system call just for creating a directory.
- File Attributes: Attributes of individual files.
- Making Special Files: How to create special files.
- Temporary Files: Naming and creating temporary files.
Accessing Directories
- Directory Entries: Format of one directory entry.
- Opening a Directory: How to open a directory stream.
- Reading/Closing Directory: How to read directory entries from the stream.
- Simple Directory Lister: A very simple directory listing program.
- Random Access Directory: Rereading part of the directory
already read with the same stream.
- Scanning Directory Content: Get entries for user selected subset of
contents in given directory.
- Simple Directory Lister Mark II: Revised version of the program.
File Attributes
- Attribute Meanings: The names of the file attributes,
and what their values mean.
- Reading Attributes: How to read the attributes of a file.
- Testing File Type: Distinguishing ordinary files,
directories, links...
- File Owner: How ownership for new files is determined,
and how to change it.
- Permission Bits: How information about a file's access
mode is stored.
- Access Permission: How the system decides who can access a file.
- Setting Permissions: How permissions for new files are assigned,
and how to change them.
- Testing File Access: How to find out if your process can
access a file.
- File Times: About the time attributes of a file.
- File Size: Manually changing the size of a file.
Pipes and FIFOs
- Creating a Pipe: Making a pipe with the
pipe
function.
- Pipe to a Subprocess: Using a pipe to communicate with a
child process.
- FIFO Special Files: Making a FIFO special file.
- Pipe Atomicity: When pipe (or FIFO) I/O is atomic.
Sockets
- Socket Concepts: Basic concepts you need to know about.
- Communication Styles: Stream communication, datagrams and other styles.
- Socket Addresses: How socket names (``addresses'') work.
- Interface Naming: Identifying specific network interfaces.
- Local Namespace: Details about the local namespace.
- Internet Namespace: Details about the Internet namespace.
- Misc Namespaces: Other namespaces not documented fully here.
- Open/Close Sockets: Creating sockets and destroying them.
- Connections: Operations on sockets with connection state.
- Datagrams: Operations on datagram sockets.
- Inetd: Inetd is a daemon that starts servers on request.
The most convenient way to write a server
is to make it work with Inetd.
- Socket Options: Miscellaneous low-level socket options.
- Networks Database: Accessing the database of network names.
Socket Addresses
- Address Formats: About
struct sockaddr
.
- Setting Address: Binding an address to a socket.
- Reading Address: Reading the address of a socket.
Local Namespace
- Concepts: What you need to understand.
- Details: Address format, symbolic names, etc.
- Example: Example of creating a socket.
Internet Namespace
- Internet Address Formats: How socket addresses are specified in the
Internet namespace.
- Host Addresses: All about host addresses of Internet host.
- Protocols Database: Referring to protocols by name.
- Ports: Internet port numbers.
- Services Database: Ports may have symbolic names.
- Byte Order: Different hosts may use different byte
ordering conventions; you need to
canonicalize host address and port number.
- Inet Example: Putting it all together.
Host Addresses
- Abstract Host Addresses: What a host number consists of.
- Data type: Data type for a host number.
- Functions: Functions to operate on them.
- Names: Translating host names to host numbers.
Open/Close Sockets
- Creating a Socket: How to open a socket.
- Closing a Socket: How to close a socket.
- Socket Pairs: These are created like pipes.
Connections
- Connecting: What the client program must do.
- Listening: How a server program waits for requests.
- Accepting Connections: What the server does when it gets a request.
- Who is Connected: Getting the address of the
other side of a connection.
- Transferring Data: How to send and receive data.
- Byte Stream Example: An example program: a client for communicating
over a byte stream socket in the Internet namespace.
- Server Example: A corresponding server program.
- Out-of-Band Data: This is an advanced feature.
Transferring Data
- Sending Data: Sending data with
send
.
- Receiving Data: Reading data with
recv
.
- Socket Data Options: Using
send
and recv
.
Datagrams
- Sending Datagrams: Sending packets on a datagram socket.
- Receiving Datagrams: Receiving packets on a datagram socket.
- Datagram Example: An example program: packets sent over a
datagram socket in the local namespace.
- Example Receiver: Another program, that receives those packets.
Inetd
- Inetd Servers:
- Configuring Inetd:
Socket Options
- Socket Option Functions: The basic functions for setting and getting
socket options.
- Socket-Level Options: Details of the options at the socket level.
Low-Level Terminal Interface
- Is It a Terminal: How to determine if a file is a terminal
device, and what its name is.
- I/O Queues: About flow control and typeahead.
- Canonical or Not: Two basic styles of input processing.
- Terminal Modes: How to examine and modify flags controlling
details of terminal I/O: echoing,
signals, editing. Posix.
- BSD Terminal Modes: BSD compatible terminal mode setting
- Line Control: Sending break sequences, clearing
terminal buffers ...
- Noncanon Example: How to read single characters without echo.
- Pseudo-Terminals: How to open a pseudo-terminal.
Terminal Modes
- Mode Data Types: The data type
struct termios
and
related types.
- Mode Functions: Functions to read and set the terminal
attributes.
- Setting Modes: The right way to set terminal attributes
reliably.
- Input Modes: Flags controlling low-level input handling.
- Output Modes: Flags controlling low-level output handling.
- Control Modes: Flags controlling serial port behavior.
- Local Modes: Flags controlling high-level input handling.
- Line Speed: How to read and set the terminal line speed.
- Special Characters: Characters that have special effects,
and how to change them.
- Noncanonical Input: Controlling how long to wait for input.
Special Characters
- Editing Characters: Special characters that terminate lines and
delete text, and other editing functions.
- Signal Characters: Special characters that send or raise signals
to or for certain classes of processes.
- Start/Stop Characters: Special characters that suspend or resume
suspended output.
- Other Special: Other special characters for BSD systems:
they can discard output, and print status.
Pseudo-Terminals
- Allocation: Allocating a pseudo terminal.
- Pseudo-Terminal Pairs: How to open both sides of a
pseudo-terminal in a single operation.
Syslog
- Overview of Syslog: Overview of a system's Syslog facility
- Submitting Syslog Messages: Functions to submit messages to Syslog
Submitting Syslog Messages
- openlog: Open connection to Syslog
- syslog; vsyslog: Submit message to Syslog
- closelog: Close connection to Syslog
- setlogmask: Cause certain messages to be ignored
- Syslog Example: Example of all of the above
Mathematics
- Mathematical Constants: Precise numeric values for often-used
constants.
- Trig Functions: Sine, cosine, tangent, and friends.
- Inverse Trig Functions: Arcsine, arccosine, etc.
- Exponents and Logarithms: Also pow and sqrt.
- Hyperbolic Functions: sinh, cosh, tanh, etc.
- Special Functions: Bessel, gamma, erf.
- Errors in Math Functions: Known Maximum Errors in Math Functions.
- Pseudo-Random Numbers: Functions for generating pseudo-random
numbers.
- FP Function Optimizations: Fast code or small code.
Pseudo-Random Numbers
- ISO Random:
rand
and friends.
- BSD Random:
random
and friends.
- SVID Random:
drand48
and friends.
Arithmetic
- Integers: Basic integer types and concepts
- Integer Division: Integer division with guaranteed rounding.
- Floating Point Numbers: Basic concepts. IEEE 754.
- Floating Point Classes: The five kinds of floating-point number.
- Floating Point Errors: When something goes wrong in a calculation.
- Rounding: Controlling how results are rounded.
- Control Functions: Saving and restoring the FPU's state.
- Arithmetic Functions: Fundamental operations provided by the library.
- Complex Numbers: The types. Writing complex constants.
- Operations on Complex: Projection, conjugation, decomposition.
- Parsing of Numbers: Converting strings to numbers.
- System V Number Conversion: An archaic way to convert numbers to strings.
Floating Point Errors
- FP Exceptions: IEEE 754 math exceptions and how to detect them.
- Infinity and NaN: Special values returned by calculations.
- Status bit operations: Checking for exceptions after the fact.
- Math Error Reporting: How the math functions report errors.
Arithmetic Functions
- Absolute Value: Absolute values of integers and floats.
- Normalization Functions: Extracting exponents and putting them back.
- Rounding Functions: Rounding floats to integers.
- Remainder Functions: Remainders on division, precisely defined.
- FP Bit Twiddling: Sign bit adjustment. Adding epsilon.
- FP Comparison Functions: Comparisons without risk of exceptions.
- Misc FP Arithmetic: Max, min, positive difference, multiply-add.
Parsing of Numbers
- Parsing of Integers: Functions for conversion of integer values.
- Parsing of Floats: Functions for conversion of floating-point
values.
Date and Time
- Time Basics: Concepts and definitions.
- Elapsed Time: Data types to represent elapsed times
- Processor And CPU Time: Time a program has spent executing.
- Calendar Time: Manipulation of ``real'' dates and times.
- Setting an Alarm: Sending a signal after a specified time.
- Sleeping: Waiting for a period of time.
Processor And CPU Time
- CPU Time: The
clock
function.
- Processor Time: The
times
function.
Calendar Time
- Simple Calendar Time: Facilities for manipulating calendar time.
- High-Resolution Calendar: A time representation with greater precision.
- Broken-down Time: Facilities for manipulating local time.
- High Accuracy Clock: Maintaining a high accuracy system clock.
- Formatting Calendar Time: Converting times to strings.
- Parsing Date and Time: Convert textual time and date information back
into broken-down time values.
- TZ Variable: How users specify the time zone.
- Time Zone Functions: Functions to examine or specify the time zone.
- Time Functions Example: An example program showing use of some of
the time functions.
Parsing Date and Time
- Low-Level Time String Parsing: Interpret string according to given format.
- General Time String Parsing: User-friendly function to parse data and
time strings.
Resource Usage And Limitation
- Resource Usage: Measuring various resources used.
- Limits on Resources: Specifying limits on resource usage.
- Priority: Reading or setting process run priority.
- Memory Resources: Querying memory available resources.
- Processor Resources: Learn about the processors available.
Priority
- Absolute Priority: The first tier of priority. Posix
- Realtime Scheduling: Scheduling among the process nobility
- Basic Scheduling Functions: Get/set scheduling policy, priority
- Traditional Scheduling: Scheduling among the vulgar masses
Traditional Scheduling
- Traditional Scheduling Intro:
- Traditional Scheduling Functions:
Memory Resources
- Memory Subsystem: Overview about traditional Unix memory handling.
- Query Memory Parameters: How to get information about the memory
subsystem?
Non-Local Exits
- Intro: When and how to use these facilities.
- Details: Functions for non-local exits.
- Non-Local Exits and Signals: Portability issues.
- System V contexts: Complete context control a la System V.
Signal Handling
- Concepts of Signals: Introduction to the signal facilities.
- Standard Signals: Particular kinds of signals with
standard names and meanings.
- Signal Actions: Specifying what happens when a
particular signal is delivered.
- Defining Handlers: How to write a signal handler function.
- Interrupted Primitives: Signal handlers affect use of
open
,
read
, write
and other functions.
- Generating Signals: How to send a signal to a process.
- Blocking Signals: Making the system hold signals temporarily.
- Waiting for a Signal: Suspending your program until a signal
arrives.
- Signal Stack: Using a Separate Signal Stack.
- BSD Signal Handling: Additional functions for backward
compatibility with BSD.
Concepts of Signals
- Kinds of Signals: Some examples of what can cause a signal.
- Signal Generation: Concepts of why and how signals occur.
- Delivery of Signal: Concepts of what a signal does to the
process.
Standard Signals
- Program Error Signals: Used to report serious program errors.
- Termination Signals: Used to interrupt and/or terminate the
program.
- Alarm Signals: Used to indicate expiration of timers.
- Asynchronous I/O Signals: Used to indicate input is available.
- Job Control Signals: Signals used to support job control.
- Operation Error Signals: Used to report operational system errors.
- Miscellaneous Signals: Miscellaneous Signals.
- Signal Messages: Printing a message describing a signal.
Signal Actions
- Basic Signal Handling: The simple
signal
function.
- Advanced Signal Handling: The more powerful
sigaction
function.
- Signal and Sigaction: How those two functions interact.
- Sigaction Function Example: An example of using the sigaction function.
- Flags for Sigaction: Specifying options for signal handling.
- Initial Signal Actions: How programs inherit signal actions.
Defining Handlers
- Handler Returns: Handlers that return normally, and what
this means.
- Termination in Handler: How handler functions terminate a program.
- Longjmp in Handler: Nonlocal transfer of control out of a
signal handler.
- Signals in Handler: What happens when signals arrive while
the handler is already occupied.
- Merged Signals: When a second signal arrives before the
first is handled.
- Nonreentrancy: Do not call any functions unless you know they
are reentrant with respect to signals.
- Atomic Data Access: A single handler can run in the middle of
reading or writing a single object.
Atomic Data Access
- Non-atomic Example: A program illustrating interrupted access.
- Types: Data types that guarantee no interruption.
- Usage: Proving that interruption is harmless.
Generating Signals
- Signaling Yourself: A process can send a signal to itself.
- Signaling Another Process: Send a signal to another process.
- Permission for kill: Permission for using
kill
.
- Kill Example: Using
kill
for Communication.
Blocking Signals
- Why Block: The purpose of blocking signals.
- Signal Sets: How to specify which signals to
block.
- Process Signal Mask: Blocking delivery of signals to your
process during normal execution.
- Testing for Delivery: Blocking to Test for Delivery of
a Signal.
- Blocking for Handler: Blocking additional signals while a
handler is being run.
- Checking for Pending Signals: Checking for Pending Signals
- Remembering a Signal: 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
- Using Pause: The simple way, using
pause
.
- Pause Problems: Why the simple way is often not very good.
- Sigsuspend: Reliably waiting for a specific signal.
BSD Signal Handling
- BSD Handler: BSD Function to Establish a Handler.
- Blocking in BSD: BSD Functions for Blocking Signals.
Program Basics
- Program Arguments: Parsing your program's command-line arguments.
- Environment Variables: Less direct parameters affecting your program
- System Calls: Requesting service from the system
- Program Termination: Telling the system you're done; return status
Program Arguments
- Argument Syntax: By convention, options start with a hyphen.
- Parsing Program Arguments: Ways to parse program options and arguments.
Parsing Program Arguments
- Getopt: Parsing program options using
getopt
.
- Argp: Parsing program options using
argp_parse
.
- Suboptions: Some programs need more detailed options.
- Suboptions Example: This shows how it could be done for
mount
.
Environment Variables
- Environment Access: How to get and set the values of
environment variables.
- Standard Environment: These environment variables have
standard interpretations.
Program Termination
- Normal Termination: If a program calls
exit
, a
process terminates normally.
- Exit Status: The
exit status
provides information
about why the process terminated.
- Cleanups on Exit: A process can run its own cleanup
functions upon normal termination.
- Aborting a Program: The
abort
function causes
abnormal program termination.
- Termination Internals: What happens when a process terminates.
Processes
- Running a Command: The easy way to run another program.
- Process Creation Concepts: An overview of the hard way to do it.
- Process Identification: How to get the process ID of a process.
- Creating a Process: How to fork a child process.
- Executing a File: How to make a process execute another program.
- Process Completion: How to tell when a child process has completed.
- Process Completion Status: How to interpret the status value
returned from a child process.
- BSD Wait Functions: More functions, for backward compatibility.
- Process Creation Example: A complete example program.
Job Control
- Concepts of Job Control: Jobs can be controlled by a shell.
- Job Control is Optional: Not all POSIX systems support job control.
- Controlling Terminal: How a process gets its controlling terminal.
- Access to the Terminal: How processes share the controlling terminal.
- Orphaned Process Groups: Jobs left after the user logs out.
- Implementing a Shell: What a shell must do to implement job control.
- Functions for Job Control: Functions to control process groups.
Implementing a Shell
- Data Structures: Introduction to the sample shell.
- Initializing the Shell: What the shell must do to take
responsibility for job control.
- Launching Jobs: Creating jobs to execute commands.
- Foreground and Background: Putting a job in foreground of background.
- Stopped and Terminated Jobs: Reporting job status.
- Continuing Stopped Jobs: How to continue a stopped job in
the foreground or background.
- Missing Pieces: Other parts of the shell.
Functions for Job Control
- Identifying the Terminal: Determining the controlling terminal's name.
- Process Group Functions: Functions for manipulating process groups.
- Terminal Access Functions: Functions for controlling terminal access.
Name Service Switch
- NSS Basics: What is this NSS good for.
- NSS Configuration File: Configuring NSS.
- NSS Module Internals: How does it work internally.
- Extending NSS: What to do to add services or databases.
NSS Configuration File
- Services in the NSS configuration: Service names in the NSS configuration.
- Actions in the NSS configuration: React appropriately to the lookup result.
- Notes on NSS Configuration File: Things to take care about while
configuring NSS.
NSS Module Internals
- NSS Module Names: Construction of the interface function of
the NSS modules.
- NSS Modules Interface: Programming interface in the NSS module
functions.
Extending NSS
- Adding another Service to NSS: What is to do to add a new service.
- NSS Module Function Internals: Guidelines for writing new NSS
service functions.
Users and Groups
- User and Group IDs: Each user has a unique numeric ID;
likewise for groups.
- Process Persona: The user IDs and group IDs of a process.
- Why Change Persona: Why a program might need to change
its user and/or group IDs.
- How Change Persona: Changing the user and group IDs.
- Reading Persona: How to examine the user and group IDs.
- Setting User ID: Functions for setting the user ID.
- Setting Groups: Functions for setting the group IDs.
- Enable/Disable Setuid: Turning setuid access on and off.
- Setuid Program Example: The pertinent parts of one sample program.
- Tips for Setuid: How to avoid granting unlimited access.
- Who Logged In: Getting the name of the user who logged in,
or of the real user ID of the current process.
- User Accounting Database: Keeping information about users and various
actions in databases.
- User Database: Functions and data structures for
accessing the user database.
- Group Database: Functions and data structures for
accessing the group database.
- Database Example: Example program showing the use of database
inquiry functions.
- Netgroup Database: Functions for accessing the netgroup database.
User Accounting Database
- Manipulating the Database: Scanning and modifying the user
accounting database.
- XPG Functions: A standardized way for doing the same thing.
- Logging In and Out: Functions from BSD that modify the user
accounting database.
User Database
- User Data Structure: What each user record contains.
- Lookup User: How to look for a particular user.
- Scanning All Users: Scanning the list of all users, one by one.
- Writing a User Entry: How a program can rewrite a user's record.
Group Database
- Group Data Structure: What each group record contains.
- Lookup Group: How to look for a particular group.
- Scanning All Groups: Scanning the list of all groups.
Netgroup Database
- Netgroup Data: Data in the Netgroup database and where
it comes from.
- Lookup Netgroup: How to look for a particular netgroup.
- Netgroup Membership: How to test for netgroup membership.
System Management
- Host Identification: Determining the name of the machine.
- Platform Type: Determining operating system and basic
machine type
- Filesystem Handling: Controlling/querying mounts
- System Parameters: Getting and setting various system parameters
Filesystem Handling
- Mount Information: What is or could be mounted?
- Mount-Unmount-Remount: Controlling what is mounted and how
Mount Information
- fstab: The
fstab
file
- mtab: The
mtab
file
- Other Mount Information: Other (non-libc) sources of mount information
System Configuration
- General Limits: Constants and functions that describe
various process-related limits that have
one uniform value for any given machine.
- System Options: Optional POSIX features.
- Version Supported: Version numbers of POSIX.1 and POSIX.2.
- Sysconf: Getting specific configuration values
of general limits and system options.
- Minimums: Minimum values for general limits.
- Limits for Files: Size limitations that pertain to individual files.
These can vary between file systems
or even from file to file.
- Options for Files: Optional features that some files may support.
- File Minimums: Minimum values for file limits.
- Pathconf: Getting the limit values for a particular file.
- Utility Limits: Capacity limits of some POSIX.2 utility programs.
- Utility Minimums: Minimum allowable values of those limits.
- String Parameters: Getting the default search path.
Sysconf
- Sysconf Definition: Detailed specifications of
sysconf
.
- Constants for Sysconf: The list of parameters
sysconf
can read.
- Examples of Sysconf: How to use
sysconf
and the parameter
macros properly together.
Cryptographic Functions
- Legal Problems: This software can get you locked up, or worse.
- getpass: Prompting the user for a password.
- crypt: A one-way function for UNIX passwords.
- DES Encryption: Routines for DES encryption.
Debugging Support
- Backtraces: Obtaining and printing a back trace of the
current stack.
Language Features
- Consistency Checking: Using
assert
to abort if
something ``impossible'' happens.
- Variadic Functions: Defining functions with varying numbers
of args.
- Null Pointer Constant: The macro
NULL
.
- Important Data Types: Data types for object sizes.
- Data Type Measurements: Parameters of data type representations.
Variadic Functions
- Why Variadic: Reasons for making functions take
variable arguments.
- How Variadic: How to define and call variadic functions.
- Variadic Example: A complete example.
How Variadic
- Variadic Prototypes: How to make a prototype for a function
with variable arguments.
- Receiving Arguments: Steps you must follow to access the
optional argument values.
- How Many Arguments: How to decide whether there are more arguments.
- Calling Variadics: Things you need to know about calling
variable arguments functions.
- Argument Macros: Detailed specification of the macros
for accessing variable arguments.
- Old Varargs: The pre-ISO way of defining variadic functions.
Data Type Measurements
- Width of Type: How many bits does an integer type hold?
- Range of Type: What are the largest and smallest values
that an integer type can hold?
- Floating Type Macros: Parameters that measure the floating point types.
- Structure Measurement: Getting measurements on structure types.
Floating Type Macros
- Floating Point Concepts: Definitions of terminology.
- Floating Point Parameters: Details of specific macros.
- IEEE Floating Point: The measurements for one common
representation.
Installation
- Configuring and compiling: How to compile and test GNU libc.
- Running make install: How to install it once you've got it compiled.
- Tools for Compilation: You'll need these first.
- Supported Configurations: What it runs on, what it doesn't.
- Linux: Specific advice for Linux systems.
- Reporting Bugs: So they'll get fixed.
Maintenance
- Source Layout: How to add new functions or header files
to the GNU C library.
- Porting: How to port the GNU C library to
a new machine or operating system.
Porting
- Hierarchy Conventions: The layout of the
sysdeps
hierarchy.
- Porting to Unix: Porting the library to an average
Unix-like system.