Go to the first, previous, next, last section, table of contents.
@shorttitlepage The GNU C Library Reference Manual
The GNU C Library
Reference Manual
Sandra Loosemore
with
Richard M. Stallman, Roland McGrath, Andrew Oram, and Ulrich Drepper
Edition 0.07 DRAFT
last updated 4 Oct 1996
for version 2.00 Beta
Copyright (C) 1993, '94, '95, '96 Free Software Foundation, Inc.
Published by the Free Software Foundation
59 Temple Place -- Suite 330,
Boston, MA 02111-1307 USA
Printed copies are available for $50 each.
ISBN 1-882114-53-1
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled "GNU Library General Public License" is included
exactly as in the original, and provided that the entire resulting
derived work is distributed under the terms of a permission notice
identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the text of the translation of the section entitled "GNU
Library General Public License" must be approved for accuracy by the
Foundation.
- Introduction: Purpose of the GNU C Library.
- Error Reporting: How the GNU Library functions report
error conditions.
- Memory Allocation: Your program can allocate memory dynamically
and manipulate it via pointers.
- Character Handling: Character testing and conversion functions.
- String and Array Utilities: Utilities for copying and comparing
strings and arrays.
- Extended Characters: Support for extended character sets.
- Locales: The country and language can affect
the behavior of library functions.
- Searching and Sorting: General searching and sorting functions.
- Pattern Matching: Matching wildcards and regular expressions,
and shell-style "word expansion".
- I/O Overview: Introduction to the I/O facilities.
- 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 interprocess communication
mechanism, with support for networking.
- Low-Level Terminal Interface: How to change the characteristics
of a terminal device.
- Mathematics: Math functions (transcendental functions,
random numbers, absolute value, etc.).
- Arithmetic: Low-level arithmetic functions.
- Date and Time: Functions for getting the date and time,
and for conversion between formats.
- Non-Local Exits: The
setjmp
and longjmp
facilities.
- Signal Handling: All about signals; how to send them,
block them, and handle them.
- Process Startup: 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 the various system databases.
- Users and Groups: How users are identified and classified.
- System Information: Getting information about the
hardware and software configuration
of the machine a program runs on.
- System Configuration: Parameters describing operating system limits.
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.
- Maintenance: How to install and maintain the GNU C Library.
- Copying: The GNU Library General Public License says
how you can copy and share the GNU C Library.
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: Getting Started
- Standards and Portability: Standards and Portability
- Using the Library: Using the Library
- Roadmap to the Manual: Roadmap to the Manual
Standards and Portability
- ISO C: The American National 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.
Using the Library
- Header Files: How to use 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: What all the error codes are.
- Error Messages: Mapping error codes onto error messages.
Memory Allocation
- Memory Concepts: An introduction to concepts and terminology.
- Dynamic Allocation and C: How to get different kinds of allocation in C.
- Unconstrained Allocation: The
malloc
facility allows fully general
dynamic allocation.
- 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.
- Relocating Allocator: Waste less memory, if you can tolerate
automatic relocation of the blocks you get.
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:
memalign
and valloc
.
- 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.
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
Automatic Storage with Variable Size
- 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.
Relocating Allocator
- Relocator Concepts: How to understand relocating allocation.
- Using Relocator: Functions for relocating allocation.
Character Handling
- Classification of Characters: Testing whether characters are
letters, digits, punctuation, etc.
- Case Conversion: Case mapping, and the like.
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.
Extended Characters
- Extended Char Intro: Multibyte codes versus wide characters.
- Locales and Extended Chars: The locale selects the character codes.
- Multibyte Char Intro: How multibyte codes are represented.
- Wide Char Intro: How wide characters are represented.
- Wide String Conversion: Converting wide strings to multibyte code
and vice versa.
- Length of Char: how many bytes make up one multibyte char.
- Converting One Char: Converting a string character by character.
- Example of Conversion: Example showing why converting
one character at a time may be useful.
- Shift State: Multibyte codes with "shift characters".
Locales and Internationalization
- 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.
- Standard Locales: Locale names available on all systems.
- Numeric Formatting: How to format numbers for the chosen locale.
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.
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.
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.
- 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.
- Formatted Output:
printf
and related functions.
- Customizing Printf: You can define new conversion specifiers for
printf
and friends.
- Formatted Input:
scanf
and related functions.
- Block Input/Output: Input and output operations on blocks of data.
- EOF and Errors: How you can tell if an I/O error happens.
- 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.
- Temporary Files: How to open a temporary file.
- Other Kinds of Streams: Other Kinds of Streams
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, what they do.
- Integer Conversions: Details of formatting integers.
- Floating-Point Conversions: Details of formatting floating-point numbers.
- Other Output Conversions: Details about formatting of strings,
characters, pointers, and the like.
- Formatted Output Functions: Descriptions of the actual functions.
- Variable Arguments Output:
vprintf
and friends.
- Parsing a Template String: What kinds of arguments does
a given template call for?
Customizing Printf
- Registering New Conversions
- Conversion Specifier Options
- Defining the Output Handler
- Printf Extension Example
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.
- 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
- Custom Streams
Programming Your Own Custom Streams
- Streams and Cookies
- Hook Functions
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.
- Waiting for I/O: How to check for input or output
on multiple file descriptors.
- Control Operations: Various other operations on file descriptors.
- Duplicating Descriptors: Fcntl commands for duplicating 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 a signal when input arrives.
File System Interface
- Working Directory: This is used to resolve relative file names.
- Accessing Directories: Finding out what files a directory contains.
- 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.
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.
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.
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.
- FIFO Special Files: Making a FIFO special file.
Sockets
- Socket Concepts: Basic concepts you need to know about.
- Communication Styles: Stream communication, datagrams, and others.
- Socket Addresses: How socket names ("addresses") work.
- File Namespace: Details about the file namespace.
- Internet Namespace: Details about the Internet namespace.
- Open/Close Sockets: Creating sockets and destroying them.
- Connections: Operations on sockets with connection state.
- Datagrams: Operations on datagram sockets.
- 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.
Internet Domain
- Internet Address Format: How socket addresses are specified in the
Internet namespace.
- Host Addresses: All about host addresses of Internet hosts.
- Protocols Database: Referring to protocols by name.
- 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 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
write
.
- Receiving Data: Reading data with
read
.
- 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 stream in the file namespace.
- Example Receiver: Another program, that receives those packets.
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
terminal I/O: echoing, signals, editing.
- Line Control: Sending break sequences, clearing buffers...
- Noncanon Example: How to read single characters without echo.
Terminal Modes
- Mode Data Types: The data type
struct termios
and related types.
- Mode Functions: Functions to read and set terminal attributes.
- Setting Modes: The right way to set 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
- Signal Characters
- Start/Stop Characters
Mathematics
- Domain and Range Errors: How overflow conditions and the
like are reported.
- Not a Number: Making NANs and testing for NANs.
- Trig Functions: Sine, cosine, and tangent.
- Inverse Trig Functions: Arc sine, arc cosine, and arc tangent.
- Exponents and Logarithms: Also includes square root.
- Hyperbolic Functions: Hyperbolic sine and friends.
- Pseudo-Random Numbers: Functions for generating pseudo-random numbers.
- Absolute Value: Absolute value functions.
Pseudo-Random Numbers
- ISO Random:
rand
and friends.
- BSD Random:
random
and friends.
Low-Level Arithmetic Functions
- Normalization Functions: Hacks for radix-2 representations.
- Rounding and Remainders: Determining the integer and
fractional parts of a float.
- Integer Division: Functions for performing integer division.
- Parsing of Numbers: Functions for "reading" numbers from strings.
- Predicates on Floats: Some miscellaneous test functions.
Parsing of Numbers
- Parsing of Integers: Functions for conversion of integer values.
- Parsing of Floats: Functions for conversion of floating-point.
Date and Time
- Processor Time: Measures processor time used by a program.
- 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 Time
- Basic CPU Time: The
clock
function.
- Detailed CPU 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.
- Formatting Date and Time: Converting times to strings.
- 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.
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.
- 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.
Basic 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.
Specifying 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 Signal Handlers
- Handler Returns
- Termination in Handler
- Longjmp in Handler
- Signals in Handler
- Nonreentrancy
- Atomic Data Access
Generating Signals
- Signaling Yourself: Signaling Yourself
- 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
Process Startup and Termination
- Program Arguments: Parsing your program's command-line arguments.
- Environment Variables: How to access parameters inherited from
a parent process.
- Program Termination: How to cause a process to terminate and
return status information to its parent.
Program Arguments
- Argument Syntax: By convention, options start with a hyphen.
- Parsing Options: The
getopt
function.
- Example of Getopt: An example of parsing options with
getopt
.
- Long Options: GNU utilities should accept long-named options.
Here is how to do that.
- Long Option Example: An example of using
getopt_long
.
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.
Child 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 child 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 : Concepts of Job Control
- 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 Job Control 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.
Users and Groups
- User and Group IDs: Each user and group has a unique numeric ID.
- 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: Restrictions on changing user and group IDs.
- Reading Persona: Examining the process's user and group IDs.
- Setting User ID
- Setting Groups
- Enable/Disable Setuid
- Setuid Program Example: Setuid Program Example
- Tips for Setuid
- Who Logged In: Getting the name of the user who logged in,
or of the real user ID of the current process.
- 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 use of database
inquiry functions.
User Database
- User Data Structure
- Lookup User
- Scanning All Users: Scanning the List of All Users
- Writing a User Entry
Group Database
- Group Data Structure
- Lookup Group
- Scanning All Groups: Scanning the List of All Groups
System Information
- Host Identification: Determining the name of the machine.
- Hardware/Software Type ID: Determining the hardware type and
operating system type.
System Configuration Limits
- 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 on 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 POSIX.2 utility programs.
- Utility Minimums: Minimum allowable values of those limits.
- String Parameters: Getting the default search path.
Library Facilities that are Part of the C Language
- Consistency Checking: Using
assert
to abort
if something "impossible" happens.
- Variadic Functions: Defining functions with varying
numbers of arguments.
- 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.
- Argument Macros: Detailed specification of the macros
for accessing variable arguments.
- Variadic Example: A complete example.
How Variadic Functions are Defined and Used
- 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.
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 floating-point types.
- Structure Measurement: Getting measurements on structure types.
Floating Type Macros
- Floating Point Concepts: Definitions of terminology.
- Floating Point Parameters: Dimensions, limits of floating point types.
- IEEE Floating Point: How one common representation is described.
Library Maintenance
- Installation: How to configure, compile and install
the GNU C library.
- Reporting Bugs: How to report bugs (if you want to
get them fixed) and other troubles
you may have with the GNU C library.
- Porting: How to port the GNU C library to
a new machine or operating system.
- Contributors: Who wrote what parts of the GNU C Library.
Porting the GNU C Library
- Hierarchy Conventions: How the `sysdeps' hierarchy is
layed out.
- Porting to Unix: Porting the library to an average
Unix-like system.
The C language provides no built-in facilities for performing such
common operations as input/output, memory management, string
manipulation, and the like. Instead, these facilities are defined
in a standard library, which you compile and link with your
programs.
The GNU C library, described in this document, defines all of the
library functions that are specified by the ISO C standard, as well as
additional features specific to POSIX and other derivatives of the Unix
operating system, and extensions specific to the GNU system.
The purpose of this manual is to tell you how to use the facilities
of the GNU library. We have mentioned which features belong to which
standards to help you identify things that are potentially nonportable
to other systems. But the emphasis in this manual is not on strict
portability.
This manual is written with the assumption that you are at least
somewhat familiar with the C programming language and basic programming
concepts. Specifically, familiarity with ISO standard C
(see section 1.2.1 ISO C), rather than "traditional" pre-ISO C dialects, is
assumed.
The GNU C library includes several header files, each of which
provides definitions and declarations for a group of related facilities;
this information is used by the C compiler when processing your program.
For example, the header file `stdio.h' declares facilities for
performing input and output, and the header file `string.h'
declares string processing utilities. The organization of this manual
generally follows the same division as the header files.
If you are reading this manual for the first time, you should read all
of the introductory material and skim the remaining chapters. There are
a lot of functions in the GNU C library and it's not realistic to
expect that you will be able to remember exactly how to use each
and every one of them. It's more important to become generally familiar
with the kinds of facilities that the library provides, so that when you
are writing your programs you can recognize when to make use of
library functions, and where in this manual you can find more
specific information about them.
This section discusses the various standards and other sources that the
GNU C library is based upon. These sources include the ISO C and
POSIX standards, and the System V and Berkeley Unix implementations.
The primary focus of this manual is to tell you how to make effective
use of the GNU library facilities. But if you are concerned about
making your programs compatible with these standards, or portable to
operating systems other than GNU, this can affect how you use the
library. This section gives you an overview of these standards, so that
you will know what they are when they are mentioned in other parts of
the manual.
See section B Summary of Library Facilities, for an alphabetical list of the functions and
other symbols provided by the library. This list also states which
standards each function or symbol comes from.
- 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.
The GNU C library is compatible with the C standard adopted by the
American National Standards Institute (ANSI):
American National Standard X3.159-1989---"ANSI C" and later
by the International Standardization Organization (ISO):
ISO/IEC 9899:1990, "Programming languages--C".
We here refer to the standard as ISO C since this is the more
general standard in respect of ratification.
The header files and library facilities that make up the GNU library are
a superset of those specified by the ISO C standard.
If you are concerned about strict adherence to the ISO C standard, you
should use the `-ansi' option when you compile your programs with
the GNU C compiler. This tells the compiler to define only ISO
standard features from the library header files, unless you explicitly
ask for additional features. See section 1.3.4 Feature Test Macros, for
information on how to do this.
Being able to restrict the library to include only ISO C features is
important because ISO C puts limitations on what names can be defined
by the library implementation, and the GNU extensions don't fit these
limitations. See section 1.3.3 Reserved Names, for more information about these
restrictions.
This manual does not attempt to give you complete details on the
differences between ISO C and older dialects. It gives advice on how
to write programs to work portably under multiple C dialects, but does
not aim for completeness.
The GNU library is also compatible with the IEEE POSIX family of
standards, known more formally as the Portable Operating System
Interface for Computer Environments. POSIX is derived mostly from
various versions of the Unix operating system.
The library facilities specified by the POSIX standards are a superset
of those required by ISO C; POSIX specifies additional features for
ISO C functions, as well as specifying new additional functions. In
general, the additional requirements and functionality defined by the
POSIX standards are aimed at providing lower-level support for a
particular kind of operating system environment, rather than general
programming language support which can run in many diverse operating
system environments.
The GNU C library implements all of the functions specified in
IEEE Std 1003.1-1990, the POSIX System Application Program
Interface, commonly referred to as POSIX.1. The primary extensions to
the ISO C facilities specified by this standard include file system
interface primitives (see section 9 File System Interface), device-specific
terminal control functions (see section 12 Low-Level Terminal Interface), and
process control functions (see section 23 Processes).
Some facilities from IEEE Std 1003.2-1992, the POSIX Shell and
Utilities standard (POSIX.2) are also implemented in the GNU library.
These include utilities for dealing with regular expressions and other
pattern matching facilities (see section 16 Pattern Matching).
The GNU C library defines facilities from some versions of Unix which
are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD,
and 4.4 BSD Unix systems (also known as Berkeley Unix) and from
SunOS (a popular 4.2 BSD derivative that includes some Unix System
V functionality). These systems support most of the ISO C and POSIX
facilities, and 4.4 BSD and newer releases of SunOS in fact support them all.
The BSD facilities include symbolic links (see section 9.4 Symbolic Links), the
select
function (see section 8.6 Waiting for Input or Output), the BSD signal
functions (see section 21.10 BSD Signal Handling), and sockets (see section 11 Sockets).
The System V Interface Description (SVID) is a document describing
the AT&T Unix System V operating system. It is to some extent a
superset of the POSIX standard (see section 1.2.2 POSIX (The Portable Operating System Interface)).
The GNU C library defines some of the facilities required by the SVID
that are not also required by the ISO C or POSIX standards, for
compatibility with System V Unix and other Unix systems (such as
SunOS) which include these facilities. However, many of the more
obscure and less generally useful facilities required by the SVID are
not included. (In fact, Unix System V itself does not provide them all.)
This section describes some of the practical issues involved in using
the GNU C library.
Libraries for use by C programs really consist of two parts: header
files that define types and macros and declare variables and
functions; and the actual library or archive that contains the
definitions of the variables and functions.
(Recall that in C, a declaration merely provides information that
a function or variable exists and gives its type. For a function
declaration, information about the types of its arguments might be
provided as well. The purpose of declarations is to allow the compiler
to correctly process references to the declared variables and functions.
A definition, on the other hand, actually allocates storage for a
variable or says what a function does.)
In order to use the facilities in the GNU C library, you should be sure
that your program source files include the appropriate header files.
This is so that the compiler has declarations of these facilities
available and can correctly process references to them. Once your
program has been compiled, the linker resolves these references to
the actual definitions provided in the archive file.
Header files are included into a program source file by the
`#include' preprocessor directive. The C language supports two
forms of this directive; the first,
#include "header"
is typically used to include a header file header that you write
yourself; this would contain definitions and declarations describing the
interfaces between the different parts of your particular application.
By contrast,
#include <file.h>
is typically used to include a header file `file.h' that contains
definitions and declarations for a standard library. This file would
normally be installed in a standard place by your system administrator.
You should use this second form for the C library header files.
Typically, `#include' directives are placed at the top of the C
source file, before any other code. If you begin your source files with
some comments explaining what the code in the file does (a good idea),
put the `#include' directives immediately afterwards, following the
feature test macro definition (see section 1.3.4 Feature Test Macros).
For more information about the use of header files and `#include'
directives, see section `Header Files' in The GNU C Preprocessor Manual.
The GNU C library provides several header files, each of which contains
the type and macro definitions and variable and function declarations
for a group of related facilities. This means that your programs may
need to include several header files, depending on exactly which
facilities you are using.
Some library header files include other library header files
automatically. However, as a matter of programming style, you should
not rely on this; it is better to explicitly include all the header
files required for the library facilities you are using. The GNU C
library header files have been written in such a way that it doesn't
matter if a header file is accidentally included more than once;
including a header file a second time has no effect. Likewise, if your
program needs to include multiple header files, the order in which they
are included doesn't matter.
Compatibility Note: Inclusion of standard header files in any
order and any number of times works in any ISO C implementation.
However, this has traditionally not been the case in many older C
implementations.
Strictly speaking, you don't have to include a header file to use
a function it declares; you could declare the function explicitly
yourself, according to the specifications in this manual. But it is
usually better to include the header file because it may define types
and macros that are not otherwise available and because it may define
more efficient macro replacements for some functions. It is also a sure
way to have the correct declaration.
If we describe something as a function in this manual, it may have a
macro definition as well. This normally has no effect on how your
program runs--the macro definition does the same thing as the function
would. In particular, macro equivalents for library functions evaluate
arguments exactly once, in the same way that a function call would. The
main reason for these macro definitions is that sometimes they can
produce an inline expansion that is considerably faster than an actual
function call.
Taking the address of a library function works even if it is also
defined as a macro. This is because, in this context, the name of the
function isn't followed by the left parenthesis that is syntactically
necessary to recognize a macro call.
You might occasionally want to avoid using the macro definition of a
function--perhaps to make your program easier to debug. There are
two ways you can do this:
-
You can avoid a macro definition in a specific use by enclosing the name
of the function in parentheses. This works because the name of the
function doesn't appear in a syntactic context where it is recognizable
as a macro call.
-
You can suppress any macro definition for a whole source file by using
the `#undef' preprocessor directive, unless otherwise stated
explicitly in the description of that facility.
For example, suppose the header file `stdlib.h' declares a function
named abs
with
extern int abs (int);
and also provides a macro definition for abs
. Then, in:
#include <stdlib.h>
int f (int *i) { return (abs (++*i)); }
the reference to abs
might refer to either a macro or a function.
On the other hand, in each of the following examples the reference is
to a function and not a macro.
#include <stdlib.h>
int g (int *i) { return ((abs)(++*i)); }
#undef abs
int h (int *i) { return (abs (++*i)); }
Since macro definitions that double for a function behave in
exactly the same way as the actual function version, there is usually no
need for any of these methods. In fact, removing macro definitions usually
just makes your program slower.
The names of all library types, macros, variables and functions that
come from the ISO C standard are reserved unconditionally; your program
may not redefine these names. All other library names are
reserved if your program explicitly includes the header file that
defines or declares them. There are several reasons for these
restrictions:
-
Other people reading your code could get very confused if you were using
a function named
exit
to do something completely different from
what the standard exit
function does, for example. Preventing
this situation helps to make your programs easier to understand and
contributes to modularity and maintainability.
-
It avoids the possibility of a user accidentally redefining a library
function that is called by other library functions. If redefinition
were allowed, those other functions would not work properly.
-
It allows the compiler to do whatever special optimizations it pleases
on calls to these functions, without the possibility that they may have
been redefined by the user. Some library facilities, such as those for
dealing with variadic arguments (see section 28.14 Variadic Functions)
and non-local exits (see section 20 Non-Local Exits), actually require a
considerable amount of cooperation on the part of the C compiler, and
implementationally it might be easier for the compiler to treat these as
built-in parts of the language.
In addition to the names documented in this manual, reserved names
include all external identifiers (global functions and variables) that
begin with an underscore (`_') and all identifiers regardless of
use that begin with either two underscores or an underscore followed by
a capital letter are reserved names. This is so that the library and
header files can define functions, variables, and macros for internal
purposes without risk of conflict with names in user programs.
Some additional classes of identifier names are reserved for future
extensions to the C language or the POSIX.1 environment. While using these
names for your own purposes right now might not cause a problem, they do
raise the possibility of conflict with future versions of the C
or POSIX standards, so you should avoid these names.
-
Names beginning with a capital `E' followed a digit or uppercase
letter may be used for additional error code names. See section 2 Error Reporting.
-
Names that begin with either `is' or `to' followed by a
lowercase letter may be used for additional character testing and
conversion functions. See section 4 Character Handling.
-
Names that begin with `LC_' followed by an uppercase letter may be
used for additional macros specifying locale attributes.
See section 19 Locales and Internationalization.
-
Names of all existing mathematics functions (see section 13 Mathematics)
suffixed with `f' or `l' are reserved for corresponding
functions that operate on
float
and long double
arguments,
respectively.
-
Names that begin with `SIG' followed by an uppercase letter are
reserved for additional signal names. See section 21.2 Standard Signals.
-
Names that begin with `SIG_' followed by an uppercase letter are
reserved for additional signal actions. See section 21.3.1 Basic Signal Handling.
-
Names beginning with `str', `mem', or `wcs' followed by a
lowercase letter are reserved for additional string and array functions.
See section 5 String and Array Utilities.
-
Names that end with `_t' are reserved for additional type names.
In addition, some individual header files reserve names beyond
those that they actually define. You only need to worry about these
restrictions if your program includes that particular header file.
-
The header file `dirent.h' reserves names prefixed with
`d_'.
-
The header file `fcntl.h' reserves names prefixed with
`l_', `F_', `O_', and `S_'.
-
The header file `grp.h' reserves names prefixed with `gr_'.
-
The header file `limits.h' reserves names suffixed with `_MAX'.
-
The header file `pwd.h' reserves names prefixed with `pw_'.
-
The header file `signal.h' reserves names prefixed with `sa_'
and `SA_'.
-
The header file `sys/stat.h' reserves names prefixed with `st_'
and `S_'.
-
The header file `sys/times.h' reserves names prefixed with `tms_'.
-
The header file `termios.h' reserves names prefixed with `c_',
`V', `I', `O', and `TC'; and names prefixed with
`B' followed by a digit.
The exact set of features available when you compile a source file
is controlled by which feature test macros you define.
If you compile your programs using `gcc -ansi', you get only the
ISO C library features, unless you explicitly request additional
features by defining one or more of the feature macros.
See section `GNU CC Command Options' in The GNU CC Manual,
for more information about GCC options.
You should define these macros by using `#define' preprocessor
directives at the top of your source code files. These directives
must come before any #include
of a system header file. It
is best to make them the very first thing in the file, preceded only by
comments. You could also use the `-D' option to GCC, but it's
better if you make the source files indicate their own meaning in a
self-contained way.
- Macro: _POSIX_SOURCE
-
If you define this macro, then the functionality from the POSIX.1
standard (IEEE Standard 1003.1) is available, as well as all of the
ISO C facilities.
- Macro: _POSIX_C_SOURCE
-
If you define this macro with a value of
1
, then the
functionality from the POSIX.1 standard (IEEE Standard 1003.1) is made
available. If you define this macro with a value of 2
, then both
the functionality from the POSIX.1 standard and the functionality from
the POSIX.2 standard (IEEE Standard 1003.2) are made available. This is
in addition to the ISO C facilities.
- Macro: _BSD_SOURCE
-
If you define this macro, functionality derived from 4.3 BSD Unix is
included as well as the ISO C, POSIX.1, and POSIX.2 material.
Some of the features derived from 4.3 BSD Unix conflict with the
corresponding features specified by the POSIX.1 standard. If this
macro is defined, the 4.3 BSD definitions take precedence over the
POSIX definitions.
Due to the nature of some of the conflicts between 4.3 BSD and POSIX.1,
you need to use a special BSD compatibility library when linking
programs compiled for BSD compatibility. This is because some functions
must be defined in two different ways, one of them in the normal C
library, and one of them in the compatibility library. If your program
defines _BSD_SOURCE
, you must give the option `-lbsd-compat'
to the compiler or linker when linking the program, to tell it to find
functions in this special compatibility library before looking for them in
the normal C library.
- Macro: _SVID_SOURCE
-
If you define this macro, functionality derived from SVID is
included as well as the ISO C, POSIX.1, POSIX.2, and X/Open material.
- Macro: _XOPEN_SOURCE
-
If you define this macro, functionality described in the X/Open
Portability Guide is included. This is a superset of the POSIX.1 and
POSIX.2 functionality and in fact
_POSIX_SOURCE
and
_POSIX_C_SOURCE
are automatically defined.
As the unification of all Unices, functionality only available in
BSD and SVID is also included.
If the macro _XOPEN_SOURCE_EXTENDED
is also defined, even more
functionality is available. The extra functions will make all functions
available which are necessary for the X/Open Unix brand.
- Macro: _GNU_SOURCE
-
If you define this macro, everything is included: ISO C, POSIX.1,
POSIX.2, BSD, SVID, X/Open, and GNU extensions. In the cases where
POSIX.1 conflicts with BSD, the POSIX definitions take precedence.
If you want to get the full effect of _GNU_SOURCE
but make the
BSD definitions take precedence over the POSIX definitions, use this
sequence of definitions:
#define _GNU_SOURCE
#define _BSD_SOURCE
#define _SVID_SOURCE
Note that if you do this, you must link your program with the BSD
compatibility library by passing the `-lbsd-compat' option to the
compiler or linker. Note: If you forget to do this, you may
get very strange errors at run time.
- Macro: _REENTRANT
-
- Macro: _THREAD_SAFE
-
If you define one of these macros, reentrant versions of several functions get
declared. Some of the functions are specified in POSIX.1c but many others
are only available on a few other systems or are unique to GNU libc.
The problem is that the standardization of the thread safe C library
interface still is behind.
Unlike on some other systems no special version of the C library must be
used for linking. There is only one version but while compiling this
it must have been specified to compile as thread safe.
We recommend you use _GNU_SOURCE
in new programs. If you don't
specify the `-ansi' option to GCC and don't define any of these
macros explicitly, the effect is the same as defining
_POSIX_C_SOURCE
to 2 and _POSIX_SOURCE
,
_SVID_SOURCE
, and _BSD_SOURCE
to 1.
When you define a feature test macro to request a larger class of features,
it is harmless to define in addition a feature test macro for a subset of
those features. For example, if you define _POSIX_C_SOURCE
, then
defining _POSIX_SOURCE
as well has no effect. Likewise, if you
define _GNU_SOURCE
, then defining either _POSIX_SOURCE
or
_POSIX_C_SOURCE
or _SVID_SOURCE
as well has no effect.
Note, however, that the features of _BSD_SOURCE
are not a subset of
any of the other feature test macros supported. This is because it defines
BSD features that take precedence over the POSIX features that are
requested by the other macros. For this reason, defining
_BSD_SOURCE
in addition to the other feature test macros does have
an effect: it causes the BSD features to take priority over the conflicting
POSIX features.
Here is an overview of the contents of the remaining chapters of
this manual.
-
section 2 Error Reporting, describes how errors detected by the library
are reported.
-
section A C Language Facilities in the Library, contains information about library support for
standard parts of the C language, including things like the
sizeof
operator and the symbolic constant NULL
, how to write functions
accepting variable numbers of arguments, and constants describing the
ranges and other properties of the numerical types. There is also a simple
debugging mechanism which allows you to put assertions in your code, and
have diagnostic messages printed if the tests fail.
-
section 3 Memory Allocation, describes the GNU library's facilities for
dynamic allocation of storage. If you do not know in advance how much
storage your program needs, you can allocate it dynamically instead,
and manipulate it via pointers.
-
section 4 Character Handling, contains information about character
classification functions (such as
isspace
) and functions for
performing case conversion.
-
section 5 String and Array Utilities, has descriptions of functions for
manipulating strings (null-terminated character arrays) and general
byte arrays, including operations such as copying and comparison.
-
section 6 Input/Output Overview, gives an overall look at the input and output
facilities in the library, and contains information about basic concepts
such as file names.
-
section 7 Input/Output on Streams, describes I/O operations involving streams (or
FILE *
objects). These are the normal C library functions
from `stdio.h'.
-
section 8 Low-Level Input/Output, contains information about I/O operations
on file descriptors. File descriptors are a lower-level mechanism
specific to the Unix family of operating systems.
-
section 9 File System Interface, has descriptions of operations on entire
files, such as functions for deleting and renaming them and for creating
new directories. This chapter also contains information about how you
can access the attributes of a file, such as its owner and file protection
modes.
-
section 10 Pipes and FIFOs, contains information about simple interprocess
communication mechanisms. Pipes allow communication between two related
processes (such as between a parent and child), while FIFOs allow
communication between processes sharing a common file system on the same
machine.
-
section 11 Sockets, describes a more complicated interprocess communication
mechanism that allows processes running on different machines to
communicate over a network. This chapter also contains information about
Internet host addressing and how to use the system network databases.
-
section 12 Low-Level Terminal Interface, describes how you can change the
attributes of a terminal device. If you want to disable echo of
characters typed by the user, for example, read this chapter.
-
section 13 Mathematics, contains information about the math library
functions. These include things like random-number generators and
remainder functions on integers as well as the usual trigonometric and
exponential functions on floating-point numbers.
-
section 14 Low-Level Arithmetic Functions, describes functions
for simple arithmetic, analysis of floating-point values, and reading
numbers from strings.
-
section 15 Searching and Sorting, contains information about functions
for searching and sorting arrays. You can use these functions on any
kind of array by providing an appropriate comparison function.
-
section 16 Pattern Matching, presents functions for matching regular expressions
and shell file name patterns, and for expanding words as the shell does.
-
section 17 Date and Time, describes functions for measuring both calendar time
and CPU time, as well as functions for setting alarms and timers.
-
section 18 Extended Characters, contains information about manipulating
characters and strings using character sets larger than will fit in
the usual
char
data type.
-
section 19 Locales and Internationalization, describes how selecting a particular country
or language affects the behavior of the library. For example, the locale
affects collation sequences for strings and how monetary values are
formatted.
-
section 20 Non-Local Exits, contains descriptions of the
setjmp
and
longjmp
functions. These functions provide a facility for
goto
-like jumps which can jump from one function to another.
-
section 21 Signal Handling, tells you all about signals--what they are,
how to establish a handler that is called when a particular kind of
signal is delivered, and how to prevent signals from arriving during
critical sections of your program.
-
section 22 Process Startup and Termination, tells how your programs can access their
command-line arguments and environment variables.
-
section 23 Processes, contains information about how to start new processes
and run programs.
-
section 24 Job Control, describes functions for manipulating process groups
and the controlling terminal. This material is probably only of
interest if you are writing a shell or other program which handles job
control specially.
-
section 25 System Databases and Name Service Switch, describes the services which are available
for looking up names in the system databases, how to determine which
service is used for which database, and how these services are
implemented so that contributors can design their own services.
-
section 26.12 User Database, and section 26.13 Group Database, tell you how to access
the system user and group databases.
-
section 27 System Information, describes functions for getting information
about the hardware and software configuration your program is executing
under.
-
section 28 System Configuration Parameters, tells you how you can get information about
various operating system limits. Most of these parameters are provided for
compatibility with POSIX.
-
section B Summary of Library Facilities, gives a summary of all the functions, variables, and
macros in the library, with complete data types and function prototypes,
and says what standard or system each is derived from.
-
section C Library Maintenance, explains how to build and install the GNU C library on
your system, how to report any bugs you might find, and how to add new
functions or port the library to a new system.
If you already know the name of the facility you are interested in, you
can look it up in section B Summary of Library Facilities. This gives you a summary of
its syntax and a pointer to where you can find a more detailed
description. This appendix is particularly useful if you just want to
verify the order and type of arguments to a function, for example. It
also tells you what standard or system each function, variable, or macro
is derived from.
Go to the first, previous, next, last section, table of contents.