This is /home/vagrant/rpmbuild/BUILD/build-eglibc/manual/libc.info,
produced by makeinfo version 4.13 from libc.texinfo.

INFO-DIR-SECTION Software libraries
START-INFO-DIR-ENTRY
* Libc: (libc).                 C library.
END-INFO-DIR-ENTRY

INFO-DIR-SECTION GNU C library functions and macros
START-INFO-DIR-ENTRY
* ALTWERASE: (libc)Local Modes.
* ARGP_ERR_UNKNOWN: (libc)Argp Parser Functions.
* ARG_MAX: (libc)General Limits.
* BC_BASE_MAX: (libc)Utility Limits.
* BC_DIM_MAX: (libc)Utility Limits.
* BC_SCALE_MAX: (libc)Utility Limits.
* BC_STRING_MAX: (libc)Utility Limits.
* BRKINT: (libc)Input Modes.
* BUFSIZ: (libc)Controlling Buffering.
* CCTS_OFLOW: (libc)Control Modes.
* CHILD_MAX: (libc)General Limits.
* CIGNORE: (libc)Control Modes.
* CLK_TCK: (libc)Processor Time.
* CLOCAL: (libc)Control Modes.
* CLOCKS_PER_SEC: (libc)CPU Time.
* COLL_WEIGHTS_MAX: (libc)Utility Limits.
* CPU_CLR: (libc)CPU Affinity.
* CPU_ISSET: (libc)CPU Affinity.
* CPU_SET: (libc)CPU Affinity.
* CPU_SETSIZE: (libc)CPU Affinity.
* CPU_ZERO: (libc)CPU Affinity.
* CREAD: (libc)Control Modes.
* CRTS_IFLOW: (libc)Control Modes.
* CS5: (libc)Control Modes.
* CS6: (libc)Control Modes.
* CS7: (libc)Control Modes.
* CS8: (libc)Control Modes.
* CSIZE: (libc)Control Modes.
* CSTOPB: (libc)Control Modes.
* DES_FAILED: (libc)DES Encryption.
* DTTOIF: (libc)Directory Entries.
* E2BIG: (libc)Error Codes.
* EACCES: (libc)Error Codes.
* EADDRINUSE: (libc)Error Codes.
* EADDRNOTAVAIL: (libc)Error Codes.
* EADV: (libc)Error Codes.
* EAFNOSUPPORT: (libc)Error Codes.
* EAGAIN: (libc)Error Codes.
* EALREADY: (libc)Error Codes.
* EAUTH: (libc)Error Codes.
* EBACKGROUND: (libc)Error Codes.
* EBADE: (libc)Error Codes.
* EBADF: (libc)Error Codes.
* EBADFD: (libc)Error Codes.
* EBADMSG: (libc)Error Codes.
* EBADR: (libc)Error Codes.
* EBADRPC: (libc)Error Codes.
* EBADRQC: (libc)Error Codes.
* EBADSLT: (libc)Error Codes.
* EBFONT: (libc)Error Codes.
* EBUSY: (libc)Error Codes.
* ECANCELED: (libc)Error Codes.
* ECHILD: (libc)Error Codes.
* ECHO: (libc)Local Modes.
* ECHOCTL: (libc)Local Modes.
* ECHOE: (libc)Local Modes.
* ECHOK: (libc)Local Modes.
* ECHOKE: (libc)Local Modes.
* ECHONL: (libc)Local Modes.
* ECHOPRT: (libc)Local Modes.
* ECHRNG: (libc)Error Codes.
* ECOMM: (libc)Error Codes.
* ECONNABORTED: (libc)Error Codes.
* ECONNREFUSED: (libc)Error Codes.
* ECONNRESET: (libc)Error Codes.
* ED: (libc)Error Codes.
* EDEADLK: (libc)Error Codes.
* EDEADLOCK: (libc)Error Codes.
* EDESTADDRREQ: (libc)Error Codes.
* EDIED: (libc)Error Codes.
* EDOM: (libc)Error Codes.
* EDOTDOT: (libc)Error Codes.
* EDQUOT: (libc)Error Codes.
* EEXIST: (libc)Error Codes.
* EFAULT: (libc)Error Codes.
* EFBIG: (libc)Error Codes.
* EFTYPE: (libc)Error Codes.
* EGRATUITOUS: (libc)Error Codes.
* EGREGIOUS: (libc)Error Codes.
* EHOSTDOWN: (libc)Error Codes.
* EHOSTUNREACH: (libc)Error Codes.
* EHWPOISON: (libc)Error Codes.
* EIDRM: (libc)Error Codes.
* EIEIO: (libc)Error Codes.
* EILSEQ: (libc)Error Codes.
* EINPROGRESS: (libc)Error Codes.
* EINTR: (libc)Error Codes.
* EINVAL: (libc)Error Codes.
* EIO: (libc)Error Codes.
* EISCONN: (libc)Error Codes.
* EISDIR: (libc)Error Codes.
* EISNAM: (libc)Error Codes.
* EKEYEXPIRED: (libc)Error Codes.
* EKEYREJECTED: (libc)Error Codes.
* EKEYREVOKED: (libc)Error Codes.
* EL2HLT: (libc)Error Codes.
* EL2NSYNC: (libc)Error Codes.
* EL3HLT: (libc)Error Codes.
* EL3RST: (libc)Error Codes.
* ELIBACC: (libc)Error Codes.
* ELIBBAD: (libc)Error Codes.
* ELIBEXEC: (libc)Error Codes.
* ELIBMAX: (libc)Error Codes.
* ELIBSCN: (libc)Error Codes.
* ELNRNG: (libc)Error Codes.
* ELOOP: (libc)Error Codes.
* EMEDIUMTYPE: (libc)Error Codes.
* EMFILE: (libc)Error Codes.
* EMLINK: (libc)Error Codes.
* EMSGSIZE: (libc)Error Codes.
* EMULTIHOP: (libc)Error Codes.
* ENAMETOOLONG: (libc)Error Codes.
* ENAVAIL: (libc)Error Codes.
* ENEEDAUTH: (libc)Error Codes.
* ENETDOWN: (libc)Error Codes.
* ENETRESET: (libc)Error Codes.
* ENETUNREACH: (libc)Error Codes.
* ENFILE: (libc)Error Codes.
* ENOANO: (libc)Error Codes.
* ENOBUFS: (libc)Error Codes.
* ENOCSI: (libc)Error Codes.
* ENODATA: (libc)Error Codes.
* ENODEV: (libc)Error Codes.
* ENOENT: (libc)Error Codes.
* ENOEXEC: (libc)Error Codes.
* ENOKEY: (libc)Error Codes.
* ENOLCK: (libc)Error Codes.
* ENOLINK: (libc)Error Codes.
* ENOMEDIUM: (libc)Error Codes.
* ENOMEM: (libc)Error Codes.
* ENOMSG: (libc)Error Codes.
* ENONET: (libc)Error Codes.
* ENOPKG: (libc)Error Codes.
* ENOPROTOOPT: (libc)Error Codes.
* ENOSPC: (libc)Error Codes.
* ENOSR: (libc)Error Codes.
* ENOSTR: (libc)Error Codes.
* ENOSYS: (libc)Error Codes.
* ENOTBLK: (libc)Error Codes.
* ENOTCONN: (libc)Error Codes.
* ENOTDIR: (libc)Error Codes.
* ENOTEMPTY: (libc)Error Codes.
* ENOTNAM: (libc)Error Codes.
* ENOTRECOVERABLE: (libc)Error Codes.
* ENOTSOCK: (libc)Error Codes.
* ENOTSUP: (libc)Error Codes.
* ENOTTY: (libc)Error Codes.
* ENOTUNIQ: (libc)Error Codes.
* ENXIO: (libc)Error Codes.
* EOF: (libc)EOF and Errors.
* EOPNOTSUPP: (libc)Error Codes.
* EOVERFLOW: (libc)Error Codes.
* EOWNERDEAD: (libc)Error Codes.
* EPERM: (libc)Error Codes.
* EPFNOSUPPORT: (libc)Error Codes.
* EPIPE: (libc)Error Codes.
* EPROCLIM: (libc)Error Codes.
* EPROCUNAVAIL: (libc)Error Codes.
* EPROGMISMATCH: (libc)Error Codes.
* EPROGUNAVAIL: (libc)Error Codes.
* EPROTO: (libc)Error Codes.
* EPROTONOSUPPORT: (libc)Error Codes.
* EPROTOTYPE: (libc)Error Codes.
* EQUIV_CLASS_MAX: (libc)Utility Limits.
* ERANGE: (libc)Error Codes.
* EREMCHG: (libc)Error Codes.
* EREMOTE: (libc)Error Codes.
* EREMOTEIO: (libc)Error Codes.
* ERESTART: (libc)Error Codes.
* ERFKILL: (libc)Error Codes.
* EROFS: (libc)Error Codes.
* ERPCMISMATCH: (libc)Error Codes.
* ESHUTDOWN: (libc)Error Codes.
* ESOCKTNOSUPPORT: (libc)Error Codes.
* ESPIPE: (libc)Error Codes.
* ESRCH: (libc)Error Codes.
* ESRMNT: (libc)Error Codes.
* ESTALE: (libc)Error Codes.
* ESTRPIPE: (libc)Error Codes.
* ETIME: (libc)Error Codes.
* ETIMEDOUT: (libc)Error Codes.
* ETOOMANYREFS: (libc)Error Codes.
* ETXTBSY: (libc)Error Codes.
* EUCLEAN: (libc)Error Codes.
* EUNATCH: (libc)Error Codes.
* EUSERS: (libc)Error Codes.
* EWOULDBLOCK: (libc)Error Codes.
* EXDEV: (libc)Error Codes.
* EXFULL: (libc)Error Codes.
* EXIT_FAILURE: (libc)Exit Status.
* EXIT_SUCCESS: (libc)Exit Status.
* EXPR_NEST_MAX: (libc)Utility Limits.
* FD_CLOEXEC: (libc)Descriptor Flags.
* FD_CLR: (libc)Waiting for I/O.
* FD_ISSET: (libc)Waiting for I/O.
* FD_SET: (libc)Waiting for I/O.
* FD_SETSIZE: (libc)Waiting for I/O.
* FD_ZERO: (libc)Waiting for I/O.
* FILENAME_MAX: (libc)Limits for Files.
* FLUSHO: (libc)Local Modes.
* FOPEN_MAX: (libc)Opening Streams.
* FP_ILOGB0: (libc)Exponents and Logarithms.
* FP_ILOGBNAN: (libc)Exponents and Logarithms.
* F_DUPFD: (libc)Duplicating Descriptors.
* F_GETFD: (libc)Descriptor Flags.
* F_GETFL: (libc)Getting File Status Flags.
* F_GETLK: (libc)File Locks.
* F_GETOWN: (libc)Interrupt Input.
* F_OK: (libc)Testing File Access.
* F_SETFD: (libc)Descriptor Flags.
* F_SETFL: (libc)Getting File Status Flags.
* F_SETLK: (libc)File Locks.
* F_SETLKW: (libc)File Locks.
* F_SETOWN: (libc)Interrupt Input.
* HUGE_VAL: (libc)Math Error Reporting.
* HUGE_VALF: (libc)Math Error Reporting.
* HUGE_VALL: (libc)Math Error Reporting.
* HUPCL: (libc)Control Modes.
* I: (libc)Complex Numbers.
* ICANON: (libc)Local Modes.
* ICRNL: (libc)Input Modes.
* IEXTEN: (libc)Local Modes.
* IFNAMSIZ: (libc)Interface Naming.
* IFTODT: (libc)Directory Entries.
* IGNBRK: (libc)Input Modes.
* IGNCR: (libc)Input Modes.
* IGNPAR: (libc)Input Modes.
* IMAXBEL: (libc)Input Modes.
* INADDR_ANY: (libc)Host Address Data Type.
* INADDR_BROADCAST: (libc)Host Address Data Type.
* INADDR_LOOPBACK: (libc)Host Address Data Type.
* INADDR_NONE: (libc)Host Address Data Type.
* INFINITY: (libc)Infinity and NaN.
* INLCR: (libc)Input Modes.
* INPCK: (libc)Input Modes.
* IPPORT_RESERVED: (libc)Ports.
* IPPORT_USERRESERVED: (libc)Ports.
* ISIG: (libc)Local Modes.
* ISTRIP: (libc)Input Modes.
* IXANY: (libc)Input Modes.
* IXOFF: (libc)Input Modes.
* IXON: (libc)Input Modes.
* LINE_MAX: (libc)Utility Limits.
* LINK_MAX: (libc)Limits for Files.
* L_ctermid: (libc)Identifying the Terminal.
* L_cuserid: (libc)Who Logged In.
* L_tmpnam: (libc)Temporary Files.
* MAXNAMLEN: (libc)Limits for Files.
* MAXSYMLINKS: (libc)Symbolic Links.
* MAX_CANON: (libc)Limits for Files.
* MAX_INPUT: (libc)Limits for Files.
* MB_CUR_MAX: (libc)Selecting the Conversion.
* MB_LEN_MAX: (libc)Selecting the Conversion.
* MDMBUF: (libc)Control Modes.
* MSG_DONTROUTE: (libc)Socket Data Options.
* MSG_OOB: (libc)Socket Data Options.
* MSG_PEEK: (libc)Socket Data Options.
* NAME_MAX: (libc)Limits for Files.
* NAN: (libc)Infinity and NaN.
* NCCS: (libc)Mode Data Types.
* NGROUPS_MAX: (libc)General Limits.
* NOFLSH: (libc)Local Modes.
* NOKERNINFO: (libc)Local Modes.
* NSIG: (libc)Standard Signals.
* NULL: (libc)Null Pointer Constant.
* ONLCR: (libc)Output Modes.
* ONOEOT: (libc)Output Modes.
* OPEN_MAX: (libc)General Limits.
* OPOST: (libc)Output Modes.
* OXTABS: (libc)Output Modes.
* O_ACCMODE: (libc)Access Modes.
* O_APPEND: (libc)Operating Modes.
* O_ASYNC: (libc)Operating Modes.
* O_CREAT: (libc)Open-time Flags.
* O_EXCL: (libc)Open-time Flags.
* O_EXEC: (libc)Access Modes.
* O_EXLOCK: (libc)Open-time Flags.
* O_FSYNC: (libc)Operating Modes.
* O_IGNORE_CTTY: (libc)Open-time Flags.
* O_NDELAY: (libc)Operating Modes.
* O_NOATIME: (libc)Operating Modes.
* O_NOCTTY: (libc)Open-time Flags.
* O_NOLINK: (libc)Open-time Flags.
* O_NONBLOCK: (libc)Open-time Flags.
* O_NONBLOCK: (libc)Operating Modes.
* O_NOTRANS: (libc)Open-time Flags.
* O_RDONLY: (libc)Access Modes.
* O_RDWR: (libc)Access Modes.
* O_READ: (libc)Access Modes.
* O_SHLOCK: (libc)Open-time Flags.
* O_SYNC: (libc)Operating Modes.
* O_TRUNC: (libc)Open-time Flags.
* O_WRITE: (libc)Access Modes.
* O_WRONLY: (libc)Access Modes.
* PARENB: (libc)Control Modes.
* PARMRK: (libc)Input Modes.
* PARODD: (libc)Control Modes.
* PATH_MAX: (libc)Limits for Files.
* PA_FLAG_MASK: (libc)Parsing a Template String.
* PENDIN: (libc)Local Modes.
* PF_FILE: (libc)Local Namespace Details.
* PF_INET6: (libc)Internet Namespace.
* PF_INET: (libc)Internet Namespace.
* PF_LOCAL: (libc)Local Namespace Details.
* PF_UNIX: (libc)Local Namespace Details.
* PIPE_BUF: (libc)Limits for Files.
* P_tmpdir: (libc)Temporary Files.
* RAND_MAX: (libc)ISO Random.
* RE_DUP_MAX: (libc)General Limits.
* RLIM_INFINITY: (libc)Limits on Resources.
* R_OK: (libc)Testing File Access.
* SA_NOCLDSTOP: (libc)Flags for Sigaction.
* SA_ONSTACK: (libc)Flags for Sigaction.
* SA_RESTART: (libc)Flags for Sigaction.
* SEEK_CUR: (libc)File Positioning.
* SEEK_END: (libc)File Positioning.
* SEEK_SET: (libc)File Positioning.
* SIGABRT: (libc)Program Error Signals.
* SIGALRM: (libc)Alarm Signals.
* SIGBUS: (libc)Program Error Signals.
* SIGCHLD: (libc)Job Control Signals.
* SIGCLD: (libc)Job Control Signals.
* SIGCONT: (libc)Job Control Signals.
* SIGEMT: (libc)Program Error Signals.
* SIGFPE: (libc)Program Error Signals.
* SIGHUP: (libc)Termination Signals.
* SIGILL: (libc)Program Error Signals.
* SIGINFO: (libc)Miscellaneous Signals.
* SIGINT: (libc)Termination Signals.
* SIGIO: (libc)Asynchronous I/O Signals.
* SIGIOT: (libc)Program Error Signals.
* SIGKILL: (libc)Termination Signals.
* SIGLOST: (libc)Operation Error Signals.
* SIGPIPE: (libc)Operation Error Signals.
* SIGPOLL: (libc)Asynchronous I/O Signals.
* SIGPROF: (libc)Alarm Signals.
* SIGQUIT: (libc)Termination Signals.
* SIGSEGV: (libc)Program Error Signals.
* SIGSTOP: (libc)Job Control Signals.
* SIGSYS: (libc)Program Error Signals.
* SIGTERM: (libc)Termination Signals.
* SIGTRAP: (libc)Program Error Signals.
* SIGTSTP: (libc)Job Control Signals.
* SIGTTIN: (libc)Job Control Signals.
* SIGTTOU: (libc)Job Control Signals.
* SIGURG: (libc)Asynchronous I/O Signals.
* SIGUSR1: (libc)Miscellaneous Signals.
* SIGUSR2: (libc)Miscellaneous Signals.
* SIGVTALRM: (libc)Alarm Signals.
* SIGWINCH: (libc)Miscellaneous Signals.
* SIGXCPU: (libc)Operation Error Signals.
* SIGXFSZ: (libc)Operation Error Signals.
* SIG_ERR: (libc)Basic Signal Handling.
* SOCK_DGRAM: (libc)Communication Styles.
* SOCK_RAW: (libc)Communication Styles.
* SOCK_RDM: (libc)Communication Styles.
* SOCK_SEQPACKET: (libc)Communication Styles.
* SOCK_STREAM: (libc)Communication Styles.
* SOL_SOCKET: (libc)Socket-Level Options.
* SSIZE_MAX: (libc)General Limits.
* STREAM_MAX: (libc)General Limits.
* SUN_LEN: (libc)Local Namespace Details.
* SV_INTERRUPT: (libc)BSD Handler.
* SV_ONSTACK: (libc)BSD Handler.
* SV_RESETHAND: (libc)BSD Handler.
* S_IFMT: (libc)Testing File Type.
* S_ISBLK: (libc)Testing File Type.
* S_ISCHR: (libc)Testing File Type.
* S_ISDIR: (libc)Testing File Type.
* S_ISFIFO: (libc)Testing File Type.
* S_ISLNK: (libc)Testing File Type.
* S_ISREG: (libc)Testing File Type.
* S_ISSOCK: (libc)Testing File Type.
* S_TYPEISMQ: (libc)Testing File Type.
* S_TYPEISSEM: (libc)Testing File Type.
* S_TYPEISSHM: (libc)Testing File Type.
* TMP_MAX: (libc)Temporary Files.
* TOSTOP: (libc)Local Modes.
* TZNAME_MAX: (libc)General Limits.
* VDISCARD: (libc)Other Special.
* VDSUSP: (libc)Signal Characters.
* VEOF: (libc)Editing Characters.
* VEOL2: (libc)Editing Characters.
* VEOL: (libc)Editing Characters.
* VERASE: (libc)Editing Characters.
* VINTR: (libc)Signal Characters.
* VKILL: (libc)Editing Characters.
* VLNEXT: (libc)Other Special.
* VMIN: (libc)Noncanonical Input.
* VQUIT: (libc)Signal Characters.
* VREPRINT: (libc)Editing Characters.
* VSTART: (libc)Start/Stop Characters.
* VSTATUS: (libc)Other Special.
* VSTOP: (libc)Start/Stop Characters.
* VSUSP: (libc)Signal Characters.
* VTIME: (libc)Noncanonical Input.
* VWERASE: (libc)Editing Characters.
* WCHAR_MAX: (libc)Extended Char Intro.
* WCHAR_MIN: (libc)Extended Char Intro.
* WCOREDUMP: (libc)Process Completion Status.
* WEOF: (libc)EOF and Errors.
* WEOF: (libc)Extended Char Intro.
* WEXITSTATUS: (libc)Process Completion Status.
* WIFEXITED: (libc)Process Completion Status.
* WIFSIGNALED: (libc)Process Completion Status.
* WIFSTOPPED: (libc)Process Completion Status.
* WSTOPSIG: (libc)Process Completion Status.
* WTERMSIG: (libc)Process Completion Status.
* W_OK: (libc)Testing File Access.
* X_OK: (libc)Testing File Access.
* _Complex_I: (libc)Complex Numbers.
* _Exit: (libc)Termination Internals.
* _IOFBF: (libc)Controlling Buffering.
* _IOLBF: (libc)Controlling Buffering.
* _IONBF: (libc)Controlling Buffering.
* _Imaginary_I: (libc)Complex Numbers.
* _PATH_UTMP: (libc)Manipulating the Database.
* _PATH_WTMP: (libc)Manipulating the Database.
* _POSIX2_C_DEV: (libc)System Options.
* _POSIX2_C_VERSION: (libc)Version Supported.
* _POSIX2_FORT_DEV: (libc)System Options.
* _POSIX2_FORT_RUN: (libc)System Options.
* _POSIX2_LOCALEDEF: (libc)System Options.
* _POSIX2_SW_DEV: (libc)System Options.
* _POSIX_CHOWN_RESTRICTED: (libc)Options for Files.
* _POSIX_JOB_CONTROL: (libc)System Options.
* _POSIX_NO_TRUNC: (libc)Options for Files.
* _POSIX_SAVED_IDS: (libc)System Options.
* _POSIX_VDISABLE: (libc)Options for Files.
* _POSIX_VERSION: (libc)Version Supported.
* __fbufsize: (libc)Controlling Buffering.
* __flbf: (libc)Controlling Buffering.
* __fpending: (libc)Controlling Buffering.
* __fpurge: (libc)Flushing Buffers.
* __freadable: (libc)Opening Streams.
* __freading: (libc)Opening Streams.
* __fsetlocking: (libc)Streams and Threads.
* __fwritable: (libc)Opening Streams.
* __fwriting: (libc)Opening Streams.
* __gconv_end_fct: (libc)glibc iconv Implementation.
* __gconv_fct: (libc)glibc iconv Implementation.
* __gconv_init_fct: (libc)glibc iconv Implementation.
* __ppc_get_timebase: (libc)PowerPC.
* __ppc_get_timebase_freq: (libc)PowerPC.
* __ppc_mdoio: (libc)PowerPC.
* __ppc_mdoom: (libc)PowerPC.
* __ppc_set_ppr_low: (libc)PowerPC.
* __ppc_set_ppr_med: (libc)PowerPC.
* __ppc_set_ppr_med_low: (libc)PowerPC.
* __ppc_yield: (libc)PowerPC.
* __va_copy: (libc)Argument Macros.
* _exit: (libc)Termination Internals.
* _flushlbf: (libc)Flushing Buffers.
* _tolower: (libc)Case Conversion.
* _toupper: (libc)Case Conversion.
* a64l: (libc)Encode Binary Data.
* abort: (libc)Aborting a Program.
* abs: (libc)Absolute Value.
* accept: (libc)Accepting Connections.
* access: (libc)Testing File Access.
* acos: (libc)Inverse Trig Functions.
* acosf: (libc)Inverse Trig Functions.
* acosh: (libc)Hyperbolic Functions.
* acoshf: (libc)Hyperbolic Functions.
* acoshl: (libc)Hyperbolic Functions.
* acosl: (libc)Inverse Trig Functions.
* addmntent: (libc)mtab.
* addseverity: (libc)Adding Severity Classes.
* adjtime: (libc)High-Resolution Calendar.
* adjtimex: (libc)High-Resolution Calendar.
* aio_cancel64: (libc)Cancel AIO Operations.
* aio_cancel: (libc)Cancel AIO Operations.
* aio_error64: (libc)Status of AIO Operations.
* aio_error: (libc)Status of AIO Operations.
* aio_fsync64: (libc)Synchronizing AIO Operations.
* aio_fsync: (libc)Synchronizing AIO Operations.
* aio_init: (libc)Configuration of AIO.
* aio_read64: (libc)Asynchronous Reads/Writes.
* aio_read: (libc)Asynchronous Reads/Writes.
* aio_return64: (libc)Status of AIO Operations.
* aio_return: (libc)Status of AIO Operations.
* aio_suspend64: (libc)Synchronizing AIO Operations.
* aio_suspend: (libc)Synchronizing AIO Operations.
* aio_write64: (libc)Asynchronous Reads/Writes.
* aio_write: (libc)Asynchronous Reads/Writes.
* alarm: (libc)Setting an Alarm.
* alloca: (libc)Variable Size Automatic.
* alphasort64: (libc)Scanning Directory Content.
* alphasort: (libc)Scanning Directory Content.
* argp_error: (libc)Argp Helper Functions.
* argp_failure: (libc)Argp Helper Functions.
* argp_help: (libc)Argp Help.
* argp_parse: (libc)Argp.
* argp_state_help: (libc)Argp Helper Functions.
* argp_usage: (libc)Argp Helper Functions.
* argz_add: (libc)Argz Functions.
* argz_add_sep: (libc)Argz Functions.
* argz_append: (libc)Argz Functions.
* argz_count: (libc)Argz Functions.
* argz_create: (libc)Argz Functions.
* argz_create_sep: (libc)Argz Functions.
* argz_delete: (libc)Argz Functions.
* argz_extract: (libc)Argz Functions.
* argz_insert: (libc)Argz Functions.
* argz_next: (libc)Argz Functions.
* argz_replace: (libc)Argz Functions.
* argz_stringify: (libc)Argz Functions.
* asctime: (libc)Formatting Calendar Time.
* asctime_r: (libc)Formatting Calendar Time.
* asin: (libc)Inverse Trig Functions.
* asinf: (libc)Inverse Trig Functions.
* asinh: (libc)Hyperbolic Functions.
* asinhf: (libc)Hyperbolic Functions.
* asinhl: (libc)Hyperbolic Functions.
* asinl: (libc)Inverse Trig Functions.
* asprintf: (libc)Dynamic Output.
* assert: (libc)Consistency Checking.
* assert_perror: (libc)Consistency Checking.
* atan2: (libc)Inverse Trig Functions.
* atan2f: (libc)Inverse Trig Functions.
* atan2l: (libc)Inverse Trig Functions.
* atan: (libc)Inverse Trig Functions.
* atanf: (libc)Inverse Trig Functions.
* atanh: (libc)Hyperbolic Functions.
* atanhf: (libc)Hyperbolic Functions.
* atanhl: (libc)Hyperbolic Functions.
* atanl: (libc)Inverse Trig Functions.
* atexit: (libc)Cleanups on Exit.
* atof: (libc)Parsing of Floats.
* atoi: (libc)Parsing of Integers.
* atol: (libc)Parsing of Integers.
* atoll: (libc)Parsing of Integers.
* backtrace: (libc)Backtraces.
* backtrace_symbols: (libc)Backtraces.
* backtrace_symbols_fd: (libc)Backtraces.
* basename: (libc)Finding Tokens in a String.
* basename: (libc)Finding Tokens in a String.
* bcmp: (libc)String/Array Comparison.
* bcopy: (libc)Copying and Concatenation.
* bind: (libc)Setting Address.
* bind_textdomain_codeset: (libc)Charset conversion in gettext.
* bindtextdomain: (libc)Locating gettext catalog.
* brk: (libc)Resizing the Data Segment.
* bsearch: (libc)Array Search Function.
* btowc: (libc)Converting a Character.
* bzero: (libc)Copying and Concatenation.
* cabs: (libc)Absolute Value.
* cabsf: (libc)Absolute Value.
* cabsl: (libc)Absolute Value.
* cacos: (libc)Inverse Trig Functions.
* cacosf: (libc)Inverse Trig Functions.
* cacosh: (libc)Hyperbolic Functions.
* cacoshf: (libc)Hyperbolic Functions.
* cacoshl: (libc)Hyperbolic Functions.
* cacosl: (libc)Inverse Trig Functions.
* calloc: (libc)Allocating Cleared Space.
* canonicalize_file_name: (libc)Symbolic Links.
* carg: (libc)Operations on Complex.
* cargf: (libc)Operations on Complex.
* cargl: (libc)Operations on Complex.
* casin: (libc)Inverse Trig Functions.
* casinf: (libc)Inverse Trig Functions.
* casinh: (libc)Hyperbolic Functions.
* casinhf: (libc)Hyperbolic Functions.
* casinhl: (libc)Hyperbolic Functions.
* casinl: (libc)Inverse Trig Functions.
* catan: (libc)Inverse Trig Functions.
* catanf: (libc)Inverse Trig Functions.
* catanh: (libc)Hyperbolic Functions.
* catanhf: (libc)Hyperbolic Functions.
* catanhl: (libc)Hyperbolic Functions.
* catanl: (libc)Inverse Trig Functions.
* catclose: (libc)The catgets Functions.
* catgets: (libc)The catgets Functions.
* catopen: (libc)The catgets Functions.
* cbc_crypt: (libc)DES Encryption.
* cbrt: (libc)Exponents and Logarithms.
* cbrtf: (libc)Exponents and Logarithms.
* cbrtl: (libc)Exponents and Logarithms.
* ccos: (libc)Trig Functions.
* ccosf: (libc)Trig Functions.
* ccosh: (libc)Hyperbolic Functions.
* ccoshf: (libc)Hyperbolic Functions.
* ccoshl: (libc)Hyperbolic Functions.
* ccosl: (libc)Trig Functions.
* ceil: (libc)Rounding Functions.
* ceilf: (libc)Rounding Functions.
* ceill: (libc)Rounding Functions.
* cexp: (libc)Exponents and Logarithms.
* cexpf: (libc)Exponents and Logarithms.
* cexpl: (libc)Exponents and Logarithms.
* cfgetispeed: (libc)Line Speed.
* cfgetospeed: (libc)Line Speed.
* cfmakeraw: (libc)Noncanonical Input.
* cfree: (libc)Freeing after Malloc.
* cfsetispeed: (libc)Line Speed.
* cfsetospeed: (libc)Line Speed.
* cfsetspeed: (libc)Line Speed.
* chdir: (libc)Working Directory.
* chmod: (libc)Setting Permissions.
* chown: (libc)File Owner.
* cimag: (libc)Operations on Complex.
* cimagf: (libc)Operations on Complex.
* cimagl: (libc)Operations on Complex.
* clearenv: (libc)Environment Access.
* clearerr: (libc)Error Recovery.
* clearerr_unlocked: (libc)Error Recovery.
* clock: (libc)CPU Time.
* clog10: (libc)Exponents and Logarithms.
* clog10f: (libc)Exponents and Logarithms.
* clog10l: (libc)Exponents and Logarithms.
* clog: (libc)Exponents and Logarithms.
* clogf: (libc)Exponents and Logarithms.
* clogl: (libc)Exponents and Logarithms.
* close: (libc)Opening and Closing Files.
* closedir: (libc)Reading/Closing Directory.
* closelog: (libc)closelog.
* confstr: (libc)String Parameters.
* conj: (libc)Operations on Complex.
* conjf: (libc)Operations on Complex.
* conjl: (libc)Operations on Complex.
* connect: (libc)Connecting.
* copysign: (libc)FP Bit Twiddling.
* copysignf: (libc)FP Bit Twiddling.
* copysignl: (libc)FP Bit Twiddling.
* cos: (libc)Trig Functions.
* cosf: (libc)Trig Functions.
* cosh: (libc)Hyperbolic Functions.
* coshf: (libc)Hyperbolic Functions.
* coshl: (libc)Hyperbolic Functions.
* cosl: (libc)Trig Functions.
* cpow: (libc)Exponents and Logarithms.
* cpowf: (libc)Exponents and Logarithms.
* cpowl: (libc)Exponents and Logarithms.
* cproj: (libc)Operations on Complex.
* cprojf: (libc)Operations on Complex.
* cprojl: (libc)Operations on Complex.
* creal: (libc)Operations on Complex.
* crealf: (libc)Operations on Complex.
* creall: (libc)Operations on Complex.
* creat64: (libc)Opening and Closing Files.
* creat: (libc)Opening and Closing Files.
* crypt: (libc)crypt.
* crypt_r: (libc)crypt.
* csin: (libc)Trig Functions.
* csinf: (libc)Trig Functions.
* csinh: (libc)Hyperbolic Functions.
* csinhf: (libc)Hyperbolic Functions.
* csinhl: (libc)Hyperbolic Functions.
* csinl: (libc)Trig Functions.
* csqrt: (libc)Exponents and Logarithms.
* csqrtf: (libc)Exponents and Logarithms.
* csqrtl: (libc)Exponents and Logarithms.
* ctan: (libc)Trig Functions.
* ctanf: (libc)Trig Functions.
* ctanh: (libc)Hyperbolic Functions.
* ctanhf: (libc)Hyperbolic Functions.
* ctanhl: (libc)Hyperbolic Functions.
* ctanl: (libc)Trig Functions.
* ctermid: (libc)Identifying the Terminal.
* ctime: (libc)Formatting Calendar Time.
* ctime_r: (libc)Formatting Calendar Time.
* cuserid: (libc)Who Logged In.
* dcgettext: (libc)Translation with gettext.
* dcngettext: (libc)Advanced gettext functions.
* des_setparity: (libc)DES Encryption.
* dgettext: (libc)Translation with gettext.
* difftime: (libc)Elapsed Time.
* dirfd: (libc)Opening a Directory.
* dirname: (libc)Finding Tokens in a String.
* div: (libc)Integer Division.
* dngettext: (libc)Advanced gettext functions.
* drand48: (libc)SVID Random.
* drand48_r: (libc)SVID Random.
* drem: (libc)Remainder Functions.
* dremf: (libc)Remainder Functions.
* dreml: (libc)Remainder Functions.
* dup2: (libc)Duplicating Descriptors.
* dup: (libc)Duplicating Descriptors.
* ecb_crypt: (libc)DES Encryption.
* ecvt: (libc)System V Number Conversion.
* ecvt_r: (libc)System V Number Conversion.
* encrypt: (libc)DES Encryption.
* encrypt_r: (libc)DES Encryption.
* endfsent: (libc)fstab.
* endgrent: (libc)Scanning All Groups.
* endhostent: (libc)Host Names.
* endmntent: (libc)mtab.
* endnetent: (libc)Networks Database.
* endnetgrent: (libc)Lookup Netgroup.
* endprotoent: (libc)Protocols Database.
* endpwent: (libc)Scanning All Users.
* endservent: (libc)Services Database.
* endutent: (libc)Manipulating the Database.
* endutxent: (libc)XPG Functions.
* envz_add: (libc)Envz Functions.
* envz_entry: (libc)Envz Functions.
* envz_get: (libc)Envz Functions.
* envz_merge: (libc)Envz Functions.
* envz_strip: (libc)Envz Functions.
* erand48: (libc)SVID Random.
* erand48_r: (libc)SVID Random.
* erf: (libc)Special Functions.
* erfc: (libc)Special Functions.
* erfcf: (libc)Special Functions.
* erfcl: (libc)Special Functions.
* erff: (libc)Special Functions.
* erfl: (libc)Special Functions.
* err: (libc)Error Messages.
* errno: (libc)Checking for Errors.
* error: (libc)Error Messages.
* error_at_line: (libc)Error Messages.
* errx: (libc)Error Messages.
* execl: (libc)Executing a File.
* execle: (libc)Executing a File.
* execlp: (libc)Executing a File.
* execv: (libc)Executing a File.
* execve: (libc)Executing a File.
* execvp: (libc)Executing a File.
* exit: (libc)Normal Termination.
* exp10: (libc)Exponents and Logarithms.
* exp10f: (libc)Exponents and Logarithms.
* exp10l: (libc)Exponents and Logarithms.
* exp2: (libc)Exponents and Logarithms.
* exp2f: (libc)Exponents and Logarithms.
* exp2l: (libc)Exponents and Logarithms.
* exp: (libc)Exponents and Logarithms.
* expf: (libc)Exponents and Logarithms.
* expl: (libc)Exponents and Logarithms.
* expm1: (libc)Exponents and Logarithms.
* expm1f: (libc)Exponents and Logarithms.
* expm1l: (libc)Exponents and Logarithms.
* fabs: (libc)Absolute Value.
* fabsf: (libc)Absolute Value.
* fabsl: (libc)Absolute Value.
* fchdir: (libc)Working Directory.
* fchmod: (libc)Setting Permissions.
* fchown: (libc)File Owner.
* fclose: (libc)Closing Streams.
* fcloseall: (libc)Closing Streams.
* fcntl: (libc)Control Operations.
* fcvt: (libc)System V Number Conversion.
* fcvt_r: (libc)System V Number Conversion.
* fdatasync: (libc)Synchronizing I/O.
* fdim: (libc)Misc FP Arithmetic.
* fdimf: (libc)Misc FP Arithmetic.
* fdiml: (libc)Misc FP Arithmetic.
* fdopen: (libc)Descriptors and Streams.
* fdopendir: (libc)Opening a Directory.
* feclearexcept: (libc)Status bit operations.
* fedisableexcept: (libc)Control Functions.
* feenableexcept: (libc)Control Functions.
* fegetenv: (libc)Control Functions.
* fegetexcept: (libc)Control Functions.
* fegetexceptflag: (libc)Status bit operations.
* fegetround: (libc)Rounding.
* feholdexcept: (libc)Control Functions.
* feof: (libc)EOF and Errors.
* feof_unlocked: (libc)EOF and Errors.
* feraiseexcept: (libc)Status bit operations.
* ferror: (libc)EOF and Errors.
* ferror_unlocked: (libc)EOF and Errors.
* fesetenv: (libc)Control Functions.
* fesetexceptflag: (libc)Status bit operations.
* fesetround: (libc)Rounding.
* fetestexcept: (libc)Status bit operations.
* feupdateenv: (libc)Control Functions.
* fflush: (libc)Flushing Buffers.
* fflush_unlocked: (libc)Flushing Buffers.
* fgetc: (libc)Character Input.
* fgetc_unlocked: (libc)Character Input.
* fgetgrent: (libc)Scanning All Groups.
* fgetgrent_r: (libc)Scanning All Groups.
* fgetpos64: (libc)Portable Positioning.
* fgetpos: (libc)Portable Positioning.
* fgetpwent: (libc)Scanning All Users.
* fgetpwent_r: (libc)Scanning All Users.
* fgets: (libc)Line Input.
* fgets_unlocked: (libc)Line Input.
* fgetwc: (libc)Character Input.
* fgetwc_unlocked: (libc)Character Input.
* fgetws: (libc)Line Input.
* fgetws_unlocked: (libc)Line Input.
* fileno: (libc)Descriptors and Streams.
* fileno_unlocked: (libc)Descriptors and Streams.
* finite: (libc)Floating Point Classes.
* finitef: (libc)Floating Point Classes.
* finitel: (libc)Floating Point Classes.
* flockfile: (libc)Streams and Threads.
* floor: (libc)Rounding Functions.
* floorf: (libc)Rounding Functions.
* floorl: (libc)Rounding Functions.
* fma: (libc)Misc FP Arithmetic.
* fmaf: (libc)Misc FP Arithmetic.
* fmal: (libc)Misc FP Arithmetic.
* fmax: (libc)Misc FP Arithmetic.
* fmaxf: (libc)Misc FP Arithmetic.
* fmaxl: (libc)Misc FP Arithmetic.
* fmemopen: (libc)String Streams.
* fmin: (libc)Misc FP Arithmetic.
* fminf: (libc)Misc FP Arithmetic.
* fminl: (libc)Misc FP Arithmetic.
* fmod: (libc)Remainder Functions.
* fmodf: (libc)Remainder Functions.
* fmodl: (libc)Remainder Functions.
* fmtmsg: (libc)Printing Formatted Messages.
* fnmatch: (libc)Wildcard Matching.
* fopen64: (libc)Opening Streams.
* fopen: (libc)Opening Streams.
* fopencookie: (libc)Streams and Cookies.
* fork: (libc)Creating a Process.
* forkpty: (libc)Pseudo-Terminal Pairs.
* fpathconf: (libc)Pathconf.
* fpclassify: (libc)Floating Point Classes.
* fprintf: (libc)Formatted Output Functions.
* fputc: (libc)Simple Output.
* fputc_unlocked: (libc)Simple Output.
* fputs: (libc)Simple Output.
* fputs_unlocked: (libc)Simple Output.
* fputwc: (libc)Simple Output.
* fputwc_unlocked: (libc)Simple Output.
* fputws: (libc)Simple Output.
* fputws_unlocked: (libc)Simple Output.
* fread: (libc)Block Input/Output.
* fread_unlocked: (libc)Block Input/Output.
* free: (libc)Freeing after Malloc.
* freopen64: (libc)Opening Streams.
* freopen: (libc)Opening Streams.
* frexp: (libc)Normalization Functions.
* frexpf: (libc)Normalization Functions.
* frexpl: (libc)Normalization Functions.
* fscanf: (libc)Formatted Input Functions.
* fseek: (libc)File Positioning.
* fseeko64: (libc)File Positioning.
* fseeko: (libc)File Positioning.
* fsetpos64: (libc)Portable Positioning.
* fsetpos: (libc)Portable Positioning.
* fstat64: (libc)Reading Attributes.
* fstat: (libc)Reading Attributes.
* fsync: (libc)Synchronizing I/O.
* ftell: (libc)File Positioning.
* ftello64: (libc)File Positioning.
* ftello: (libc)File Positioning.
* ftruncate64: (libc)File Size.
* ftruncate: (libc)File Size.
* ftrylockfile: (libc)Streams and Threads.
* ftw64: (libc)Working with Directory Trees.
* ftw: (libc)Working with Directory Trees.
* funlockfile: (libc)Streams and Threads.
* futimes: (libc)File Times.
* fwide: (libc)Streams and I18N.
* fwprintf: (libc)Formatted Output Functions.
* fwrite: (libc)Block Input/Output.
* fwrite_unlocked: (libc)Block Input/Output.
* fwscanf: (libc)Formatted Input Functions.
* gamma: (libc)Special Functions.
* gammaf: (libc)Special Functions.
* gammal: (libc)Special Functions.
* gcvt: (libc)System V Number Conversion.
* get_avphys_pages: (libc)Query Memory Parameters.
* get_current_dir_name: (libc)Working Directory.
* get_nprocs: (libc)Processor Resources.
* get_nprocs_conf: (libc)Processor Resources.
* get_phys_pages: (libc)Query Memory Parameters.
* getauxval: (libc)Auxiliary Vector.
* getc: (libc)Character Input.
* getc_unlocked: (libc)Character Input.
* getchar: (libc)Character Input.
* getchar_unlocked: (libc)Character Input.
* getcontext: (libc)System V contexts.
* getcwd: (libc)Working Directory.
* getdate: (libc)General Time String Parsing.
* getdate_r: (libc)General Time String Parsing.
* getdelim: (libc)Line Input.
* getdomainnname: (libc)Host Identification.
* getegid: (libc)Reading Persona.
* getenv: (libc)Environment Access.
* geteuid: (libc)Reading Persona.
* getfsent: (libc)fstab.
* getfsfile: (libc)fstab.
* getfsspec: (libc)fstab.
* getgid: (libc)Reading Persona.
* getgrent: (libc)Scanning All Groups.
* getgrent_r: (libc)Scanning All Groups.
* getgrgid: (libc)Lookup Group.
* getgrgid_r: (libc)Lookup Group.
* getgrnam: (libc)Lookup Group.
* getgrnam_r: (libc)Lookup Group.
* getgrouplist: (libc)Setting Groups.
* getgroups: (libc)Reading Persona.
* gethostbyaddr: (libc)Host Names.
* gethostbyaddr_r: (libc)Host Names.
* gethostbyname2: (libc)Host Names.
* gethostbyname2_r: (libc)Host Names.
* gethostbyname: (libc)Host Names.
* gethostbyname_r: (libc)Host Names.
* gethostent: (libc)Host Names.
* gethostid: (libc)Host Identification.
* gethostname: (libc)Host Identification.
* getitimer: (libc)Setting an Alarm.
* getline: (libc)Line Input.
* getloadavg: (libc)Processor Resources.
* getlogin: (libc)Who Logged In.
* getmntent: (libc)mtab.
* getmntent_r: (libc)mtab.
* getnetbyaddr: (libc)Networks Database.
* getnetbyname: (libc)Networks Database.
* getnetent: (libc)Networks Database.
* getnetgrent: (libc)Lookup Netgroup.
* getnetgrent_r: (libc)Lookup Netgroup.
* getopt: (libc)Using Getopt.
* getopt_long: (libc)Getopt Long Options.
* getopt_long_only: (libc)Getopt Long Options.
* getpagesize: (libc)Query Memory Parameters.
* getpass: (libc)getpass.
* getpeername: (libc)Who is Connected.
* getpgid: (libc)Process Group Functions.
* getpgrp: (libc)Process Group Functions.
* getpgrp: (libc)Process Group Functions.
* getpid: (libc)Process Identification.
* getppid: (libc)Process Identification.
* getpriority: (libc)Traditional Scheduling Functions.
* getprotobyname: (libc)Protocols Database.
* getprotobynumber: (libc)Protocols Database.
* getprotoent: (libc)Protocols Database.
* getpt: (libc)Allocation.
* getpwent: (libc)Scanning All Users.
* getpwent_r: (libc)Scanning All Users.
* getpwnam: (libc)Lookup User.
* getpwnam_r: (libc)Lookup User.
* getpwuid: (libc)Lookup User.
* getpwuid_r: (libc)Lookup User.
* getrlimit64: (libc)Limits on Resources.
* getrlimit: (libc)Limits on Resources.
* getrusage: (libc)Resource Usage.
* gets: (libc)Line Input.
* getservbyname: (libc)Services Database.
* getservbyport: (libc)Services Database.
* getservent: (libc)Services Database.
* getsid: (libc)Process Group Functions.
* getsockname: (libc)Reading Address.
* getsockopt: (libc)Socket Option Functions.
* getsubopt: (libc)Suboptions.
* gettext: (libc)Translation with gettext.
* gettimeofday: (libc)High-Resolution Calendar.
* getuid: (libc)Reading Persona.
* getumask: (libc)Setting Permissions.
* getutent: (libc)Manipulating the Database.
* getutent_r: (libc)Manipulating the Database.
* getutid: (libc)Manipulating the Database.
* getutid_r: (libc)Manipulating the Database.
* getutline: (libc)Manipulating the Database.
* getutline_r: (libc)Manipulating the Database.
* getutmp: (libc)XPG Functions.
* getutmpx: (libc)XPG Functions.
* getutxent: (libc)XPG Functions.
* getutxid: (libc)XPG Functions.
* getutxline: (libc)XPG Functions.
* getw: (libc)Character Input.
* getwc: (libc)Character Input.
* getwc_unlocked: (libc)Character Input.
* getwchar: (libc)Character Input.
* getwchar_unlocked: (libc)Character Input.
* getwd: (libc)Working Directory.
* glob64: (libc)Calling Glob.
* glob: (libc)Calling Glob.
* globfree64: (libc)More Flags for Globbing.
* globfree: (libc)More Flags for Globbing.
* gmtime: (libc)Broken-down Time.
* gmtime_r: (libc)Broken-down Time.
* grantpt: (libc)Allocation.
* gsignal: (libc)Signaling Yourself.
* gtty: (libc)BSD Terminal Modes.
* hasmntopt: (libc)mtab.
* hcreate: (libc)Hash Search Function.
* hcreate_r: (libc)Hash Search Function.
* hdestroy: (libc)Hash Search Function.
* hdestroy_r: (libc)Hash Search Function.
* hsearch: (libc)Hash Search Function.
* hsearch_r: (libc)Hash Search Function.
* htonl: (libc)Byte Order.
* htons: (libc)Byte Order.
* hypot: (libc)Exponents and Logarithms.
* hypotf: (libc)Exponents and Logarithms.
* hypotl: (libc)Exponents and Logarithms.
* iconv: (libc)Generic Conversion Interface.
* iconv_close: (libc)Generic Conversion Interface.
* iconv_open: (libc)Generic Conversion Interface.
* if_freenameindex: (libc)Interface Naming.
* if_indextoname: (libc)Interface Naming.
* if_nameindex: (libc)Interface Naming.
* if_nametoindex: (libc)Interface Naming.
* ilogb: (libc)Exponents and Logarithms.
* ilogbf: (libc)Exponents and Logarithms.
* ilogbl: (libc)Exponents and Logarithms.
* imaxabs: (libc)Absolute Value.
* imaxdiv: (libc)Integer Division.
* in6addr_any: (libc)Host Address Data Type.
* in6addr_loopback: (libc)Host Address Data Type.
* index: (libc)Search Functions.
* inet_addr: (libc)Host Address Functions.
* inet_aton: (libc)Host Address Functions.
* inet_lnaof: (libc)Host Address Functions.
* inet_makeaddr: (libc)Host Address Functions.
* inet_netof: (libc)Host Address Functions.
* inet_network: (libc)Host Address Functions.
* inet_ntoa: (libc)Host Address Functions.
* inet_ntop: (libc)Host Address Functions.
* inet_pton: (libc)Host Address Functions.
* initgroups: (libc)Setting Groups.
* initstate: (libc)BSD Random.
* initstate_r: (libc)BSD Random.
* innetgr: (libc)Netgroup Membership.
* ioctl: (libc)IOCTLs.
* isalnum: (libc)Classification of Characters.
* isalpha: (libc)Classification of Characters.
* isascii: (libc)Classification of Characters.
* isatty: (libc)Is It a Terminal.
* isblank: (libc)Classification of Characters.
* iscntrl: (libc)Classification of Characters.
* isdigit: (libc)Classification of Characters.
* isfinite: (libc)Floating Point Classes.
* isgraph: (libc)Classification of Characters.
* isgreater: (libc)FP Comparison Functions.
* isgreaterequal: (libc)FP Comparison Functions.
* isinf: (libc)Floating Point Classes.
* isinff: (libc)Floating Point Classes.
* isinfl: (libc)Floating Point Classes.
* isless: (libc)FP Comparison Functions.
* islessequal: (libc)FP Comparison Functions.
* islessgreater: (libc)FP Comparison Functions.
* islower: (libc)Classification of Characters.
* isnan: (libc)Floating Point Classes.
* isnan: (libc)Floating Point Classes.
* isnanf: (libc)Floating Point Classes.
* isnanl: (libc)Floating Point Classes.
* isnormal: (libc)Floating Point Classes.
* isprint: (libc)Classification of Characters.
* ispunct: (libc)Classification of Characters.
* issignaling: (libc)Floating Point Classes.
* isspace: (libc)Classification of Characters.
* isunordered: (libc)FP Comparison Functions.
* isupper: (libc)Classification of Characters.
* iswalnum: (libc)Classification of Wide Characters.
* iswalpha: (libc)Classification of Wide Characters.
* iswblank: (libc)Classification of Wide Characters.
* iswcntrl: (libc)Classification of Wide Characters.
* iswctype: (libc)Classification of Wide Characters.
* iswdigit: (libc)Classification of Wide Characters.
* iswgraph: (libc)Classification of Wide Characters.
* iswlower: (libc)Classification of Wide Characters.
* iswprint: (libc)Classification of Wide Characters.
* iswpunct: (libc)Classification of Wide Characters.
* iswspace: (libc)Classification of Wide Characters.
* iswupper: (libc)Classification of Wide Characters.
* iswxdigit: (libc)Classification of Wide Characters.
* isxdigit: (libc)Classification of Characters.
* j0: (libc)Special Functions.
* j0f: (libc)Special Functions.
* j0l: (libc)Special Functions.
* j1: (libc)Special Functions.
* j1f: (libc)Special Functions.
* j1l: (libc)Special Functions.
* jn: (libc)Special Functions.
* jnf: (libc)Special Functions.
* jnl: (libc)Special Functions.
* jrand48: (libc)SVID Random.
* jrand48_r: (libc)SVID Random.
* kill: (libc)Signaling Another Process.
* killpg: (libc)Signaling Another Process.
* l64a: (libc)Encode Binary Data.
* labs: (libc)Absolute Value.
* lcong48: (libc)SVID Random.
* lcong48_r: (libc)SVID Random.
* ldexp: (libc)Normalization Functions.
* ldexpf: (libc)Normalization Functions.
* ldexpl: (libc)Normalization Functions.
* ldiv: (libc)Integer Division.
* lfind: (libc)Array Search Function.
* lgamma: (libc)Special Functions.
* lgamma_r: (libc)Special Functions.
* lgammaf: (libc)Special Functions.
* lgammaf_r: (libc)Special Functions.
* lgammal: (libc)Special Functions.
* lgammal_r: (libc)Special Functions.
* link: (libc)Hard Links.
* lio_listio64: (libc)Asynchronous Reads/Writes.
* lio_listio: (libc)Asynchronous Reads/Writes.
* listen: (libc)Listening.
* llabs: (libc)Absolute Value.
* lldiv: (libc)Integer Division.
* llrint: (libc)Rounding Functions.
* llrintf: (libc)Rounding Functions.
* llrintl: (libc)Rounding Functions.
* llround: (libc)Rounding Functions.
* llroundf: (libc)Rounding Functions.
* llroundl: (libc)Rounding Functions.
* localeconv: (libc)The Lame Way to Locale Data.
* localtime: (libc)Broken-down Time.
* localtime_r: (libc)Broken-down Time.
* log10: (libc)Exponents and Logarithms.
* log10f: (libc)Exponents and Logarithms.
* log10l: (libc)Exponents and Logarithms.
* log1p: (libc)Exponents and Logarithms.
* log1pf: (libc)Exponents and Logarithms.
* log1pl: (libc)Exponents and Logarithms.
* log2: (libc)Exponents and Logarithms.
* log2f: (libc)Exponents and Logarithms.
* log2l: (libc)Exponents and Logarithms.
* log: (libc)Exponents and Logarithms.
* logb: (libc)Exponents and Logarithms.
* logbf: (libc)Exponents and Logarithms.
* logbl: (libc)Exponents and Logarithms.
* logf: (libc)Exponents and Logarithms.
* login: (libc)Logging In and Out.
* login_tty: (libc)Logging In and Out.
* logl: (libc)Exponents and Logarithms.
* logout: (libc)Logging In and Out.
* logwtmp: (libc)Logging In and Out.
* longjmp: (libc)Non-Local Details.
* lrand48: (libc)SVID Random.
* lrand48_r: (libc)SVID Random.
* lrint: (libc)Rounding Functions.
* lrintf: (libc)Rounding Functions.
* lrintl: (libc)Rounding Functions.
* lround: (libc)Rounding Functions.
* lroundf: (libc)Rounding Functions.
* lroundl: (libc)Rounding Functions.
* lsearch: (libc)Array Search Function.
* lseek64: (libc)File Position Primitive.
* lseek: (libc)File Position Primitive.
* lstat64: (libc)Reading Attributes.
* lstat: (libc)Reading Attributes.
* lutimes: (libc)File Times.
* madvise: (libc)Memory-mapped I/O.
* makecontext: (libc)System V contexts.
* mallinfo: (libc)Statistics of Malloc.
* malloc: (libc)Basic Allocation.
* mallopt: (libc)Malloc Tunable Parameters.
* mblen: (libc)Non-reentrant Character Conversion.
* mbrlen: (libc)Converting a Character.
* mbrtowc: (libc)Converting a Character.
* mbsinit: (libc)Keeping the state.
* mbsnrtowcs: (libc)Converting Strings.
* mbsrtowcs: (libc)Converting Strings.
* mbstowcs: (libc)Non-reentrant String Conversion.
* mbtowc: (libc)Non-reentrant Character Conversion.
* mcheck: (libc)Heap Consistency Checking.
* memalign: (libc)Aligned Memory Blocks.
* memccpy: (libc)Copying and Concatenation.
* memchr: (libc)Search Functions.
* memcmp: (libc)String/Array Comparison.
* memcpy: (libc)Copying and Concatenation.
* memfrob: (libc)Trivial Encryption.
* memmem: (libc)Search Functions.
* memmove: (libc)Copying and Concatenation.
* mempcpy: (libc)Copying and Concatenation.
* memrchr: (libc)Search Functions.
* memset: (libc)Copying and Concatenation.
* mkdir: (libc)Creating Directories.
* mkdtemp: (libc)Temporary Files.
* mkfifo: (libc)FIFO Special Files.
* mknod: (libc)Making Special Files.
* mkstemp: (libc)Temporary Files.
* mktemp: (libc)Temporary Files.
* mktime: (libc)Broken-down Time.
* mlock: (libc)Page Lock Functions.
* mlockall: (libc)Page Lock Functions.
* mmap64: (libc)Memory-mapped I/O.
* mmap: (libc)Memory-mapped I/O.
* modf: (libc)Rounding Functions.
* modff: (libc)Rounding Functions.
* modfl: (libc)Rounding Functions.
* mount: (libc)Mount-Unmount-Remount.
* mprobe: (libc)Heap Consistency Checking.
* mrand48: (libc)SVID Random.
* mrand48_r: (libc)SVID Random.
* mremap: (libc)Memory-mapped I/O.
* msync: (libc)Memory-mapped I/O.
* mtrace: (libc)Tracing malloc.
* munlock: (libc)Page Lock Functions.
* munlockall: (libc)Page Lock Functions.
* munmap: (libc)Memory-mapped I/O.
* muntrace: (libc)Tracing malloc.
* nan: (libc)FP Bit Twiddling.
* nanf: (libc)FP Bit Twiddling.
* nanl: (libc)FP Bit Twiddling.
* nanosleep: (libc)Sleeping.
* nearbyint: (libc)Rounding Functions.
* nearbyintf: (libc)Rounding Functions.
* nearbyintl: (libc)Rounding Functions.
* nextafter: (libc)FP Bit Twiddling.
* nextafterf: (libc)FP Bit Twiddling.
* nextafterl: (libc)FP Bit Twiddling.
* nexttoward: (libc)FP Bit Twiddling.
* nexttowardf: (libc)FP Bit Twiddling.
* nexttowardl: (libc)FP Bit Twiddling.
* nftw64: (libc)Working with Directory Trees.
* nftw: (libc)Working with Directory Trees.
* ngettext: (libc)Advanced gettext functions.
* nice: (libc)Traditional Scheduling Functions.
* nl_langinfo: (libc)The Elegant and Fast Way.
* nrand48: (libc)SVID Random.
* nrand48_r: (libc)SVID Random.
* ntohl: (libc)Byte Order.
* ntohs: (libc)Byte Order.
* ntp_adjtime: (libc)High Accuracy Clock.
* ntp_gettime: (libc)High Accuracy Clock.
* obstack_1grow: (libc)Growing Objects.
* obstack_1grow_fast: (libc)Extra Fast Growing.
* obstack_alignment_mask: (libc)Obstacks Data Alignment.
* obstack_alloc: (libc)Allocation in an Obstack.
* obstack_base: (libc)Status of an Obstack.
* obstack_blank: (libc)Growing Objects.
* obstack_blank_fast: (libc)Extra Fast Growing.
* obstack_chunk_size: (libc)Obstack Chunks.
* obstack_copy0: (libc)Allocation in an Obstack.
* obstack_copy: (libc)Allocation in an Obstack.
* obstack_finish: (libc)Growing Objects.
* obstack_free: (libc)Freeing Obstack Objects.
* obstack_grow0: (libc)Growing Objects.
* obstack_grow: (libc)Growing Objects.
* obstack_init: (libc)Preparing for Obstacks.
* obstack_int_grow: (libc)Growing Objects.
* obstack_int_grow_fast: (libc)Extra Fast Growing.
* obstack_next_free: (libc)Status of an Obstack.
* obstack_object_size: (libc)Growing Objects.
* obstack_object_size: (libc)Status of an Obstack.
* obstack_printf: (libc)Dynamic Output.
* obstack_ptr_grow: (libc)Growing Objects.
* obstack_ptr_grow_fast: (libc)Extra Fast Growing.
* obstack_room: (libc)Extra Fast Growing.
* obstack_vprintf: (libc)Variable Arguments Output.
* offsetof: (libc)Structure Measurement.
* on_exit: (libc)Cleanups on Exit.
* open64: (libc)Opening and Closing Files.
* open: (libc)Opening and Closing Files.
* open_memstream: (libc)String Streams.
* opendir: (libc)Opening a Directory.
* openlog: (libc)openlog.
* openpty: (libc)Pseudo-Terminal Pairs.
* parse_printf_format: (libc)Parsing a Template String.
* pathconf: (libc)Pathconf.
* pause: (libc)Using Pause.
* pclose: (libc)Pipe to a Subprocess.
* perror: (libc)Error Messages.
* pipe: (libc)Creating a Pipe.
* popen: (libc)Pipe to a Subprocess.
* posix_memalign: (libc)Aligned Memory Blocks.
* pow10: (libc)Exponents and Logarithms.
* pow10f: (libc)Exponents and Logarithms.
* pow10l: (libc)Exponents and Logarithms.
* pow: (libc)Exponents and Logarithms.
* powf: (libc)Exponents and Logarithms.
* powl: (libc)Exponents and Logarithms.
* pread64: (libc)I/O Primitives.
* pread: (libc)I/O Primitives.
* printf: (libc)Formatted Output Functions.
* printf_size: (libc)Predefined Printf Handlers.
* printf_size_info: (libc)Predefined Printf Handlers.
* psignal: (libc)Signal Messages.
* pthread_getattr_default_np: (libc)Default Thread Attributes.
* pthread_getattr_default_np: (libc)Default Thread Attributes.
* ptsname: (libc)Allocation.
* ptsname_r: (libc)Allocation.
* putc: (libc)Simple Output.
* putc_unlocked: (libc)Simple Output.
* putchar: (libc)Simple Output.
* putchar_unlocked: (libc)Simple Output.
* putenv: (libc)Environment Access.
* putpwent: (libc)Writing a User Entry.
* puts: (libc)Simple Output.
* pututline: (libc)Manipulating the Database.
* pututxline: (libc)XPG Functions.
* putw: (libc)Simple Output.
* putwc: (libc)Simple Output.
* putwc_unlocked: (libc)Simple Output.
* putwchar: (libc)Simple Output.
* putwchar_unlocked: (libc)Simple Output.
* pwrite64: (libc)I/O Primitives.
* pwrite: (libc)I/O Primitives.
* qecvt: (libc)System V Number Conversion.
* qecvt_r: (libc)System V Number Conversion.
* qfcvt: (libc)System V Number Conversion.
* qfcvt_r: (libc)System V Number Conversion.
* qgcvt: (libc)System V Number Conversion.
* qsort: (libc)Array Sort Function.
* raise: (libc)Signaling Yourself.
* rand: (libc)ISO Random.
* rand_r: (libc)ISO Random.
* random: (libc)BSD Random.
* random_r: (libc)BSD Random.
* rawmemchr: (libc)Search Functions.
* read: (libc)I/O Primitives.
* readdir64: (libc)Reading/Closing Directory.
* readdir64_r: (libc)Reading/Closing Directory.
* readdir: (libc)Reading/Closing Directory.
* readdir_r: (libc)Reading/Closing Directory.
* readlink: (libc)Symbolic Links.
* readv: (libc)Scatter-Gather.
* realloc: (libc)Changing Block Size.
* realpath: (libc)Symbolic Links.
* recv: (libc)Receiving Data.
* recvfrom: (libc)Receiving Datagrams.
* recvmsg: (libc)Receiving Datagrams.
* regcomp: (libc)POSIX Regexp Compilation.
* regerror: (libc)Regexp Cleanup.
* regexec: (libc)Matching POSIX Regexps.
* regfree: (libc)Regexp Cleanup.
* register_printf_function: (libc)Registering New Conversions.
* remainder: (libc)Remainder Functions.
* remainderf: (libc)Remainder Functions.
* remainderl: (libc)Remainder Functions.
* remove: (libc)Deleting Files.
* rename: (libc)Renaming Files.
* rewind: (libc)File Positioning.
* rewinddir: (libc)Random Access Directory.
* rindex: (libc)Search Functions.
* rint: (libc)Rounding Functions.
* rintf: (libc)Rounding Functions.
* rintl: (libc)Rounding Functions.
* rmdir: (libc)Deleting Files.
* round: (libc)Rounding Functions.
* roundf: (libc)Rounding Functions.
* roundl: (libc)Rounding Functions.
* rpmatch: (libc)Yes-or-No Questions.
* sbrk: (libc)Resizing the Data Segment.
* scalb: (libc)Normalization Functions.
* scalbf: (libc)Normalization Functions.
* scalbl: (libc)Normalization Functions.
* scalbln: (libc)Normalization Functions.
* scalblnf: (libc)Normalization Functions.
* scalblnl: (libc)Normalization Functions.
* scalbn: (libc)Normalization Functions.
* scalbnf: (libc)Normalization Functions.
* scalbnl: (libc)Normalization Functions.
* scandir64: (libc)Scanning Directory Content.
* scandir: (libc)Scanning Directory Content.
* scanf: (libc)Formatted Input Functions.
* sched_get_priority_max: (libc)Basic Scheduling Functions.
* sched_get_priority_min: (libc)Basic Scheduling Functions.
* sched_getaffinity: (libc)CPU Affinity.
* sched_getparam: (libc)Basic Scheduling Functions.
* sched_getscheduler: (libc)Basic Scheduling Functions.
* sched_rr_get_interval: (libc)Basic Scheduling Functions.
* sched_setaffinity: (libc)CPU Affinity.
* sched_setparam: (libc)Basic Scheduling Functions.
* sched_setscheduler: (libc)Basic Scheduling Functions.
* sched_yield: (libc)Basic Scheduling Functions.
* secure_getenv: (libc)Environment Access.
* seed48: (libc)SVID Random.
* seed48_r: (libc)SVID Random.
* seekdir: (libc)Random Access Directory.
* select: (libc)Waiting for I/O.
* send: (libc)Sending Data.
* sendmsg: (libc)Receiving Datagrams.
* sendto: (libc)Sending Datagrams.
* setbuf: (libc)Controlling Buffering.
* setbuffer: (libc)Controlling Buffering.
* setcontext: (libc)System V contexts.
* setdomainname: (libc)Host Identification.
* setegid: (libc)Setting Groups.
* setenv: (libc)Environment Access.
* seteuid: (libc)Setting User ID.
* setfsent: (libc)fstab.
* setgid: (libc)Setting Groups.
* setgrent: (libc)Scanning All Groups.
* setgroups: (libc)Setting Groups.
* sethostent: (libc)Host Names.
* sethostid: (libc)Host Identification.
* sethostname: (libc)Host Identification.
* setitimer: (libc)Setting an Alarm.
* setjmp: (libc)Non-Local Details.
* setkey: (libc)DES Encryption.
* setkey_r: (libc)DES Encryption.
* setlinebuf: (libc)Controlling Buffering.
* setlocale: (libc)Setting the Locale.
* setlogmask: (libc)setlogmask.
* setmntent: (libc)mtab.
* setnetent: (libc)Networks Database.
* setnetgrent: (libc)Lookup Netgroup.
* setpgid: (libc)Process Group Functions.
* setpgrp: (libc)Process Group Functions.
* setpriority: (libc)Traditional Scheduling Functions.
* setprotoent: (libc)Protocols Database.
* setpwent: (libc)Scanning All Users.
* setregid: (libc)Setting Groups.
* setreuid: (libc)Setting User ID.
* setrlimit64: (libc)Limits on Resources.
* setrlimit: (libc)Limits on Resources.
* setservent: (libc)Services Database.
* setsid: (libc)Process Group Functions.
* setsockopt: (libc)Socket Option Functions.
* setstate: (libc)BSD Random.
* setstate_r: (libc)BSD Random.
* settimeofday: (libc)High-Resolution Calendar.
* setuid: (libc)Setting User ID.
* setutent: (libc)Manipulating the Database.
* setutxent: (libc)XPG Functions.
* setvbuf: (libc)Controlling Buffering.
* shutdown: (libc)Closing a Socket.
* sigaction: (libc)Advanced Signal Handling.
* sigaddset: (libc)Signal Sets.
* sigaltstack: (libc)Signal Stack.
* sigblock: (libc)Blocking in BSD.
* sigdelset: (libc)Signal Sets.
* sigemptyset: (libc)Signal Sets.
* sigfillset: (libc)Signal Sets.
* siginterrupt: (libc)BSD Handler.
* sigismember: (libc)Signal Sets.
* siglongjmp: (libc)Non-Local Exits and Signals.
* sigmask: (libc)Blocking in BSD.
* signal: (libc)Basic Signal Handling.
* signbit: (libc)FP Bit Twiddling.
* significand: (libc)Normalization Functions.
* significandf: (libc)Normalization Functions.
* significandl: (libc)Normalization Functions.
* sigpause: (libc)Blocking in BSD.
* sigpending: (libc)Checking for Pending Signals.
* sigprocmask: (libc)Process Signal Mask.
* sigsetjmp: (libc)Non-Local Exits and Signals.
* sigsetmask: (libc)Blocking in BSD.
* sigstack: (libc)Signal Stack.
* sigsuspend: (libc)Sigsuspend.
* sigvec: (libc)BSD Handler.
* sin: (libc)Trig Functions.
* sincos: (libc)Trig Functions.
* sincosf: (libc)Trig Functions.
* sincosl: (libc)Trig Functions.
* sinf: (libc)Trig Functions.
* sinh: (libc)Hyperbolic Functions.
* sinhf: (libc)Hyperbolic Functions.
* sinhl: (libc)Hyperbolic Functions.
* sinl: (libc)Trig Functions.
* sleep: (libc)Sleeping.
* snprintf: (libc)Formatted Output Functions.
* socket: (libc)Creating a Socket.
* socketpair: (libc)Socket Pairs.
* sprintf: (libc)Formatted Output Functions.
* sqrt: (libc)Exponents and Logarithms.
* sqrtf: (libc)Exponents and Logarithms.
* sqrtl: (libc)Exponents and Logarithms.
* srand48: (libc)SVID Random.
* srand48_r: (libc)SVID Random.
* srand: (libc)ISO Random.
* srandom: (libc)BSD Random.
* srandom_r: (libc)BSD Random.
* sscanf: (libc)Formatted Input Functions.
* ssignal: (libc)Basic Signal Handling.
* stat64: (libc)Reading Attributes.
* stat: (libc)Reading Attributes.
* stime: (libc)Simple Calendar Time.
* stpcpy: (libc)Copying and Concatenation.
* stpncpy: (libc)Copying and Concatenation.
* strcasecmp: (libc)String/Array Comparison.
* strcasestr: (libc)Search Functions.
* strcat: (libc)Copying and Concatenation.
* strchr: (libc)Search Functions.
* strchrnul: (libc)Search Functions.
* strcmp: (libc)String/Array Comparison.
* strcoll: (libc)Collation Functions.
* strcpy: (libc)Copying and Concatenation.
* strcspn: (libc)Search Functions.
* strdup: (libc)Copying and Concatenation.
* strdupa: (libc)Copying and Concatenation.
* strerror: (libc)Error Messages.
* strerror_r: (libc)Error Messages.
* strfmon: (libc)Formatting Numbers.
* strfry: (libc)strfry.
* strftime: (libc)Formatting Calendar Time.
* strlen: (libc)String Length.
* strncasecmp: (libc)String/Array Comparison.
* strncat: (libc)Copying and Concatenation.
* strncmp: (libc)String/Array Comparison.
* strncpy: (libc)Copying and Concatenation.
* strndup: (libc)Copying and Concatenation.
* strndupa: (libc)Copying and Concatenation.
* strnlen: (libc)String Length.
* strpbrk: (libc)Search Functions.
* strptime: (libc)Low-Level Time String Parsing.
* strrchr: (libc)Search Functions.
* strsep: (libc)Finding Tokens in a String.
* strsignal: (libc)Signal Messages.
* strspn: (libc)Search Functions.
* strstr: (libc)Search Functions.
* strtod: (libc)Parsing of Floats.
* strtof: (libc)Parsing of Floats.
* strtoimax: (libc)Parsing of Integers.
* strtok: (libc)Finding Tokens in a String.
* strtok_r: (libc)Finding Tokens in a String.
* strtol: (libc)Parsing of Integers.
* strtold: (libc)Parsing of Floats.
* strtoll: (libc)Parsing of Integers.
* strtoq: (libc)Parsing of Integers.
* strtoul: (libc)Parsing of Integers.
* strtoull: (libc)Parsing of Integers.
* strtoumax: (libc)Parsing of Integers.
* strtouq: (libc)Parsing of Integers.
* strverscmp: (libc)String/Array Comparison.
* strxfrm: (libc)Collation Functions.
* stty: (libc)BSD Terminal Modes.
* swapcontext: (libc)System V contexts.
* swprintf: (libc)Formatted Output Functions.
* swscanf: (libc)Formatted Input Functions.
* symlink: (libc)Symbolic Links.
* sync: (libc)Synchronizing I/O.
* syscall: (libc)System Calls.
* sysconf: (libc)Sysconf Definition.
* sysctl: (libc)System Parameters.
* syslog: (libc)syslog; vsyslog.
* system: (libc)Running a Command.
* sysv_signal: (libc)Basic Signal Handling.
* tan: (libc)Trig Functions.
* tanf: (libc)Trig Functions.
* tanh: (libc)Hyperbolic Functions.
* tanhf: (libc)Hyperbolic Functions.
* tanhl: (libc)Hyperbolic Functions.
* tanl: (libc)Trig Functions.
* tcdrain: (libc)Line Control.
* tcflow: (libc)Line Control.
* tcflush: (libc)Line Control.
* tcgetattr: (libc)Mode Functions.
* tcgetpgrp: (libc)Terminal Access Functions.
* tcgetsid: (libc)Terminal Access Functions.
* tcsendbreak: (libc)Line Control.
* tcsetattr: (libc)Mode Functions.
* tcsetpgrp: (libc)Terminal Access Functions.
* tdelete: (libc)Tree Search Function.
* tdestroy: (libc)Tree Search Function.
* telldir: (libc)Random Access Directory.
* tempnam: (libc)Temporary Files.
* textdomain: (libc)Locating gettext catalog.
* tfind: (libc)Tree Search Function.
* tgamma: (libc)Special Functions.
* tgammaf: (libc)Special Functions.
* tgammal: (libc)Special Functions.
* time: (libc)Simple Calendar Time.
* timegm: (libc)Broken-down Time.
* timelocal: (libc)Broken-down Time.
* times: (libc)Processor Time.
* tmpfile64: (libc)Temporary Files.
* tmpfile: (libc)Temporary Files.
* tmpnam: (libc)Temporary Files.
* tmpnam_r: (libc)Temporary Files.
* toascii: (libc)Case Conversion.
* tolower: (libc)Case Conversion.
* toupper: (libc)Case Conversion.
* towctrans: (libc)Wide Character Case Conversion.
* towlower: (libc)Wide Character Case Conversion.
* towupper: (libc)Wide Character Case Conversion.
* trunc: (libc)Rounding Functions.
* truncate64: (libc)File Size.
* truncate: (libc)File Size.
* truncf: (libc)Rounding Functions.
* truncl: (libc)Rounding Functions.
* tsearch: (libc)Tree Search Function.
* ttyname: (libc)Is It a Terminal.
* ttyname_r: (libc)Is It a Terminal.
* twalk: (libc)Tree Search Function.
* tzset: (libc)Time Zone Functions.
* ulimit: (libc)Limits on Resources.
* umask: (libc)Setting Permissions.
* umount2: (libc)Mount-Unmount-Remount.
* umount: (libc)Mount-Unmount-Remount.
* uname: (libc)Platform Type.
* ungetc: (libc)How Unread.
* ungetwc: (libc)How Unread.
* unlink: (libc)Deleting Files.
* unlockpt: (libc)Allocation.
* unsetenv: (libc)Environment Access.
* updwtmp: (libc)Manipulating the Database.
* utime: (libc)File Times.
* utimes: (libc)File Times.
* utmpname: (libc)Manipulating the Database.
* utmpxname: (libc)XPG Functions.
* va_arg: (libc)Argument Macros.
* va_copy: (libc)Argument Macros.
* va_end: (libc)Argument Macros.
* va_start: (libc)Argument Macros.
* valloc: (libc)Aligned Memory Blocks.
* vasprintf: (libc)Variable Arguments Output.
* verr: (libc)Error Messages.
* verrx: (libc)Error Messages.
* versionsort64: (libc)Scanning Directory Content.
* versionsort: (libc)Scanning Directory Content.
* vfork: (libc)Creating a Process.
* vfprintf: (libc)Variable Arguments Output.
* vfscanf: (libc)Variable Arguments Input.
* vfwprintf: (libc)Variable Arguments Output.
* vfwscanf: (libc)Variable Arguments Input.
* vlimit: (libc)Limits on Resources.
* vprintf: (libc)Variable Arguments Output.
* vscanf: (libc)Variable Arguments Input.
* vsnprintf: (libc)Variable Arguments Output.
* vsprintf: (libc)Variable Arguments Output.
* vsscanf: (libc)Variable Arguments Input.
* vswprintf: (libc)Variable Arguments Output.
* vswscanf: (libc)Variable Arguments Input.
* vsyslog: (libc)syslog; vsyslog.
* vtimes: (libc)Resource Usage.
* vwarn: (libc)Error Messages.
* vwarnx: (libc)Error Messages.
* vwprintf: (libc)Variable Arguments Output.
* vwscanf: (libc)Variable Arguments Input.
* wait3: (libc)BSD Wait Functions.
* wait4: (libc)Process Completion.
* wait: (libc)Process Completion.
* waitpid: (libc)Process Completion.
* warn: (libc)Error Messages.
* warnx: (libc)Error Messages.
* wcpcpy: (libc)Copying and Concatenation.
* wcpncpy: (libc)Copying and Concatenation.
* wcrtomb: (libc)Converting a Character.
* wcscasecmp: (libc)String/Array Comparison.
* wcscat: (libc)Copying and Concatenation.
* wcschr: (libc)Search Functions.
* wcschrnul: (libc)Search Functions.
* wcscmp: (libc)String/Array Comparison.
* wcscoll: (libc)Collation Functions.
* wcscpy: (libc)Copying and Concatenation.
* wcscspn: (libc)Search Functions.
* wcsdup: (libc)Copying and Concatenation.
* wcsftime: (libc)Formatting Calendar Time.
* wcslen: (libc)String Length.
* wcsncasecmp: (libc)String/Array Comparison.
* wcsncat: (libc)Copying and Concatenation.
* wcsncmp: (libc)String/Array Comparison.
* wcsncpy: (libc)Copying and Concatenation.
* wcsnlen: (libc)String Length.
* wcsnrtombs: (libc)Converting Strings.
* wcspbrk: (libc)Search Functions.
* wcsrchr: (libc)Search Functions.
* wcsrtombs: (libc)Converting Strings.
* wcsspn: (libc)Search Functions.
* wcsstr: (libc)Search Functions.
* wcstod: (libc)Parsing of Floats.
* wcstof: (libc)Parsing of Floats.
* wcstoimax: (libc)Parsing of Integers.
* wcstok: (libc)Finding Tokens in a String.
* wcstol: (libc)Parsing of Integers.
* wcstold: (libc)Parsing of Floats.
* wcstoll: (libc)Parsing of Integers.
* wcstombs: (libc)Non-reentrant String Conversion.
* wcstoq: (libc)Parsing of Integers.
* wcstoul: (libc)Parsing of Integers.
* wcstoull: (libc)Parsing of Integers.
* wcstoumax: (libc)Parsing of Integers.
* wcstouq: (libc)Parsing of Integers.
* wcswcs: (libc)Search Functions.
* wcsxfrm: (libc)Collation Functions.
* wctob: (libc)Converting a Character.
* wctomb: (libc)Non-reentrant Character Conversion.
* wctrans: (libc)Wide Character Case Conversion.
* wctype: (libc)Classification of Wide Characters.
* wmemchr: (libc)Search Functions.
* wmemcmp: (libc)String/Array Comparison.
* wmemcpy: (libc)Copying and Concatenation.
* wmemmove: (libc)Copying and Concatenation.
* wmempcpy: (libc)Copying and Concatenation.
* wmemset: (libc)Copying and Concatenation.
* wordexp: (libc)Calling Wordexp.
* wordfree: (libc)Calling Wordexp.
* wprintf: (libc)Formatted Output Functions.
* write: (libc)I/O Primitives.
* writev: (libc)Scatter-Gather.
* wscanf: (libc)Formatted Input Functions.
* y0: (libc)Special Functions.
* y0f: (libc)Special Functions.
* y0l: (libc)Special Functions.
* y1: (libc)Special Functions.
* y1f: (libc)Special Functions.
* y1l: (libc)Special Functions.
* yn: (libc)Special Functions.
* ynf: (libc)Special Functions.
* ynl: (libc)Special Functions.
END-INFO-DIR-ENTRY

   This file documents the GNU C Library.

   This is `The GNU C Library Reference Manual', for version
2.18-2013.10 (EGLIBC).

   Copyright (C) 1993-2013 Free Software Foundation, Inc.

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version
1.3 or any later version published by the Free Software Foundation;
with the Invariant Sections being "Free Software Needs Free
Documentation" and "GNU Lesser General Public License", the Front-Cover
texts being "A GNU Manual", and with the Back-Cover Texts as in (a)
below.  A copy of the license is included in the section entitled "GNU
Free Documentation License".

   (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
modify this GNU manual.  Buying copies from the FSF supports it in
developing GNU and promoting software freedom."


File: libc.info,  Node: Adding Platform-specific,  Up: Source Layout

D.1.1 Platform-specific types, macros and functions
---------------------------------------------------

It's sometimes necessary to provide nonstandard, platform-specific
features to developers.  The C library is traditionally the lowest
library layer, so it makes sense for it to provide these low-level
features.  However, including these features in the C library may be a
disadvantage if another package provides them as well as there will be
two conflicting versions of them.  Also, the features won't be
available to projects that do not use the GNU C Library but use other
GNU tools, like GCC.

   The current guidelines are:
   * If the header file provides features that only make sense on a
     particular machine architecture and have nothing to do with an
     operating system, then the features should ultimately be provided
     as GCC built-in functions.  Until then, the GNU C Library may
     provide them in the header file.  When the GCC built-in functions
     become available, those provided in the header file should be made
     conditionally available prior to the GCC version in which the
     built-in function was made available.

   * If the header file provides features that are specific to an
     operating system, both GCC and the GNU C Library could provide it,
     but the GNU C Library is preferred as it already has a lot of
     information about the operating system.

   * If the header file provides features that are specific to an
     operating system but used by the GNU C Library, then the GNU C
     Library should provide them.

   The general solution for providing low-level features is to export
them as follows:

   * A nonstandard, low-level header file that defines macros and inline
     functions should be called `sys/platform/NAME.h'.

   * Each header file's name should include the platform name, to avoid
     users thinking there is anything in common between different the
     header files for different platforms.  For example, a
     `sys/platform/ARCH.h' name such as `sys/platform/ppc.h' is better
     than `sys/platform.h'.

   * A platform-specific header file provided by the GNU C Library
     should coordinate with GCC such that compiler built-in versions of
     the functions and macros are preferred if available.  This means
     that user programs will only ever need to include
     `sys/platform/ARCH.h', keeping the same names of types, macros,
     and functions for convenience and portability.

   * Each included symbol must have the prefix `__ARCH_', such as
     `__ppc_get_timebase'.

   The easiest way to provide a header file is to add it to the
`sysdep_headers' variable.  For example, the combination of
Linux-specific header files on PowerPC could be provided like this:

     sysdep_headers += sys/platform/ppc.h

   Then ensure that you have added a `sys/platform/ppc.h' header file
in the machine-specific directory, e.g.,
`sysdeps/powerpc/sys/platform/ppc.h'.


File: libc.info,  Node: Porting,  Prev: Source Layout,  Up: Maintenance

D.2 Porting the GNU C Library
=============================

The GNU C Library is written to be easily portable to a variety of
machines and operating systems.  Machine- and operating system-dependent
functions are well separated to make it easy to add implementations for
new machines or operating systems.  This section describes the layout of
the library source tree and explains the mechanisms used to select
machine-dependent code to use.

   All the machine-dependent and operating system-dependent files in the
library are in the subdirectory `sysdeps' under the top-level library
source directory.  This directory contains a hierarchy of
subdirectories (*note Hierarchy Conventions::).

   Each subdirectory of `sysdeps' contains source files for a
particular machine or operating system, or for a class of machine or
operating system (for example, systems by a particular vendor, or all
machines that use IEEE 754 floating-point format).  A configuration
specifies an ordered list of these subdirectories.  Each subdirectory
implicitly appends its parent directory to the list.  For example,
specifying the list `unix/bsd/vax' is equivalent to specifying the list
`unix/bsd/vax unix/bsd unix'.  A subdirectory can also specify that it
implies other subdirectories which are not directly above it in the
directory hierarchy.  If the file `Implies' exists in a subdirectory,
it lists other subdirectories of `sysdeps' which are appended to the
list, appearing after the subdirectory containing the `Implies' file.
Lines in an `Implies' file that begin with a `#' character are ignored
as comments.  For example, `unix/bsd/Implies' contains:
     # BSD has Internet-related things.
     unix/inet
   and `unix/Implies' contains:
     posix

So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.

   `sysdeps' has a "special" subdirectory called `generic'.  It is
always implicitly appended to the list of subdirectories, so you
needn't put it in an `Implies' file, and you should not create any
subdirectories under it intended to be new specific categories.
`generic' serves two purposes.  First, the makefiles do not bother to
look for a system-dependent version of a file that's not in `generic'.
This means that any system-dependent source file must have an analogue
in `generic', even if the routines defined by that file are not
implemented on other platforms.  Second, the `generic' version of a
system-dependent file is used if the makefiles do not find a version
specific to the system you're compiling for.

   If it is possible to implement the routines in a `generic' file in
machine-independent C, using only other machine-independent functions in
the C library, then you should do so.  Otherwise, make them stubs.  A
"stub" function is a function which cannot be implemented on a
particular machine or operating system.  Stub functions always return an
error, and set `errno' to `ENOSYS' (Function not implemented).  *Note
Error Reporting::.  If you define a stub function, you must place the
statement `stub_warning(FUNCTION)', where FUNCTION is the name of your
function, after its definition.  This causes the function to be listed
in the installed `<gnu/stubs.h>', and makes GNU ld warn when the
function is used.

   Some rare functions are only useful on specific systems and aren't
defined at all on others; these do not appear anywhere in the
system-independent source code or makefiles (including the `generic'
directory), only in the system-dependent `Makefile' in the specific
system's subdirectory.

   If you come across a file that is in one of the main source
directories (`string', `stdio', etc.), and you want to write a machine-
or operating system-dependent version of it, move the file into
`sysdeps/generic' and write your new implementation in the appropriate
system-specific subdirectory.  Note that if a file is to be
system-dependent, it *must not* appear in one of the main source
directories.

   There are a few special files that may exist in each subdirectory of
`sysdeps':

`Makefile'
     A makefile for this machine or operating system, or class of
     machine or operating system.  This file is included by the library
     makefile `Makerules', which is used by the top-level makefile and
     the subdirectory makefiles.  It can change the variables set in the
     including makefile or add new rules.  It can use GNU `make'
     conditional directives based on the variable `subdir' (see above)
     to select different sets of variables and rules for different
     sections of the library.  It can also set the `make' variable
     `sysdep-routines', to specify extra modules to be included in the
     library.  You should use `sysdep-routines' rather than adding
     modules to `routines' because the latter is used in determining
     what to distribute for each subdirectory of the main source tree.

     Each makefile in a subdirectory in the ordered list of
     subdirectories to be searched is included in order.  Since several
     system-dependent makefiles may be included, each should append to
     `sysdep-routines' rather than simply setting it:

          sysdep-routines := $(sysdep-routines) foo bar

`Subdirs'
     This file contains the names of new whole subdirectories under the
     top-level library source tree that should be included for this
     system.  These subdirectories are treated just like the
     system-independent subdirectories in the library source tree, such
     as `stdio' and `math'.

     Use this when there are completely new sets of functions and header
     files that should go into the library for the system this
     subdirectory of `sysdeps' implements.  For example,
     `sysdeps/unix/inet/Subdirs' contains `inet'; the `inet' directory
     contains various network-oriented operations which only make sense
     to put in the library on systems that support the Internet.

`configure'
     This file is a shell script fragment to be run at configuration
     time.  The top-level `configure' script uses the shell `.' command
     to read the `configure' file in each system-dependent directory
     chosen, in order.  The `configure' files are often generated from
     `configure.in' files using Autoconf.

     A system-dependent `configure' script will usually add things to
     the shell variables `DEFS' and `config_vars'; see the top-level
     `configure' script for details.  The script can check for
     `--with-PACKAGE' options that were passed to the top-level
     `configure'.  For an option `--with-PACKAGE=VALUE' `configure'
     sets the shell variable `with_PACKAGE' (with any dashes in PACKAGE
     converted to underscores) to VALUE; if the option is just
     `--with-PACKAGE' (no argument), then it sets `with_PACKAGE' to
     `yes'.

`configure.in'
     This file is an Autoconf input fragment to be processed into the
     file `configure' in this subdirectory.  *Note Introduction:
     (autoconf.info)Introduction, for a description of Autoconf.  You
     should write either `configure' or `configure.in', but not both.
     The first line of `configure.in' should invoke the `m4' macro
     `GLIBC_PROVIDES'.  This macro does several `AC_PROVIDE' calls for
     Autoconf macros which are used by the top-level `configure'
     script; without this, those macros might be invoked again
     unnecessarily by Autoconf.

   That is the general system for how system-dependencies are isolated.

* Menu:

* Hierarchy Conventions::       The layout of the `sysdeps' hierarchy.
* Porting to Unix::             Porting the library to an average
                                   Unix-like system.


File: libc.info,  Node: Hierarchy Conventions,  Next: Porting to Unix,  Up: Porting

D.2.1 Layout of the `sysdeps' Directory Hierarchy
-------------------------------------------------

A GNU configuration name has three parts: the CPU type, the
manufacturer's name, and the operating system.  `configure' uses these
to pick the list of system-dependent directories to look for.  If the
`--nfp' option is _not_ passed to `configure', the directory
`MACHINE/fpu' is also used.  The operating system often has a "base
operating system"; for example, if the operating system is `Linux', the
base operating system is `unix/sysv'.  The algorithm used to pick the
list of directories is simple: `configure' makes a list of the base
operating system, manufacturer, CPU type, and operating system, in that
order.  It then concatenates all these together with slashes in
between, to produce a directory name; for example, the configuration
`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'.  `configure'
then tries removing each element of the list in turn, so
`unix/sysv/linux' and `unix/sysv' are also tried, among others.  Since
the precise version number of the operating system is often not
important, and it would be very inconvenient, for example, to have
identical `irix6.2' and `irix6.3' directories, `configure' tries
successively less specific operating system names by removing trailing
suffixes starting with a period.

   As an example, here is the complete list of directories that would be
tried for the configuration `i686-linux-gnu' (with the `crypt' and
`linuxthreads' add-on):

     sysdeps/i386/elf
     crypt/sysdeps/unix
     linuxthreads/sysdeps/unix/sysv/linux
     linuxthreads/sysdeps/pthread
     linuxthreads/sysdeps/unix/sysv
     linuxthreads/sysdeps/unix
     linuxthreads/sysdeps/i386/i686
     linuxthreads/sysdeps/i386
     linuxthreads/sysdeps/pthread/no-cmpxchg
     sysdeps/unix/sysv/linux/i386
     sysdeps/unix/sysv/linux
     sysdeps/gnu
     sysdeps/unix/common
     sysdeps/unix/mman
     sysdeps/unix/inet
     sysdeps/unix/sysv/i386/i686
     sysdeps/unix/sysv/i386
     sysdeps/unix/sysv
     sysdeps/unix/i386
     sysdeps/unix
     sysdeps/posix
     sysdeps/i386/i686
     sysdeps/i386/i486
     sysdeps/libm-i387/i686
     sysdeps/i386/fpu
     sysdeps/libm-i387
     sysdeps/i386
     sysdeps/wordsize-32
     sysdeps/ieee754
     sysdeps/libm-ieee754
     sysdeps/generic

   Different machine architectures are conventionally subdirectories at
the top level of the `sysdeps' directory tree.  For example,
`sysdeps/sparc' and `sysdeps/m68k'.  These contain files specific to
those machine architectures, but not specific to any particular
operating system.  There might be subdirectories for specializations of
those architectures, such as `sysdeps/m68k/68020'. Code which is
specific to the floating-point coprocessor used with a particular
machine should go in `sysdeps/MACHINE/fpu'.

   There are a few directories at the top level of the `sysdeps'
hierarchy that are not for particular machine architectures.

`generic'
     As described above (*note Porting::), this is the subdirectory
     that every configuration implicitly uses after all others.

`ieee754'
     This directory is for code using the IEEE 754 floating-point
     format, where the C type `float' is IEEE 754 single-precision
     format, and `double' is IEEE 754 double-precision format.  Usually
     this directory is referred to in the `Implies' file in a machine
     architecture-specific directory, such as `m68k/Implies'.

`libm-ieee754'
     This directory contains an implementation of a mathematical library
     usable on platforms which use IEEE 754 conformant floating-point
     arithmetic.

`libm-i387'
     This is a special case.  Ideally the code should be in
     `sysdeps/i386/fpu' but for various reasons it is kept aside.

`posix'
     This directory contains implementations of things in the library in
     terms of POSIX.1 functions.  This includes some of the POSIX.1
     functions themselves.  Of course, POSIX.1 cannot be completely
     implemented in terms of itself, so a configuration using just
     `posix' cannot be complete.

`unix'
     This is the directory for Unix-like things.  *Note Porting to
     Unix::.  `unix' implies `posix'.  There are some special-purpose
     subdirectories of `unix':

    `unix/common'
          This directory is for things common to both BSD and System V
          release 4.  Both `unix/bsd' and `unix/sysv/sysv4' imply
          `unix/common'.

    `unix/inet'
          This directory is for `socket' and related functions on Unix
          systems.  `unix/inet/Subdirs' enables the `inet' top-level
          subdirectory.  `unix/common' implies `unix/inet'.

`mach'
     This is the directory for things based on the Mach microkernel
     from CMU (including GNU/Hurd systems).  Other basic operating
     systems (VMS, for example) would have their own directories at the
     top level of the `sysdeps' hierarchy, parallel to `unix' and
     `mach'.


File: libc.info,  Node: Porting to Unix,  Prev: Hierarchy Conventions,  Up: Porting

D.2.2 Porting the GNU C Library to Unix Systems
-----------------------------------------------

Most Unix systems are fundamentally very similar.  There are variations
between different machines, and variations in what facilities are
provided by the kernel.  But the interface to the operating system
facilities is, for the most part, pretty uniform and simple.

   The code for Unix systems is in the directory `unix', at the top
level of the `sysdeps' hierarchy.  This directory contains
subdirectories (and subdirectory trees) for various Unix variants.

   The functions which are system calls in most Unix systems are
implemented in assembly code, which is generated automatically from
specifications in files named `syscalls.list'.  There are several such
files, one in `sysdeps/unix' and others in its subdirectories.  Some
special system calls are implemented in files that are named with a
suffix of `.S'; for example, `_exit.S'.  Files ending in `.S' are run
through the C preprocessor before being fed to the assembler.

   These files all use a set of macros that should be defined in
`sysdep.h'.  The `sysdep.h' file in `sysdeps/unix' partially defines
them; a `sysdep.h' file in another directory must finish defining them
for the particular machine and operating system variant.  See
`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h'
implementations to see what these macros are and what they should do.

   The system-specific makefile for the `unix' directory
(`sysdeps/unix/Makefile') gives rules to generate several files from
the Unix system you are building the library on (which is assumed to be
the target system you are building the library _for_).  All the
generated files are put in the directory where the object files are
kept; they should not affect the source tree itself.  The files
generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
(for the `stdio' section of the library).


File: libc.info,  Node: Platform,  Next: Contributors,  Prev: Maintenance,  Up: Top

Appendix E Platform-specific facilities
***************************************

The GNU C Library can provide machine-specific functionality.

* Menu:

* PowerPC::           Facilities Specific to the PowerPC Architecture


File: libc.info,  Node: PowerPC,  Up: Platform

E.1 PowerPC-specific Facilities
===============================

Facilities specific to PowerPC that are not specific to a particular
operating system are declared in `sys/platform/ppc.h'.

 -- Function: uint64_t __ppc_get_timebase (void)
     Read the current value of the Time Base Register.

     The "Time Base Register" is a 64-bit register that stores a
     monotonically incremented value updated at a system-dependent
     frequency that may be different from the processor frequency.
     More information is available in `Power ISA 2.06b - Book II -
     Section 5.2'.

     `__ppc_get_timebase' uses the processor's time base facility
     directly without requiring assistance from the operating system,
     so it is very efficient.

 -- Function: uint64_t __ppc_get_timebase_freq (void)
     Read the current frequency at which the Time Base Register is
     updated.

     This frequency is not related to the processor clock or the bus
     clock.  It is also possible that this frequency is not constant.
     More information is available in `Power ISA 2.06b - Book II -
     Section 5.2'.

   The following functions provide hints about the usage of resources
that are shared with other processors.  They can be used, for example,
if a program waiting on a lock intends to divert the shared resources
to be used by other processors.  More information is available in
`Power ISA 2.06b - Book II - Section 3.2'.

 -- Function: void __ppc_yield (void)
     Provide a hint that performance will probably be improved if
     shared resources dedicated to the executing processor are released
     for use by other processors.

 -- Function: void __ppc_mdoio (void)
     Provide a hint that performance will probably be improved if
     shared resources dedicated to the executing processor are released
     until all outstanding storage accesses to caching-inhibited
     storage have been completed.

 -- Function: void __ppc_mdoom (void)
     Provide a hint that performance will probably be improved if
     shared resources dedicated to the executing processor are released
     until all outstanding storage accesses to cacheable storage for
     which the data is not in the cache have been completed.

 -- Function: void __ppc_set_ppr_med (void)
     Set the Program Priority Register to medium value (default).

     The "Program Priority Register" (PPR) is a 64-bit register that
     controls the program's priority.  By adjusting the PPR value the
     programmer may improve system throughput by causing the system
     resources to be used more efficiently, especially in contention
     situations.  The three unprivileged states available are covered
     by the functions `__ppc_set_ppr_med' (medium - default),
     `__ppc_set_ppc_low' (low) and `__ppc_set_ppc_med_low' (medium
     low).  More information available in `Power ISA 2.06b - Book II -
     Section 3.1'.

 -- Function: void __ppc_set_ppr_low (void)
     Set the Program Priority Register to low value.

 -- Function: void __ppc_set_ppr_med_low (void)
     Set the Program Priority Register to medium low value.


File: libc.info,  Node: Contributors,  Next: Free Manuals,  Prev: Platform,  Up: Top

Appendix F Contributors to the GNU C Library
********************************************

The GNU C Library project would like to thank its many contributors.
Without them the project would not have been nearly as successful as it
has been.  Any omissions in this list are accidental.  Feel free to
file a bug in bugzilla if you have been left out or some of your
contributions are not listed.  Please keep this list in alphabetical
order.

   * Ryan S. Arnold for his improvements for Linux on PowerPC.

   * Miles Bader for writing the `argp' argument-parsing package, and
     the `argz'/`envz' interfaces.

   * Jeff Bailey for his maintainership of the HPPA architecture.

   * Petr Baudis for bug fixes and testing.

   * Stephen R. van den Berg for contributing a highly-optimized
     `strstr' function.

   * Ondrej Bilka for contributing optimized string routines for x64.

   * Eric Blake for adding O(n) implementations of `memmem', `strstr'
     and `strcasestr'.

   * Philip Blundell for the ports to Linux/ARM
     (`arm-ANYTHING-linuxaout') and ARM standalone
     (`arm-ANYTHING-none'), as well as for parts of the IPv6 support
     code.

   * Per Bothner for the implementation of the `libio' library which is
     used to implement `stdio' functions.

   * Mark Brown for his direction as part of the GNU C Library steering
     committee.

   * Thomas Bushnell for his contributions to Hurd.

   * Liubov Dmitrieva for optimzed string and math functions on x86-64
     and x86.

   * Ulrich Drepper for his many contributions in almost all parts of
     the GNU C Library, including:
        * internationalization support, including the `locale' and
          `localedef' utilities.

        * Linux i386/ELF support

        * the `hsearch' and `drand48' families of functions, reentrant
          `...`_r'' versions of the `random' family; System V shared
          memory and IPC support code

        * several highly-optimized string functions for iX86 processors

        * many math functions

        * the character conversion functions (`iconv')

        * the `ftw' and `nftw' functions

        * the floating-point printing function used by `printf' and
          friends and the floating-point reading function used by
          `scanf', `strtod' and friends

        * the `catgets' support and the entire suite of multi-byte and
          wide-character support functions (`wctype.h', `wchar.h',
          etc.).

        * versioning of objects on the symbol level

   * Paul Eggert for the `mktime' function and for his direction as
     part of the GNU C Library steering committee.

   * Tulio Magno Quites Machado Filho for adding a new class of
     installed headers for low-level platform-specific functionality
     and one such for PowerPC.

   * Mike Frysinger for his maintaining of the IA64 architecture and for
     testing and bug fixing.

   * Michael Glad for the DES encryption function `crypt' and related
     functions.

   * Wolfram Gloger for contributing the memory allocation functions
     functions `malloc', `realloc' and `free' and related code.

   * Torbjo"rn Granlund for fast implementations of many of the string
     functions (`memcpy', `strlen', etc.).

   * Michael J. Haertel for writing the merge sort function `qsort' and
     malloc checking functions like `mcheck'.

   * Bruno Haible for his improvements to the `iconv' and locale
     implementations.

   * Richard Henderson for the port to Linux on Alpha
     (`alpha-ANYTHING-linux').

   * David Holsgrove for the port to Linux on MicroBlaze.

   * Daniel Jacobowitz for various fixes and enhancements.

   * Andreas Jaeger for the port to Linux on x86-64
     (`x86_64-ANYTHING-linux' and his work on Linux for MIPS
     (`mips-ANYTHING-linux'), implementing the `ldconfig' program,
     providing a test suite for the math library and for his direction
     as part of the GNU C Library steering committee.

   * Aurelien Jarno for various fixes.

   * Jakub Jelinek for implementing a number of checking functions and
     for his direction as part of the GNU C Library steering committee.

   * Geoffrey Keating for the port to Linux on PowerPC
     (`powerpc-ANYTHING-linux').

   * Brendan Kehoe for contributing the port to the MIPS DECStation
     running Ultrix 4 (`mips-dec-ultrix4') and the port to the DEC Alpha
     running OSF/1 (`alpha-dec-osf1').

   * Mark Kettenis for implementing the `utmpx' interface and an utmp
     daemon, and for a Hesiod NSS module.

   * Andi Kleen for implementing pthreads lock elision with TSX.

   * Kazumoto Kojima for the port of the Mach and Hurd code to the MIPS
     architecture (`mips-ANYTHING-gnu') and for his work on the SH
     architecture.

   * Andreas Krebbel for his work on Linux for s390 and s390x.

   * Thorsten Kukuk for providing an implementation for NIS (YP) and
     NIS+, securelevel 0, 1 and 2 and for the implementation for a
     caching daemon for NSS (`nscd').

   * Jeff Law for various fixes.

   * Doug Lea for contributing the memory allocation functions
     functions `malloc', `realloc' and `free' and related code.

   * Hongjiu Lu for providing the support for a Linux 32-bit runtime
     environment under x86-64 (x32), for porting to Linux on IA64, for
     improved string functions, a framework for testing IFUNC
     implementations, and many bug fixes.

   * Luis Machado for optimized functions on PowerPC.

   * David J. MacKenzie for his contribution to the `getopt' function
     and writing the `tar.h' header.

   * Greg McGary for adding runtime support for bounds checking.

   * Roland McGrath for writing most of the GNU C Library originally,
     for his work on the Hurd port, his direction as part of the GNU C
     Library steering committee, and for many bug fixes and reviewing
     of contributions.

   * Jason Merrill for the port to the Sequent Symmetry running Dynix
     version 3 (`i386-sequent-bsd').

   * Chris Metcalf for the port to Linux/Tile (`tilegx-ANYTHING-linux'
     and `tilepro-ANYTHING-linux').

   * David Miller for contributing the port to Linux/Sparc
     (`sparc*-ANYTHING-linux').

   * Alan Modra for his improvements for Linux on PowerPC.

   * David Mosberger-Tang for contributing the port to Linux/Alpha
     (`alpha-ANYTHING-linux').

   * Stephen Moshier for implementing some 128-bit long double format
     math functions.

   * Stephen Munroe for his port to Linux on PowerPC64
     (`powerpc64-ANYTHING-linux') and for adding optimized
     implementations for PowerPC.

   * Joseph S. Myers for numerous bug fixes for the libm functions, for
     his maintainership of the ARM and MIPS architectures, improving
     cross-compilation and cross-testing of the GNU C Library, expanded
     coverage of conformtest, and merging the ports/ subdirectory into
     the GNU C Library main repository.

   * Will Newton for contributing an optimized memcpy for ARM NEON and
     VFP chips.

   * Carlos O'Donell for his maintainership of the HPPA architecture and
     maintaining the GNU C Library web pages.

   * Alexandre Oliva for adding TLS descriptors for LD and GD on x86 and
     x86-64, for the am33 port, for completing the MIPS n64/n32/o32
     multilib port, and for various fixes.

   * Paul Pluzhnikov for various fixes.

   * Marek Polacek for various fixes.

   * Siddhesh Poyarekar for various fixes and an implementation of a
     framework for performance benchmarking of functions.

   * Tom Quinn for contributing the startup code to support SunOS shared
     libraries and the port to SGI machines running Irix 4
     (`mips-sgi-irix4').

   * Pravin Satpute for writing sorting rules for some Indian languages.

   * Douglas C. Schmidt for writing the quick sort function used as a
     fallback by `qsort'.

   * Will Schmidt for optimized string functions on PowerPC.

   * Andreas Schwab for the port to Linux/m68k (`m68k-ANYTHING-linux')
     and for his direction as part of the GNU C Library steering
     committee.

   * Martin Schwidefsky for porting to Linux on s390
     (`s390-ANYTHING-linux') and s390x (`s390x-ANYTHING-linux').

   * Thomas Schwinge for his contribution to Hurd and the SH
     architecture.

   * Carlos Eduardo Seo for optimized functions on PowerPC.

   * Marcus Shawcroft for contributing the AArch64 port.

   * Franz Sirl for various fixes.

   * Jes Sorensen for porting to Linux on IA64 (`ia64-ANYTHING-linux').

   * Richard Stallman for his contribution to the `getopt' function.

   * Alfred M. Szmidt for various fixes.

   * Ian Lance Taylor for contributing the port to the MIPS DECStation
     running Ultrix 4 (`mips-dec-ultrix4').

   * Samuel Thibault for improving the Hurd port.

   * Tim Waugh for the implementation of the POSIX.2 `wordexp' function
     family.

   * Eric Youngdale for implementing versioning of objects on the
     symbol level.

   * Adhemerval Zanella for optimized functions on PowerPC.


   Some code in the GNU C Library comes from other projects and might
be under a different license:

   * The timezone support code is derived from the public-domain
     timezone package by Arthur David Olson and his many contributors.

   * Some of the support code for Mach is taken from Mach 3.0 by CMU;
     the file if_ppp.h is also copyright by CMU, but under a different
     license; see the file `LICENSES' for the text of the licenses.

   * The random number generation functions `random', `srandom',
     `setstate' and `initstate', which are also the basis for the
     `rand' and `srand' functions, were written by Earl T. Cohen for
     the University of California at Berkeley and are copyrighted by the
     Regents of the University of California.  They have undergone minor
     changes to fit into the GNU C Library and to fit the ISO C
     standard, but the functional code is Berkeley's.

   * The Internet-related code (most of the `inet' subdirectory) and
     several other miscellaneous functions and header files have been
     included from 4.4 BSD with little or no modification.  The copying
     permission notice for this code can be found in the file `LICENSES'
     in the source distribution.

   * The `getaddrinfo' and `getnameinfo' functions and supporting code
     were written by Craig Metz; see the file `LICENSES' for details on
     their licensing.

   * The DNS resolver code is taken directly from BIND 4.9.5, which
     includes copyrighted code from UC Berkeley and from Digital
     Equipment Corporation.  See the file `LICENSES' for the text of
     the DEC license.

   * The code to support Sun RPC is taken verbatim from Sun's
     RPCSRC-4.0 distribution; see the file `LICENSES' for the text of
     the license.

   * The math functions are taken from `fdlibm-5.1' by Sun
     Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
     Ulrich Drepper, Andreas Schwab, and Roland McGrath.

   * Many of the IEEE 64-bit double precision math functions (in the
     `sysdeps/ieee754/dbl-64' subdirectory) come from the IBM Accurate
     Mathematical Library, contributed by IBM.

   * Many of the IA64 math functions are taken from a collection of
     "Highly Optimized Mathematical Functions for Itanium" that Intel
     makes available under a free license; see the file `LICENSES' for
     details.



File: libc.info,  Node: Free Manuals,  Next: Copying,  Prev: Contributors,  Up: Top

Appendix G Free Software Needs Free Documentation
*************************************************

The biggest deficiency in the free software community today is not in
the software--it is the lack of good free documentation that we can
include with the free software.  Many of our most important programs do
not come with free reference manuals and free introductory texts.
Documentation is an essential part of any software package; when an
important free software package does not come with a free manual and a
free tutorial, that is a major gap.  We have many such gaps today.

   Consider Perl, for instance.  The tutorial manuals that people
normally use are non-free.  How did this come about?  Because the
authors of those manuals published them with restrictive terms--no
copying, no modification, source files not available--which exclude
them from the free software world.

   That wasn't the first time this sort of thing happened, and it was
far from the last.  Many times we have heard a GNU user eagerly
describe a manual that he is writing, his intended contribution to the
community, only to learn that he had ruined everything by signing a
publication contract to make it non-free.

   Free documentation, like free software, is a matter of freedom, not
price.  The problem with the non-free manual is not that publishers
charge a price for printed copies--that in itself is fine.  (The Free
Software Foundation sells printed copies of manuals, too.)  The problem
is the restrictions on the use of the manual.  Free manuals are
available in source code form, and give you permission to copy and
modify.  Non-free manuals do not allow this.

   The criteria of freedom for a free manual are roughly the same as for
free software.  Redistribution (including the normal kinds of
commercial redistribution) must be permitted, so that the manual can
accompany every copy of the program, both on-line and on paper.

   Permission for modification of the technical content is crucial too.
When people modify the software, adding or changing features, if they
are conscientious they will change the manual too--so they can provide
accurate and clear documentation for the modified program.  A manual
that leaves you no choice but to write a new manual to document a
changed version of the program is not really available to our community.

   Some kinds of limits on the way modification is handled are
acceptable.  For example, requirements to preserve the original
author's copyright notice, the distribution terms, or the list of
authors, are ok.  It is also no problem to require modified versions to
include notice that they were modified.  Even entire sections that may
not be deleted or changed are acceptable, as long as they deal with
nontechnical topics (like this one).  These kinds of restrictions are
acceptable because they don't obstruct the community's normal use of
the manual.

   However, it must be possible to modify all the _technical_ content
of the manual, and then distribute the result in all the usual media,
through all the usual channels.  Otherwise, the restrictions obstruct
the use of the manual, it is not free, and we need another manual to
replace it.

   Please spread the word about this issue.  Our community continues to
lose manuals to proprietary publishing.  If we spread the word that
free software needs free reference manuals and free tutorials, perhaps
the next person who wants to contribute by writing documentation will
realize, before it is too late, that only free manuals contribute to
the free software community.

   If you are writing documentation, please insist on publishing it
under the GNU Free Documentation License or another free documentation
license.  Remember that this decision requires your approval--you don't
have to let the publisher decide.  Some commercial publishers will use
a free license if you insist, but they will not propose the option; it
is up to you to raise the issue and say firmly that this is what you
want.  If the publisher you are dealing with refuses, please try other
publishers.  If you're not sure whether a proposed license is free,
write to <licensing@gnu.org>.

   You can encourage commercial publishers to sell more free, copylefted
manuals and tutorials by buying them, and particularly by buying copies
from the publishers that paid for their writing or for major
improvements.  Meanwhile, try to avoid buying non-free documentation at
all.  Check the distribution terms of a manual before you buy it, and
insist that whoever seeks your business must respect your freedom.
Check the history of the book, and try reward the publishers that have
paid or pay the authors to work on it.

   The Free Software Foundation maintains a list of free documentation
published by other publishers, at
`http://www.fsf.org/doc/other-free-books.html'.


File: libc.info,  Node: Copying,  Next: Documentation License,  Prev: Free Manuals,  Up: Top

Appendix H GNU Lesser General Public License
********************************************

                      Version 2.1, February 1999

     Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

     [This is the first released version of the Lesser GPL.  It also counts
     as the successor of the GNU Library Public License, version 2, hence the
     version number 2.1.]

Preamble
--------

The licenses for most software are designed to take away your freedom
to share and change it.  By contrast, the GNU General Public Licenses
are intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.

   This license, the Lesser General Public License, applies to some
specially designated software--typically libraries--of the Free
Software Foundation and other authors who decide to use it.  You can use
it too, but we suggest you first think carefully about whether this
license or the ordinary General Public License is the better strategy to
use in any particular case, based on the explanations below.

   When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of it
in new free programs; and that you are informed that you can do these
things.

   To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

   For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

   We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

   To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know that
what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

   Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

   Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and is
quite different from the ordinary General Public License.  We use this
license for certain libraries in order to permit linking those
libraries into non-free programs.

   When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

   We call this license the "Lesser" General Public License because it
does _Less_ to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

   For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it
becomes a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

   In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of free
software.  For example, permission to use the GNU C Library in non-free
programs enables many more people to use the whole GNU operating
system, as well as its variant, the GNU/Linux operating system.

   Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run that
program using a modified version of the Library.

   The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
---------------------------------------------------------------

  0. This License Agreement applies to any software library or other
     program which contains a notice placed by the copyright holder or
     other authorized party saying it may be distributed under the
     terms of this Lesser General Public License (also called "this
     License").  Each licensee is addressed as "you".

     A "library" means a collection of software functions and/or data
     prepared so as to be conveniently linked with application programs
     (which use some of those functions and data) to form executables.

     The "Library", below, refers to any such software library or work
     which has been distributed under these terms.  A "work based on the
     Library" means either the Library or any derivative work under
     copyright law: that is to say, a work containing the Library or a
     portion of it, either verbatim or with modifications and/or
     translated straightforwardly into another language.  (Hereinafter,
     translation is included without limitation in the term
     "modification".)

     "Source code" for a work means the preferred form of the work for
     making modifications to it.  For a library, complete source code
     means all the source code for all modules it contains, plus any
     associated interface definition files, plus the scripts used to
     control compilation and installation of the library.

     Activities other than copying, distribution and modification are
     not covered by this License; they are outside its scope.  The act
     of running a program using the Library is not restricted, and
     output from such a program is covered only if its contents
     constitute a work based on the Library (independent of the use of
     the Library in a tool for writing it).  Whether that is true
     depends on what the Library does and what the program that uses
     the Library does.

  1. You may copy and distribute verbatim copies of the Library's
     complete source code as you receive it, in any medium, provided
     that you conspicuously and appropriately publish on each copy an
     appropriate copyright notice and disclaimer of warranty; keep
     intact all the notices that refer to this License and to the
     absence of any warranty; and distribute a copy of this License
     along with the Library.

     You may charge a fee for the physical act of transferring a copy,
     and you may at your option offer warranty protection in exchange
     for a fee.

  2. You may modify your copy or copies of the Library or any portion
     of it, thus forming a work based on the Library, and copy and
     distribute such modifications or work under the terms of Section 1
     above, provided that you also meet all of these conditions:

       a. The modified work must itself be a software library.

       b. You must cause the files modified to carry prominent notices
          stating that you changed the files and the date of any change.

       c. You must cause the whole of the work to be licensed at no
          charge to all third parties under the terms of this License.

       d. If a facility in the modified Library refers to a function or
          a table of data to be supplied by an application program that
          uses the facility, other than as an argument passed when the
          facility is invoked, then you must make a good faith effort
          to ensure that, in the event an application does not supply
          such function or table, the facility still operates, and
          performs whatever part of its purpose remains meaningful.

          (For example, a function in a library to compute square roots
          has a purpose that is entirely well-defined independent of the
          application.  Therefore, Subsection 2d requires that any
          application-supplied function or table used by this function
          must be optional: if the application does not supply it, the
          square root function must still compute square roots.)

     These requirements apply to the modified work as a whole.  If
     identifiable sections of that work are not derived from the
     Library, and can be reasonably considered independent and separate
     works in themselves, then this License, and its terms, do not
     apply to those sections when you distribute them as separate
     works.  But when you distribute the same sections as part of a
     whole which is a work based on the Library, the distribution of
     the whole must be on the terms of this License, whose permissions
     for other licensees extend to the entire whole, and thus to each
     and every part regardless of who wrote it.

     Thus, it is not the intent of this section to claim rights or
     contest your rights to work written entirely by you; rather, the
     intent is to exercise the right to control the distribution of
     derivative or collective works based on the Library.

     In addition, mere aggregation of another work not based on the
     Library with the Library (or with a work based on the Library) on
     a volume of a storage or distribution medium does not bring the
     other work under the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
     License instead of this License to a given copy of the Library.
     To do this, you must alter all the notices that refer to this
     License, so that they refer to the ordinary GNU General Public
     License, version 2, instead of to this License.  (If a newer
     version than version 2 of the ordinary GNU General Public License
     has appeared, then you can specify that version instead if you
     wish.)  Do not make any other change in these notices.

     Once this change is made in a given copy, it is irreversible for
     that copy, so the ordinary GNU General Public License applies to
     all subsequent copies and derivative works made from that copy.

     This option is useful when you wish to copy part of the code of
     the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
     derivative of it, under Section 2) in object code or executable
     form under the terms of Sections 1 and 2 above provided that you
     accompany it with the complete corresponding machine-readable
     source code, which must be distributed under the terms of Sections
     1 and 2 above on a medium customarily used for software
     interchange.

     If distribution of object code is made by offering access to copy
     from a designated place, then offering equivalent access to copy
     the source code from the same place satisfies the requirement to
     distribute the source code, even though third parties are not
     compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
     Library, but is designed to work with the Library by being
     compiled or linked with it, is called a "work that uses the
     Library".  Such a work, in isolation, is not a derivative work of
     the Library, and therefore falls outside the scope of this License.

     However, linking a "work that uses the Library" with the Library
     creates an executable that is a derivative of the Library (because
     it contains portions of the Library), rather than a "work that
     uses the library".  The executable is therefore covered by this
     License.  Section 6 states terms for distribution of such
     executables.

     When a "work that uses the Library" uses material from a header
     file that is part of the Library, the object code for the work may
     be a derivative work of the Library even though the source code is
     not.  Whether this is true is especially significant if the work
     can be linked without the Library, or if the work is itself a
     library.  The threshold for this to be true is not precisely
     defined by law.

     If such an object file uses only numerical parameters, data
     structure layouts and accessors, and small macros and small inline
     functions (ten lines or less in length), then the use of the object
     file is unrestricted, regardless of whether it is legally a
     derivative work.  (Executables containing this object code plus
     portions of the Library will still fall under Section 6.)

     Otherwise, if the work is a derivative of the Library, you may
     distribute the object code for the work under the terms of Section
     6.  Any executables containing that work also fall under Section 6,
     whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
     link a "work that uses the Library" with the Library to produce a
     work containing portions of the Library, and distribute that work
     under terms of your choice, provided that the terms permit
     modification of the work for the customer's own use and reverse
     engineering for debugging such modifications.

     You must give prominent notice with each copy of the work that the
     Library is used in it and that the Library and its use are covered
     by this License.  You must supply a copy of this License.  If the
     work during execution displays copyright notices, you must include
     the copyright notice for the Library among them, as well as a
     reference directing the user to the copy of this License.  Also,
     you must do one of these things:

       a. Accompany the work with the complete corresponding
          machine-readable source code for the Library including
          whatever changes were used in the work (which must be
          distributed under Sections 1 and 2 above); and, if the work
          is an executable linked with the Library, with the complete
          machine-readable "work that uses the Library", as object code
          and/or source code, so that the user can modify the Library
          and then relink to produce a modified executable containing
          the modified Library.  (It is understood that the user who
          changes the contents of definitions files in the Library will
          not necessarily be able to recompile the application to use
          the modified definitions.)

       b. Use a suitable shared library mechanism for linking with the
          Library.  A suitable mechanism is one that (1) uses at run
          time a copy of the library already present on the user's
          computer system, rather than copying library functions into
          the executable, and (2) will operate properly with a modified
          version of the library, if the user installs one, as long as
          the modified version is interface-compatible with the version
          that the work was made with.

       c. Accompany the work with a written offer, valid for at least
          three years, to give the same user the materials specified in
          Subsection 6a, above, for a charge no more than the cost of
          performing this distribution.

       d. If distribution of the work is made by offering access to copy
          from a designated place, offer equivalent access to copy the
          above specified materials from the same place.

       e. Verify that the user has already received a copy of these
          materials or that you have already sent this user a copy.

     For an executable, the required form of the "work that uses the
     Library" must include any data and utility programs needed for
     reproducing the executable from it.  However, as a special
     exception, the materials to be distributed need not include
     anything that is normally distributed (in either source or binary
     form) with the major components (compiler, kernel, and so on) of
     the operating system on which the executable runs, unless that
     component itself accompanies the executable.

     It may happen that this requirement contradicts the license
     restrictions of other proprietary libraries that do not normally
     accompany the operating system.  Such a contradiction means you
     cannot use both them and the Library together in an executable
     that you distribute.

  7. You may place library facilities that are a work based on the
     Library side-by-side in a single library together with other
     library facilities not covered by this License, and distribute
     such a combined library, provided that the separate distribution
     of the work based on the Library and of the other library
     facilities is otherwise permitted, and provided that you do these
     two things:

       a. Accompany the combined library with a copy of the same work
          based on the Library, uncombined with any other library
          facilities.  This must be distributed under the terms of the
          Sections above.

       b. Give prominent notice with the combined library of the fact
          that part of it is a work based on the Library, and explaining
          where to find the accompanying uncombined form of the same
          work.

  8. You may not copy, modify, sublicense, link with, or distribute the
     Library except as expressly provided under this License.  Any
     attempt otherwise to copy, modify, sublicense, link with, or
     distribute the Library is void, and will automatically terminate
     your rights under this License.  However, parties who have
     received copies, or rights, from you under this License will not
     have their licenses terminated so long as such parties remain in
     full compliance.

  9. You are not required to accept this License, since you have not
     signed it.  However, nothing else grants you permission to modify
     or distribute the Library or its derivative works.  These actions
     are prohibited by law if you do not accept this License.
     Therefore, by modifying or distributing the Library (or any work
     based on the Library), you indicate your acceptance of this
     License to do so, and all its terms and conditions for copying,
     distributing or modifying the Library or works based on it.

 10. Each time you redistribute the Library (or any work based on the
     Library), the recipient automatically receives a license from the
     original licensor to copy, distribute, link with or modify the
     Library subject to these terms and conditions.  You may not impose
     any further restrictions on the recipients' exercise of the rights
     granted herein.  You are not responsible for enforcing compliance
     by third parties with this License.

 11. If, as a consequence of a court judgment or allegation of patent
     infringement or for any other reason (not limited to patent
     issues), conditions are imposed on you (whether by court order,
     agreement or otherwise) that contradict the conditions of this
     License, they do not excuse you from the conditions of this
     License.  If you cannot distribute so as to satisfy simultaneously
     your obligations under this License and any other pertinent
     obligations, then as a consequence you may not distribute the
     Library at all.  For example, if a patent license would not permit
     royalty-free redistribution of the Library by all those who
     receive copies directly or indirectly through you, then the only
     way you could satisfy both it and this License would be to refrain
     entirely from distribution of the Library.

     If any portion of this section is held invalid or unenforceable
     under any particular circumstance, the balance of the section is
     intended to apply, and the section as a whole is intended to apply
     in other circumstances.

     It is not the purpose of this section to induce you to infringe any
     patents or other property right claims or to contest validity of
     any such claims; this section has the sole purpose of protecting
     the integrity of the free software distribution system which is
     implemented by public license practices.  Many people have made
     generous contributions to the wide range of software distributed
     through that system in reliance on consistent application of that
     system; it is up to the author/donor to decide if he or she is
     willing to distribute software through any other system and a
     licensee cannot impose that choice.

     This section is intended to make thoroughly clear what is believed
     to be a consequence of the rest of this License.

 12. If the distribution and/or use of the Library is restricted in
     certain countries either by patents or by copyrighted interfaces,
     the original copyright holder who places the Library under this
     License may add an explicit geographical distribution limitation
     excluding those countries, so that distribution is permitted only
     in or among countries not thus excluded.  In such case, this
     License incorporates the limitation as if written in the body of
     this License.

 13. The Free Software Foundation may publish revised and/or new
     versions of the Lesser General Public License from time to time.
     Such new versions will be similar in spirit to the present version,
     but may differ in detail to address new problems or concerns.

     Each version is given a distinguishing version number.  If the
     Library specifies a version number of this License which applies
     to it and "any later version", you have the option of following
     the terms and conditions either of that version or of any later
     version published by the Free Software Foundation.  If the Library
     does not specify a license version number, you may choose any
     version ever published by the Free Software Foundation.

 14. If you wish to incorporate parts of the Library into other free
     programs whose distribution conditions are incompatible with these,
     write to the author to ask for permission.  For software which is
     copyrighted by the Free Software Foundation, write to the Free
     Software Foundation; we sometimes make exceptions for this.  Our
     decision will be guided by the two goals of preserving the free
     status of all derivatives of our free software and of promoting
     the sharing and reuse of software generally.

                                NO WARRANTY

 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
     WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
     HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
     QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU.  SHOULD THE
     LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
     SERVICING, REPAIR OR CORRECTION.

 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
     MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
     INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
     OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
     OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS
---------------------------

How to Apply These Terms to Your New Libraries
----------------------------------------------

If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of
the ordinary General Public License).

   To apply these terms, attach the following notices to the library.
It is safest to attach them to the start of each source file to most
effectively convey the exclusion of warranty; and each file should have
at least the "copyright" line and a pointer to where the full notice is
found.

     ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
     Copyright (C) YEAR  NAME OF AUTHOR

     This library is free software; you can redistribute it and/or modify it
     under the terms of the GNU Lesser General Public License as published by
     the Free Software Foundation; either version 2.1 of the License, or (at
     your option) any later version.

     This library is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
     USA.

   Also add information on how to contact you by electronic and paper
mail.

   You should also get your employer (if you work as a programmer) or
your school, if any, to sign a "copyright disclaimer" for the library,
if necessary.  Here is a sample; alter the names:

     Yoyodyne, Inc., hereby disclaims all copyright interest in the library
     `Frob' (a library for tweaking knobs) written by James Random Hacker.

     SIGNATURE OF TY COON, 1 April 1990
     Ty Coon, President of Vice

   That's all there is to it!


File: libc.info,  Node: Documentation License,  Next: Concept Index,  Prev: Copying,  Up: Top

Appendix I GNU Free Documentation License
*****************************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     `http://fsf.org/'

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.
     We recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it
     can be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You
     accept the license if you copy, modify or distribute the work in a
     way requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in
     the notice that says that the Document is released under this
     License.  If a section does not fit the above definition of
     Secondary then it is not allowed to be designated as Invariant.
     The Document may contain zero Invariant Sections.  If the Document
     does not identify any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images
     composed of pixels) generic paint programs or (for drawings) some
     widely available drawing editor, and that is suitable for input to
     text formatters or for automatic translation to a variety of
     formats suitable for input to text formatters.  A copy made in an
     otherwise Transparent file format whose markup, or absence of
     markup, has been arranged to thwart or discourage subsequent
     modification by readers is not Transparent.  An image format is
     not Transparent if used for any substantial amount of text.  A
     copy that is not "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and
     standard-conforming simple HTML, PostScript or PDF designed for
     human modification.  Examples of transparent image formats include
     PNG, XCF and JPG.  Opaque formats include proprietary formats that
     can be read and edited only by proprietary word processors, SGML or
     XML for which the DTD and/or processing tools are not generally
     available, and the machine-generated HTML, PostScript or PDF
     produced by some word processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow
     the conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the
     title equally prominent and visible.  You may add other material
     on the covers in addition.  Copying with changes limited to the
     covers, as long as they preserve the title of the Document and
     satisfy these conditions, can be treated as verbatim copying in
     other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a
     machine-readable Transparent copy along with each Opaque copy, or
     state in or with each Opaque copy a computer-network location from
     which the general network-using public has access to download
     using public-standard network protocols a complete Transparent
     copy of the Document, free of added material.  If you use the
     latter option, you must take reasonably prudent steps, when you
     begin distribution of Opaque copies in quantity, to ensure that
     this Transparent copy will remain thus accessible at the stated
     location until at least one year after the last time you
     distribute an Opaque copy (directly or through your agents or
     retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of
     copies, to give them a chance to provide you with an updated
     version of the Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with
     the Modified Version filling the role of the Document, thus
     licensing distribution and modification of the Modified Version to
     whoever possesses a copy of it.  In addition, you must do these
     things in the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of
          previous versions (which should, if there were any, be listed
          in the History section of the Document).  You may use the
          same title as a previous version if the original publisher of
          that version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on
          the Title Page.  If there is no section Entitled "History" in
          the Document, create one stating the title, year, authors,
          and publisher of the Document as given on its Title Page,
          then add an item describing the Modified Version as stated in
          the previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in
          the "History" section.  You may omit a network location for a
          work that was published at least four years before the
          Document itself, or if the original publisher of the version
          it refers to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the
          section all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document,
          unaltered in their text and in their titles.  Section numbers
          or the equivalent are not considered part of the section
          titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option
     designate some or all of these sections as invariant.  To do this,
     add their titles to the list of Invariant Sections in the Modified
     Version's license notice.  These titles must be distinct from any
     other section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end
     of the list of Cover Texts in the Modified Version.  Only one
     passage of Front-Cover Text and one of Back-Cover Text may be
     added by (or through arrangements made by) any one entity.  If the
     Document already includes a cover text for the same cover,
     previously added by you or by arrangement made by the same entity
     you are acting on behalf of, you may not add another; but you may
     replace the old one, on explicit permission from the previous
     publisher that added the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination
     all of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the
     documents in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow
     this License in all other respects regarding verbatim copying of
     that document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of
     a storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly
     and finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from
     you under this License.  If your rights have been terminated and
     not permanently reinstated, receipt of a copy of some or all of
     the same material does not give you any rights to use it.

 10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     `http://www.gnu.org/copyleft/'.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If
     the Document does not specify a version number of this License,
     you may choose any version ever published (not as a draft) by the
     Free Software Foundation.  If the Document specifies that a proxy
     can decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

 11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.


ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts." line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.


File: libc.info,  Node: Concept Index,  Next: Type Index,  Prev: Documentation License,  Up: Top

Concept Index
*************

 [index ]
* Menu:

* /etc/hostname:                         Host Identification. (line  86)
* /etc/nsswitch.conf:                    NSS Configuration File.
                                                              (line   6)
* 4.N BSD Unix:                          Berkeley Unix.       (line   6)
* _POSIX_OPTION_ORDER environment variable.: Standard Environment.
                                                              (line 104)
* _POSIX_SAVED_IDS:                      How Change Persona.  (line   6)
* abort signal:                          Program Error Signals.
                                                              (line 135)
* aborting a program:                    Aborting a Program.  (line   6)
* absolute file name:                    File Name Resolution.
                                                              (line  19)
* absolute priority:                     Absolute Priority.   (line   6)
* absolute value functions:              Absolute Value.      (line   6)
* accepting connections:                 Accepting Connections.
                                                              (line   6)
* access permission for a file:          Access Permission.   (line   6)
* access, testing for:                   Testing File Access. (line   6)
* accessing directories:                 Accessing Directories.
                                                              (line   6)
* address of socket:                     Socket Addresses.    (line   6)
* address space <1>:                     Program Basics.      (line   6)
* address space:                         Memory Subsystem.    (line   6)
* alarm signal:                          Alarm Signals.       (line  19)
* alarms, setting:                       Setting an Alarm.    (line  10)
* alignment (in obstacks):               Obstacks Data Alignment.
                                                              (line   6)
* alignment (with malloc):               Aligned Memory Blocks.
                                                              (line   6)
* alloca disadvantages:                  Disadvantages of Alloca.
                                                              (line   6)
* alloca function:                       Variable Size Automatic.
                                                              (line   6)
* allocating pseudo-terminals:           Allocation.          (line   6)
* allocation (obstacks):                 Allocation in an Obstack.
                                                              (line   6)
* allocation debugging:                  Allocation Debugging.
                                                              (line   6)
* allocation hooks, for malloc:          Hooks for Malloc.    (line   6)
* allocation of memory with malloc:      Basic Allocation.    (line   6)
* allocation size of string:             Representation of Strings.
                                                              (line  56)
* allocation statistics:                 Statistics of Malloc.
                                                              (line   6)
* alphabetic character <1>:              Classification of Wide Characters.
                                                              (line  80)
* alphabetic character:                  Classification of Characters.
                                                              (line  35)
* alphanumeric character <1>:            Classification of Wide Characters.
                                                              (line  68)
* alphanumeric character:                Classification of Characters.
                                                              (line  48)
* append-access files:                   File Position.       (line  28)
* argc (program argument count):         Program Arguments.   (line  16)
* argp (program argument parser):        Argp.                (line   6)
* argp parser functions:                 Argp Parser Functions.
                                                              (line  13)
* ARGP_HELP_FMT environment variable:    Argp User Customization.
                                                              (line   6)
* argument parsing with argp:            Argp.                (line   6)
* argument promotion:                    Calling Variadics.   (line  27)
* argument vectors, null-character separated: Argz and Envz Vectors.
                                                              (line   6)
* arguments (variadic functions):        Receiving Arguments. (line   6)
* arguments, how many:                   How Many Arguments.  (line   6)
* arguments, to program:                 Program Arguments.   (line   6)
* argv (program argument vector):        Program Arguments.   (line  16)
* argz vectors (string vectors):         Argz and Envz Vectors.
                                                              (line   6)
* arithmetic expansion:                  Expansion Stages.    (line  22)
* array comparison functions:            String/Array Comparison.
                                                              (line   6)
* array copy functions:                  Copying and Concatenation.
                                                              (line  10)
* array search function:                 Array Search Function.
                                                              (line   6)
* array sort function:                   Array Sort Function. (line   6)
* ASCII character:                       Classification of Characters.
                                                              (line 103)
* assertions:                            Consistency Checking.
                                                              (line   6)
* attributes of a file:                  Attribute Meanings.  (line   6)
* automatic freeing:                     Variable Size Automatic.
                                                              (line   6)
* automatic memory allocation:           Memory Allocation and C.
                                                              (line  19)
* automatic storage class:               Memory Allocation and C.
                                                              (line  19)
* automatic storage with variable size:  Variable Size Automatic.
                                                              (line   6)
* auxiliary vector:                      Auxiliary Vector.    (line   6)
* background job:                        Concepts of Job Control.
                                                              (line  49)
* background job, launching:             Foreground and Background.
                                                              (line  62)
* backtrace:                             Backtraces.          (line   6)
* backtrace_fd:                          Backtraces.          (line   6)
* backtrace_symbols:                     Backtraces.          (line   6)
* base (of floating point number):       Floating Point Concepts.
                                                              (line  20)
* baud rate:                             Line Speed.          (line   6)
* Berkeley Unix:                         Berkeley Unix.       (line   6)
* Bessel functions:                      Special Functions.   (line   6)
* bias (of floating point number exponent): Floating Point Concepts.
                                                              (line  27)
* big-endian:                            Byte Order.          (line   6)
* binary I/O to a stream:                Block Input/Output.  (line   9)
* binary search function (for arrays):   Array Search Function.
                                                              (line   6)
* binary stream:                         Binary Streams.      (line  13)
* binding a socket address:              Socket Addresses.    (line   6)
* blank character <1>:                   Classification of Wide Characters.
                                                              (line 221)
* blank character:                       Classification of Characters.
                                                              (line  85)
* block I/O to a stream:                 Block Input/Output.  (line   9)
* blocked signals:                       Delivery of Signal.  (line   6)
* blocked signals, checking for:         Checking for Pending Signals.
                                                              (line   6)
* blocking signals:                      Blocking Signals.    (line   6)
* blocking signals, in a handler:        Blocking for Handler.
                                                              (line   6)
* bootstrapping, and services:           Actions in the NSS configuration.
                                                              (line  72)
* break condition, detecting:            Input Modes.         (line  58)
* break condition, generating:           Line Control.        (line  14)
* breaking a string into tokens:         Finding Tokens in a String.
                                                              (line   6)
* broken pipe signal:                    Operation Error Signals.
                                                              (line  13)
* broken-down time <1>:                  Broken-down Time.    (line   6)
* broken-down time:                      Calendar Time.       (line  26)
* BSD compatibility library:             Process Group Functions.
                                                              (line  55)
* BSD compatibility library.:            Feature Test Macros. (line  88)
* BSD Unix:                              Berkeley Unix.       (line   6)
* buffering of streams:                  Stream Buffering.    (line   6)
* buffering, controlling:                Controlling Buffering.
                                                              (line   8)
* bugs, reporting:                       Reporting Bugs.      (line   6)
* bus error:                             Program Error Signals.
                                                              (line 133)
* butterfly:                             Misc FP Arithmetic.  (line  43)
* byte order conversion, for socket:     Byte Order.          (line   6)
* byte stream:                           Socket Concepts.     (line  12)
* C++ streams:                           Streams and I18N.    (line  30)
* calendar time:                         Time Basics.         (line  13)
* calendar time and broken-down time:    Broken-down Time.    (line   6)
* calendar, Gregorian:                   Calendar Time.       (line  26)
* calling variadic functions:            Calling Variadics.   (line   6)
* canonical input processing:            Canonical or Not.    (line   9)
* capacity limits, POSIX:                General Limits.      (line   6)
* carrier detect:                        Control Modes.       (line  21)
* case conversion of characters:         Case Conversion.     (line   6)
* catching signals:                      Delivery of Signal.  (line  13)
* categories for locales:                Locale Categories.   (line   6)
* change working directory:              Working Directory.   (line   6)
* changing the locale:                   Setting the Locale.  (line  18)
* changing the size of a block (malloc): Changing Block Size. (line   6)
* changing the size of a block (obstacks): Growing Objects.   (line   6)
* channels:                              Stream/Descriptor Precautions.
                                                              (line   6)
* character case conversion:             Case Conversion.     (line   6)
* character predicates:                  Classification of Characters.
                                                              (line   6)
* character testing:                     Classification of Characters.
                                                              (line   6)
* checking for pending signals:          Checking for Pending Signals.
                                                              (line   6)
* child process <1>:                     Process Creation Concepts.
                                                              (line  15)
* child process <2>:                     Processes.           (line  13)
* child process:                         Processor Time.      (line  31)
* child process signal:                  Job Control Signals. (line  14)
* chunks:                                Obstack Chunks.      (line   6)
* classes, floating-point:               Floating Point Classes.
                                                              (line   6)
* classification of characters:          Classification of Characters.
                                                              (line   6)
* cleaning up a stream:                  Linked Channels.     (line  15)
* clearing terminal input queue:         Line Control.        (line  59)
* client:                                Connections.         (line   6)
* clock ticks:                           Processor And CPU Time.
                                                              (line  19)
* clock, high accuracy:                  High Accuracy Clock. (line   6)
* close-on-exec (file descriptor flag):  Descriptor Flags.    (line  52)
* closing a file descriptor:             Opening and Closing Files.
                                                              (line   6)
* closing a socket:                      Closing a Socket.    (line   6)
* closing a stream:                      Closing Streams.     (line   6)
* collating strings:                     Collation Functions. (line   6)
* combining locales:                     Choosing Locale.     (line  19)
* command argument syntax:               Argument Syntax.     (line   6)
* command arguments, parsing:            Parsing Program Arguments.
                                                              (line   6)
* command line arguments:                Program Arguments.   (line   6)
* command substitution:                  Expansion Stages.    (line  18)
* communication style (of a socket):     Socket Concepts.     (line   6)
* comparing strings and arrays:          String/Array Comparison.
                                                              (line   6)
* Comparison Function:                   Comparison Functions.
                                                              (line   6)
* compiling:                             Configuring and compiling.
                                                              (line   6)
* complex exponentiation functions:      Exponents and Logarithms.
                                                              (line 160)
* complex logarithm functions:           Exponents and Logarithms.
                                                              (line 160)
* complex numbers:                       Complex Numbers.     (line   6)
* complex trigonometric functions:       Trig Functions.      (line  56)
* concatenating strings:                 Copying and Concatenation.
                                                              (line  10)
* configuring:                           Configuring and compiling.
                                                              (line   6)
* conjugate complex numbers:             Operations on Complex.
                                                              (line   6)
* connecting a socket:                   Connecting.          (line   6)
* connection:                            Connections.         (line   6)
* consistency checking:                  Consistency Checking.
                                                              (line   6)
* consistency checking, of heap:         Heap Consistency Checking.
                                                              (line   6)
* constants <1>:                         Mathematical Constants.
                                                              (line   6)
* constants:                             Memory Concepts.     (line  67)
* continue signal:                       Job Control Signals. (line  28)
* control character <1>:                 Classification of Wide Characters.
                                                              (line  96)
* control character:                     Classification of Characters.
                                                              (line  99)
* control operations on files:           Control Operations.  (line   6)
* controlling process:                   Controlling Terminal.
                                                              (line  13)
* controlling terminal:                  Concepts of Job Control.
                                                              (line  42)
* controlling terminal, access to:       Access to the Terminal.
                                                              (line   6)
* controlling terminal, determining:     Identifying the Terminal.
                                                              (line   6)
* controlling terminal, setting:         Open-time Flags.     (line  54)
* conversion specifications (printf):    Formatted Output Basics.
                                                              (line  14)
* conversion specifications (scanf):     Formatted Input Basics.
                                                              (line  18)
* converting byte order:                 Byte Order.          (line   6)
* converting case of characters:         Case Conversion.     (line   6)
* converting file descriptor to stream:  Descriptors and Streams.
                                                              (line   6)
* converting floats to integers:         Rounding Functions.  (line   6)
* converting group ID to group name:     Lookup Group.        (line   6)
* converting group name to group ID:     Lookup Group.        (line   6)
* converting host address to name:       Host Names.          (line   6)
* converting host name to address:       Host Names.          (line   6)
* converting network name to network number: Networks Database.
                                                              (line   6)
* converting network number to network name: Networks Database.
                                                              (line   6)
* converting port number to service name: Services Database.  (line   6)
* converting service name to port number: Services Database.  (line   6)
* converting string to collation order:  Collation Functions. (line  77)
* converting strings to numbers:         Parsing of Numbers.  (line   6)
* converting user ID to user name:       Lookup User.         (line   6)
* converting user name to user ID:       Lookup User.         (line   6)
* cookie, for custom stream:             Streams and Cookies. (line   6)
* copy-on-write page fault:              Locked Memory Details.
                                                              (line  40)
* copying strings and arrays:            Copying and Concatenation.
                                                              (line  10)
* cpu priority:                          Priority.            (line   6)
* CPU time <1>:                          Processor Time.      (line   9)
* CPU time <2>:                          Processor And CPU Time.
                                                              (line  19)
* CPU time:                              Time Basics.         (line  37)
* create on open (file status flag):     Open-time Flags.     (line  22)
* creating a directory:                  Creating Directories.
                                                              (line   6)
* creating a FIFO special file:          FIFO Special Files.  (line   6)
* creating a pipe:                       Creating a Pipe.     (line   6)
* creating a pipe to a subprocess:       Pipe to a Subprocess.
                                                              (line   6)
* creating a process:                    Process Creation Concepts.
                                                              (line  15)
* creating a socket:                     Creating a Socket.   (line   6)
* creating a socket pair:                Socket Pairs.        (line   6)
* creating special files:                Making Special Files.
                                                              (line   6)
* cube root function:                    Exponents and Logarithms.
                                                              (line 130)
* currency symbols:                      Currency Symbol.     (line   6)
* current limit:                         Limits on Resources. (line  17)
* current working directory:             Working Directory.   (line   6)
* custom streams:                        Custom Streams.      (line   6)
* customizing printf:                    Customizing Printf.  (line   6)
* data loss on sockets:                  Socket Concepts.     (line  17)
* databases:                             Name Service Switch. (line   6)
* datagram socket:                       Datagrams.           (line   6)
* datagrams, transmitting:               Sending Datagrams.   (line   6)
* date:                                  Time Basics.         (line  16)
* Daylight Saving Time:                  Broken-down Time.    (line  62)
* decimal digit character:               Classification of Characters.
                                                              (line  45)
* decimal-point separator:               General Numeric.     (line  13)
* declaration (compared to definition):  Header Files.        (line  17)
* declaring variadic functions:          Calling Variadics.   (line   6)
* decompose complex numbers:             Operations on Complex.
                                                              (line   6)
* default action (for a signal):         Delivery of Signal.  (line  13)
* default action for a signal:           Basic Signal Handling.
                                                              (line  35)
* default argument promotions:           Calling Variadics.   (line  27)
* default value, and NSS:                Notes on NSS Configuration File.
                                                              (line  11)
* defining new printf conversions:       Customizing Printf.  (line   6)
* definition (compared to declaration):  Header Files.        (line  17)
* delayed suspend character:             Signal Characters.   (line  53)
* deleting a directory:                  Deleting Files.      (line  52)
* deleting a file:                       Deleting Files.      (line   6)
* delivery of signals:                   Delivery of Signal.  (line   6)
* descriptors and streams:               Stream/Descriptor Precautions.
                                                              (line   6)
* digit character <1>:                   Classification of Wide Characters.
                                                              (line 106)
* digit character:                       Classification of Characters.
                                                              (line  45)
* directories, accessing:                Accessing Directories.
                                                              (line   6)
* directories, creating:                 Creating Directories.
                                                              (line   6)
* directories, deleting:                 Deleting Files.      (line  52)
* directory:                             Directories.         (line   9)
* directory entry:                       Directories.         (line   9)
* directory hierarchy:                   Working with Directory Trees.
                                                              (line   6)
* directory stream:                      Accessing Directories.
                                                              (line  10)
* disadvantages of alloca:               Disadvantages of Alloca.
                                                              (line   6)
* DISCARD character:                     Other Special.       (line  24)
* division by zero:                      FP Exceptions.       (line   6)
* DNS:                                   Host Identification. (line  17)
* DNS server unavailable:                Actions in the NSS configuration.
                                                              (line  30)
* domain (of socket):                    Socket Concepts.     (line  33)
* domain error:                          Math Error Reporting.
                                                              (line   6)
* domain name:                           Host Identification. (line  21)
* Domain Name System:                    Host Identification. (line  17)
* dot notation, for Internet addresses:  Abstract Host Addresses.
                                                              (line  48)
* DSUSP character:                       Signal Characters.   (line  53)
* duplicating file descriptors:          Duplicating Descriptors.
                                                              (line   6)
* dynamic memory allocation:             Memory Allocation and C.
                                                              (line  26)
* EBCDIC:                                Extended Char Intro. (line 156)
* echo of terminal input:                Local Modes.         (line  24)
* effective group ID:                    Process Persona.     (line   6)
* effective user ID:                     Process Persona.     (line   6)
* efficiency and malloc:                 Efficiency and Malloc.
                                                              (line   6)
* efficiency and obstacks:               Extra Fast Growing.  (line   6)
* efficiency of chunks:                  Obstack Chunks.      (line   6)
* EINTR, and restarting interrupted primitives: Interrupted Primitives.
                                                              (line  51)
* elapsed time <1>:                      Elapsed Time.        (line   6)
* elapsed time:                          Time Basics.         (line  24)
* encryption:                            Trivial Encryption.  (line   6)
* end of file, on a stream:              EOF and Errors.      (line   6)
* end-of-file, on a file descriptor:     I/O Primitives.      (line  21)
* environment:                           Environment Variables.
                                                              (line  22)
* environment access:                    Environment Access.  (line   6)
* environment representation:            Environment Access.  (line   6)
* environment variable:                  Environment Variables.
                                                              (line   6)
* environment vectors, null-character separated: Argz and Envz Vectors.
                                                              (line   9)
* envz vectors (environment vectors):    Argz and Envz Vectors.
                                                              (line   9)
* EOF character:                         Editing Characters.  (line  10)
* EOL character:                         Editing Characters.  (line  22)
* EOL2 character:                        Editing Characters.  (line  35)
* epoch:                                 Simple Calendar Time.
                                                              (line  10)
* ERASE character:                       Editing Characters.  (line  47)
* errno:                                 System Calls.        (line  55)
* error codes:                           Error Reporting.     (line   6)
* error messages, in argp:               Argp Helper Functions.
                                                              (line  23)
* error reporting:                       Error Reporting.     (line   6)
* errors, mathematical:                  Math Error Reporting.
                                                              (line   6)
* establishing a handler:                Signal Actions.      (line   6)
* ethers:                                NSS Basics.          (line  26)
* EUC:                                   Extended Char Intro. (line 188)
* EUC-JP:                                glibc iconv Implementation.
                                                              (line  53)
* exception <1>:                         Program Error Signals.
                                                              (line  48)
* exception:                             FP Exceptions.       (line   6)
* exclusive lock:                        File Locks.          (line  10)
* exec functions:                        Executing a File.    (line   6)
* execing a program:                     Memory Concepts.     (line  90)
* executable:                            Memory Concepts.     (line  67)
* executing a file:                      Executing a File.    (line   6)
* exit status:                           Exit Status.         (line   6)
* exit status value:                     Program Termination. (line   6)
* exiting a program:                     Memory Concepts.     (line  90)
* expansion of shell words:              Word Expansion.      (line   6)
* exponent (of floating point number):   Floating Point Concepts.
                                                              (line  23)
* exponentiation functions:              Exponents and Logarithms.
                                                              (line   6)
* extending printf:                      Customizing Printf.  (line   6)
* extracting file descriptor from stream: Descriptors and Streams.
                                                              (line   6)
* fcntl function:                        Control Operations.  (line   6)
* FDL, GNU Free Documentation License:   Documentation License.
                                                              (line   6)
* feature test macros:                   Feature Test Macros. (line   6)
* field splitting:                       Expansion Stages.    (line  25)
* FIFO special file:                     Pipes and FIFOs.     (line  12)
* file access permission:                Access Permission.   (line   6)
* file access time:                      File Times.          (line   6)
* file attribute modification time:      File Times.          (line   6)
* file attributes:                       Attribute Meanings.  (line   6)
* file creation mask:                    Setting Permissions. (line   6)
* file descriptor flags:                 Descriptor Flags.    (line   6)
* file descriptor sets, for select:      Waiting for I/O.     (line  30)
* file descriptors, standard:            Descriptors and Streams.
                                                              (line  49)
* file locks:                            File Locks.          (line   6)
* file modification time:                File Times.          (line   6)
* file name:                             File Names.          (line  14)
* file name component:                   Directories.         (line  15)
* file name errors:                      File Name Errors.    (line   6)
* file name resolution:                  File Name Resolution.
                                                              (line  10)
* file name translation flags:           Open-time Flags.     (line  14)
* file names, multiple:                  Hard Links.          (line   6)
* file owner:                            File Owner.          (line   6)
* file permission bits:                  Permission Bits.     (line  15)
* file pointer:                          Streams.             (line  12)
* file position:                         File Position.       (line  14)
* file positioning on a file descriptor: File Position Primitive.
                                                              (line  15)
* file positioning on a stream:          File Positioning.    (line   6)
* file status flags:                     File Status Flags.   (line   6)
* files, accessing:                      Memory Concepts.     (line  83)
* filtering i/o through subprocess:      Pipe to a Subprocess.
                                                              (line   6)
* flag character (printf):               Output Conversion Syntax.
                                                              (line  60)
* flag character (scanf):                Input Conversion Syntax.
                                                              (line  35)
* flags for sigaction:                   Flags for Sigaction. (line   6)
* flags, file name translation:          Open-time Flags.     (line  14)
* flags, open-time action:               Open-time Flags.     (line  17)
* floating point:                        Floating Point Numbers.
                                                              (line   6)
* floating point, IEEE:                  IEEE Floating Point. (line   6)
* floating type measurements:            Floating Type Macros.
                                                              (line   6)
* floating-point classes:                Floating Point Classes.
                                                              (line   6)
* floating-point exception:              Program Error Signals.
                                                              (line  48)
* flow control, terminal:                Line Control.        (line  93)
* flushing a stream:                     Flushing Buffers.    (line   6)
* flushing terminal output queue:        Line Control.        (line  34)
* foreground job:                        Concepts of Job Control.
                                                              (line  49)
* foreground job, launching:             Foreground and Background.
                                                              (line  10)
* forking a process:                     Process Creation Concepts.
                                                              (line  15)
* format string, for printf:             Formatted Output.    (line   6)
* format string, for scanf:              Formatted Input.     (line   6)
* formatted input from a stream:         Formatted Input.     (line   6)
* formatted messages:                    Formatted Messages.  (line   6)
* formatted output to a stream:          Formatted Output.    (line   6)
* FP arithmetic:                         FP Bit Twiddling.    (line   6)
* FQDN:                                  Host Identification. (line  32)
* frame, real memory:                    Memory Concepts.     (line  18)
* free documentation:                    Free Manuals.        (line   6)
* freeing (obstacks):                    Freeing Obstack Objects.
                                                              (line   6)
* freeing memory:                        Memory Concepts.     (line  90)
* freeing memory allocated with malloc:  Freeing after Malloc.
                                                              (line   6)
* fully buffered stream:                 Buffering Concepts.  (line  15)
* function prototypes (variadic):        Variadic Prototypes. (line   6)
* gamma function:                        Special Functions.   (line   6)
* gcvt_r:                                System V Number Conversion.
                                                              (line  83)
* gencat:                                The gencat program.  (line   6)
* generation of signals:                 Signal Generation.   (line   6)
* generic i/o control operations:        IOCTLs.              (line   6)
* globbing:                              Globbing.            (line   6)
* graphic character <1>:                 Classification of Wide Characters.
                                                              (line 126)
* graphic character:                     Classification of Characters.
                                                              (line  90)
* Gregorian calendar:                    Calendar Time.       (line  26)
* group:                                 NSS Basics.          (line  26)
* group database:                        Group Database.      (line   6)
* group ID:                              User and Group IDs.  (line  12)
* group name:                            User and Group IDs.  (line  12)
* group owner of a file:                 File Owner.          (line   6)
* grouping of digits:                    General Numeric.     (line  28)
* growing objects (in obstacks):         Growing Objects.     (line   6)
* handling multiple signals:             Merged Signals.      (line   6)
* hangup signal:                         Termination Signals. (line  72)
* hard limit:                            Limits on Resources. (line  24)
* hard link:                             Hard Links.          (line   6)
* header files:                          Header Files.        (line   6)
* heap consistency checking:             Heap Consistency Checking.
                                                              (line   6)
* heap, dynamic allocation from:         Unconstrained Allocation.
                                                              (line   6)
* heap, freeing memory from:             Freeing after Malloc.
                                                              (line   6)
* hexadecimal digit character <1>:       Classification of Wide Characters.
                                                              (line 206)
* hexadecimal digit character:           Classification of Characters.
                                                              (line  53)
* hidden bit (of floating point number mantissa): Floating Point Concepts.
                                                              (line  42)
* hierarchy, directory:                  Working with Directory Trees.
                                                              (line   6)
* high-priority data:                    Out-of-Band Data.    (line   6)
* high-resolution time:                  Calendar Time.       (line  20)
* holes in files:                        File Position Primitive.
                                                              (line  60)
* home directory:                        Standard Environment.
                                                              (line  12)
* HOME environment variable:             Standard Environment.
                                                              (line  12)
* hook functions (of custom streams):    Hook Functions.      (line   6)
* host address, Internet:                Abstract Host Addresses.
                                                              (line   6)
* host name:                             Host Identification. (line  13)
* hostname:                              Host Identification. (line  19)
* hosts:                                 NSS Basics.          (line  26)
* hosts database:                        Host Names.          (line   6)
* how many arguments:                    How Many Arguments.  (line   6)
* hyperbolic functions:                  Hyperbolic Functions.
                                                              (line   6)
* identifying terminals:                 Is It a Terminal.    (line   6)
* IEEE 754:                              Floating Point Numbers.
                                                              (line   6)
* IEEE floating point:                   Floating Point Numbers.
                                                              (line   6)
* IEEE floating point representation:    IEEE Floating Point. (line   6)
* IEEE Std 1003.1:                       POSIX.               (line   6)
* IEEE Std 1003.2:                       POSIX.               (line   6)
* ignore action for a signal:            Basic Signal Handling.
                                                              (line  40)
* illegal instruction:                   Program Error Signals.
                                                              (line 106)
* impossible events:                     Consistency Checking.
                                                              (line   6)
* independent channels:                  Independent Channels.
                                                              (line   6)
* inexact exception:                     FP Exceptions.       (line   6)
* infinity:                              Infinity and NaN.    (line   6)
* initial signal actions:                Initial Signal Actions.
                                                              (line   6)
* inode number:                          Attribute Meanings.  (line 192)
* input available signal:                Asynchronous I/O Signals.
                                                              (line  13)
* input conversions, for scanf:          Table of Input Conversions.
                                                              (line   6)
* input from multiple files:             Waiting for I/O.     (line   6)
* installation tools:                    Tools for Compilation.
                                                              (line   6)
* installing:                            Running make install.
                                                              (line   6)
* integer:                               Integers.            (line   6)
* integer division functions:            Integer Division.    (line   6)
* integer type range:                    Range of Type.       (line   6)
* integer type width:                    Width of Type.       (line   6)
* interactive signals, from terminal:    Local Modes.         (line  94)
* interactive stop signal:               Job Control Signals. (line  57)
* internal representation:               Extended Char Intro. (line  12)
* internationalization:                  Locales.             (line  11)
* Internet host address:                 Abstract Host Addresses.
                                                              (line   6)
* Internet namespace, for sockets:       Internet Namespace.  (line   6)
* interprocess communication, with FIFO: FIFO Special Files.  (line   6)
* interprocess communication, with pipes: Creating a Pipe.    (line   6)
* interprocess communication, with signals: Kill Example.     (line   6)
* interprocess communication, with sockets: Sockets.          (line   9)
* interrupt character:                   Signal Characters.   (line  11)
* interrupt signal:                      Termination Signals. (line  30)
* interrupt-driven input:                Interrupt Input.     (line   6)
* interrupting primitives:               Interrupted Primitives.
                                                              (line  51)
* interval:                              Time Basics.         (line  20)
* interval timer, setting:               Setting an Alarm.    (line  10)
* INTR character:                        Signal Characters.   (line  11)
* invalid exception:                     FP Exceptions.       (line   6)
* inverse complex hyperbolic functions:  Hyperbolic Functions.
                                                              (line  72)
* inverse complex trigonometric functions: Inverse Trig Functions.
                                                              (line  60)
* inverse hyperbolic functions:          Hyperbolic Functions.
                                                              (line  51)
* inverse trigonometric functions:       Inverse Trig Functions.
                                                              (line   6)
* invocation of program:                 Program Arguments.   (line   6)
* IOCTLs:                                IOCTLs.              (line   6)
* ISO 10646:                             Extended Char Intro. (line  37)
* ISO 2022:                              Extended Char Intro. (line 179)
* ISO 6937:                              Extended Char Intro. (line 202)
* ISO C:                                 ISO C.               (line   6)
* ISO-2022-JP:                           glibc iconv Implementation.
                                                              (line  53)
* ISO/IEC 9945-1:                        POSIX.               (line   6)
* ISO/IEC 9945-2:                        POSIX.               (line   6)
* job:                                   Job Control.         (line   6)
* job control:                           Job Control.         (line   6)
* job control functions:                 Functions for Job Control.
                                                              (line   6)
* job control is optional:               Job Control is Optional.
                                                              (line   6)
* job control signals:                   Job Control Signals. (line   6)
* job control, enabling:                 Initializing the Shell.
                                                              (line   6)
* Kermit the frog:                       Search/Sort Example. (line 107)
* kernel call:                           System Calls.        (line  16)
* kernel header files:                   Linux.               (line   6)
* KILL character:                        Editing Characters.  (line  85)
* kill signal:                           Termination Signals. (line  70)
* killing a process:                     Signaling Another Process.
                                                              (line   6)
* Korn Shell:                            Wildcard Matching.   (line  71)
* LANG environment variable <1>:         Standard Environment.
                                                              (line  68)
* LANG environment variable:             The catgets Functions.
                                                              (line  97)
* launching jobs:                        Launching Jobs.      (line   6)
* LC_ALL environment variable <1>:       Standard Environment.
                                                              (line  74)
* LC_ALL environment variable:           The catgets Functions.
                                                              (line  97)
* LC_COLLATE environment variable:       Standard Environment.
                                                              (line  80)
* LC_CTYPE environment variable:         Standard Environment.
                                                              (line  83)
* LC_MESSAGES environment variable <1>:  Standard Environment.
                                                              (line  87)
* LC_MESSAGES environment variable:      The catgets Functions.
                                                              (line  97)
* LC_MONETARY environment variable:      Standard Environment.
                                                              (line  91)
* LC_NUMERIC environment variable:       Standard Environment.
                                                              (line  94)
* LC_TIME environment variable:          Standard Environment.
                                                              (line  97)
* leap second:                           Broken-down Time.    (line  28)
* length of string:                      Representation of Strings.
                                                              (line  56)
* level, for socket options:             Socket Options.      (line   9)
* library:                               Introduction.        (line   9)
* limit:                                 Limits on Resources. (line  12)
* limits on resource usage:              Limits on Resources. (line   6)
* limits, file name length:              Limits for Files.    (line  36)
* limits, floating types:                Floating Type Macros.
                                                              (line   6)
* limits, integer types:                 Range of Type.       (line   6)
* limits, link count of files:           Limits for Files.    (line  24)
* limits, number of open files:          General Limits.      (line  34)
* limits, number of processes:           General Limits.      (line  28)
* limits, number of supplementary group IDs: General Limits.  (line  50)
* limits, pipe buffer size:              Limits for Files.    (line  51)
* limits, POSIX:                         General Limits.      (line   6)
* limits, program argument size:         General Limits.      (line  24)
* limits, terminal input queue:          Limits for Files.    (line  28)
* limits, time zone name length:         General Limits.      (line  44)
* line buffered stream:                  Buffering Concepts.  (line  12)
* line speed:                            Line Speed.          (line   6)
* lines (in a text file):                Binary Streams.      (line  25)
* link:                                  Directories.         (line   9)
* link, hard:                            Hard Links.          (line   6)
* link, soft:                            Symbolic Links.      (line   6)
* link, symbolic:                        Symbolic Links.      (line   6)
* linked channels:                       Linked Channels.     (line   6)
* listening (sockets):                   Listening.           (line   6)
* literals:                              Memory Concepts.     (line  67)
* little-endian:                         Byte Order.          (line   6)
* LNEXT character:                       Other Special.       (line   7)
* load average:                          Processor Resources. (line  40)
* local namespace, for sockets:          Local Namespace.     (line   6)
* local network address number:          Abstract Host Addresses.
                                                              (line   9)
* local time:                            Calendar Time.       (line  26)
* locale categories:                     Locale Categories.   (line   6)
* locale, changing:                      Setting the Locale.  (line  18)
* locales:                               Locales.             (line  11)
* locking pages:                         Locking Pages.       (line   6)
* logarithm functions:                   Exponents and Logarithms.
                                                              (line   6)
* login name:                            User and Group IDs.  (line   6)
* login name, determining:               Who Logged In.       (line   6)
* LOGNAME environment variable:          Standard Environment.
                                                              (line  24)
* long jumps:                            Non-Local Exits.     (line   6)
* long-named options:                    Argument Syntax.     (line  50)
* longjmp:                               Advantages of Alloca.
                                                              (line  15)
* loss of data on sockets:               Socket Concepts.     (line  17)
* lost resource signal:                  Operation Error Signals.
                                                              (line  27)
* lower-case character <1>:              Classification of Wide Characters.
                                                              (line 137)
* lower-case character:                  Classification of Characters.
                                                              (line  27)
* macros:                                Obstack Functions.   (line   6)
* main function:                         Program Arguments.   (line   6)
* malloc debugger:                       Allocation Debugging.
                                                              (line   6)
* malloc function:                       Unconstrained Allocation.
                                                              (line   6)
* mantissa (of floating point number):   Floating Point Concepts.
                                                              (line  35)
* matching failure, in scanf:            Formatted Input Basics.
                                                              (line  32)
* math errors:                           Errors in Math Functions.
                                                              (line   6)
* mathematical constants:                Mathematical Constants.
                                                              (line   6)
* maximum:                               Misc FP Arithmetic.  (line   6)
* maximum field width (scanf):           Input Conversion Syntax.
                                                              (line  50)
* maximum limit:                         Limits on Resources. (line  24)
* maximum possible integer:              Integers.            (line 102)
* measurements of floating types:        Floating Type Macros.
                                                              (line   6)
* memory allocation:                     Memory.              (line   6)
* memory lock:                           Locking Pages.       (line   6)
* memory mapped file:                    Memory Concepts.     (line  83)
* memory mapped I/O:                     Memory Concepts.     (line  83)
* memory page:                           Memory Subsystem.    (line  33)
* merging of signals:                    Merged Signals.      (line   6)
* MIN termios slot:                      Noncanonical Input.  (line  26)
* minimum:                               Misc FP Arithmetic.  (line   6)
* minimum field width (printf):          Output Conversion Syntax.
                                                              (line  67)
* minimum possible integer:              Integers.            (line 102)
* mixing descriptors and streams:        Stream/Descriptor Precautions.
                                                              (line   6)
* modem disconnect:                      Control Modes.       (line  33)
* modem status lines:                    Control Modes.       (line  21)
* monetary value formatting:             The Lame Way to Locale Data.
                                                              (line  13)
* multi-threaded application:            Streams and Threads. (line   6)
* multibyte character:                   Extended Char Intro. (line 156)
* multibyte character string:            Representation of Strings.
                                                              (line  11)
* multibyte string:                      Representation of Strings.
                                                              (line  67)
* multiple names for one file:           Hard Links.          (line   6)
* multiplexing input:                    Waiting for I/O.     (line   6)
* multiply-add:                          Misc FP Arithmetic.  (line   6)
* name of running program:               Error Messages.      (line  70)
* name of socket:                        Socket Addresses.    (line   6)
* Name Service Switch:                   Name Service Switch. (line   6)
* name space:                            Reserved Names.      (line   6)
* names of signals:                      Standard Signals.    (line   6)
* namespace (of socket):                 Socket Concepts.     (line  33)
* NaN <1>:                               FP Bit Twiddling.    (line  54)
* NaN:                                   Infinity and NaN.    (line   6)
* Netgroup:                              Netgroup Data.       (line   6)
* netgroup:                              NSS Basics.          (line  26)
* network byte order:                    Byte Order.          (line  11)
* network number:                        Abstract Host Addresses.
                                                              (line   9)
* network protocol:                      Socket Concepts.     (line  42)
* networks:                              NSS Basics.          (line  26)
* networks database:                     Networks Database.   (line   6)
* NIS:                                   Host Identification. (line  38)
* NIS domain name:                       Host Identification. (line  38)
* nisplus, and booting:                  Actions in the NSS configuration.
                                                              (line  72)
* nisplus, and completeness:             Actions in the NSS configuration.
                                                              (line  65)
* NLSPATH environment variable <1>:      Standard Environment.
                                                              (line 100)
* NLSPATH environment variable:          The catgets Functions.
                                                              (line  29)
* non-blocking open:                     Open-time Flags.     (line  30)
* non-local exit, from signal handler:   Longjmp in Handler.  (line   6)
* non-local exits:                       Non-Local Exits.     (line   6)
* noncanonical input processing:         Canonical or Not.    (line  26)
* normalization functions (floating-point): Normalization Functions.
                                                              (line   6)
* normalized floating point number:      Floating Point Concepts.
                                                              (line  59)
* not a number:                          Infinity and NaN.    (line   6)
* NSS:                                   Name Service Switch. (line   6)
* nsswitch.conf:                         NSS Configuration File.
                                                              (line   6)
* null character:                        Representation of Strings.
                                                              (line  26)
* null pointer constant:                 Null Pointer Constant.
                                                              (line   6)
* null wide character:                   Representation of Strings.
                                                              (line  26)
* number of arguments passed:            How Many Arguments.  (line   6)
* number syntax, parsing:                Parsing of Numbers.  (line   6)
* numeric value formatting:              The Lame Way to Locale Data.
                                                              (line  13)
* obstack status:                        Status of an Obstack.
                                                              (line   6)
* obstacks:                              Obstacks.            (line   6)
* open-time action flags:                Open-time Flags.     (line  17)
* opening a file:                        I/O Concepts.        (line   9)
* opening a file descriptor:             Opening and Closing Files.
                                                              (line   6)
* opening a pipe:                        Creating a Pipe.     (line   6)
* opening a pseudo-terminal pair:        Pseudo-Terminal Pairs.
                                                              (line   6)
* opening a socket:                      Creating a Socket.   (line   6)
* opening a socket pair:                 Socket Pairs.        (line   6)
* opening a stream:                      Opening Streams.     (line   6)
* Optimization:                          FP Function Optimizations.
                                                              (line   6)
* optimizing NSS:                        Notes on NSS Configuration File.
                                                              (line  27)
* option parsing with argp:              Argp.                (line   6)
* optional arguments:                    Variadic Functions.  (line   6)
* optional POSIX features:               System Options.      (line   6)
* orientation, stream <1>:               Streams and I18N.    (line  38)
* orientation, stream:                   Opening Streams.     (line  95)
* orphaned process group:                Orphaned Process Groups.
                                                              (line   6)
* out-of-band data:                      Out-of-Band Data.    (line   6)
* output conversions, for printf:        Table of Output Conversions.
                                                              (line   6)
* output possible signal:                Asynchronous I/O Signals.
                                                              (line  13)
* overflow exception:                    FP Exceptions.       (line   6)
* owner of a file:                       File Owner.          (line   6)
* packet:                                Socket Concepts.     (line  12)
* page boundary:                         Aligned Memory Blocks.
                                                              (line   6)
* page fault:                            Memory Concepts.     (line  45)
* page fault, copy-on-write:             Locked Memory Details.
                                                              (line  40)
* page frame:                            Memory Concepts.     (line  18)
* page, memory:                          Memory Subsystem.    (line  33)
* page, virtual memory:                  Memory Concepts.     (line  18)
* paging <1>:                            Locking Pages.       (line   6)
* paging:                                Memory Concepts.     (line  45)
* parameter promotion:                   String/Array Conventions.
                                                              (line  41)
* parent directory:                      File Name Resolution.
                                                              (line  28)
* parent process <1>:                    Process Creation Concepts.
                                                              (line  15)
* parent process:                        Processes.           (line  13)
* parity checking:                       Input Modes.         (line  17)
* parsing a template string:             Parsing a Template String.
                                                              (line   6)
* parsing numbers (in formatted input):  Parsing of Numbers.  (line   6)
* parsing program arguments:             Parsing Program Arguments.
                                                              (line   6)
* parsing tokens from a string:          Finding Tokens in a String.
                                                              (line   6)
* passwd:                                NSS Basics.          (line  26)
* password database:                     User Database.       (line   6)
* PATH environment variable:             Standard Environment.
                                                              (line  33)
* pause function:                        Waiting for a Signal.
                                                              (line   6)
* peeking at input:                      Unreading.           (line   6)
* pending signals:                       Delivery of Signal.  (line   6)
* pending signals, checking for:         Checking for Pending Signals.
                                                              (line   6)
* period of time:                        Time Basics.         (line  33)
* permission to access a file:           Access Permission.   (line   6)
* persona:                               Process Persona.     (line   6)
* physical address:                      Memory Subsystem.    (line   6)
* physical memory:                       Memory Subsystem.    (line   6)
* pi (trigonometric constant):           Trig Functions.      (line  10)
* pipe:                                  Pipes and FIFOs.     (line   6)
* pipe signal:                           Operation Error Signals.
                                                              (line  13)
* pipe to a subprocess:                  Pipe to a Subprocess.
                                                              (line   6)
* port number:                           Ports.               (line   6)
* positioning a file descriptor:         File Position Primitive.
                                                              (line  15)
* positioning a stream:                  File Positioning.    (line   6)
* positive difference:                   Misc FP Arithmetic.  (line   6)
* POSIX:                                 POSIX.               (line   6)
* POSIX capacity limits:                 General Limits.      (line   6)
* POSIX optional features:               System Options.      (line   6)
* POSIX.1:                               POSIX.               (line   6)
* POSIX.2:                               POSIX.               (line   6)
* power functions:                       Exponents and Logarithms.
                                                              (line   6)
* precision (of floating point number):  Floating Point Concepts.
                                                              (line  38)
* precision (printf):                    Output Conversion Syntax.
                                                              (line  78)
* predicates on arrays:                  String/Array Comparison.
                                                              (line   6)
* predicates on characters:              Classification of Characters.
                                                              (line   6)
* predicates on strings:                 String/Array Comparison.
                                                              (line   6)
* preemptive scheduling:                 Absolute Priority.   (line  17)
* primitives, interrupting:              Interrupted Primitives.
                                                              (line  51)
* printing character <1>:                Classification of Wide Characters.
                                                              (line 147)
* printing character:                    Classification of Characters.
                                                              (line  95)
* priority of a process:                 Priority.            (line   6)
* priority, absolute:                    Absolute Priority.   (line   6)
* process <1>:                           Processes.           (line   6)
* process:                               Program Basics.      (line   6)
* process completion:                    Process Completion.  (line   6)
* process group functions:               Functions for Job Control.
                                                              (line   6)
* process group ID:                      Launching Jobs.      (line  23)
* process group leader:                  Launching Jobs.      (line  23)
* process groups:                        Job Control.         (line   6)
* process ID:                            Process Creation Concepts.
                                                              (line   9)
* process image:                         Process Creation Concepts.
                                                              (line  33)
* process lifetime:                      Process Creation Concepts.
                                                              (line   9)
* process priority:                      Priority.            (line   6)
* process signal mask:                   Process Signal Mask. (line   6)
* process termination:                   Program Termination. (line   6)
* processor time <1>:                    Processor Time.      (line   9)
* processor time:                        Time Basics.         (line  44)
* profiling alarm signal:                Alarm Signals.       (line  30)
* profiling timer:                       Setting an Alarm.    (line  22)
* program:                               Program Basics.      (line   6)
* program argument syntax:               Argument Syntax.     (line   6)
* program arguments:                     Program Arguments.   (line   6)
* program arguments, parsing:            Parsing Program Arguments.
                                                              (line   6)
* program error signals:                 Program Error Signals.
                                                              (line   6)
* program name:                          Error Messages.      (line  70)
* program startup:                       Program Arguments.   (line   6)
* program termination:                   Program Termination. (line   6)
* program termination signals:           Termination Signals. (line   6)
* programming your own streams:          Custom Streams.      (line   6)
* project complex numbers:               Operations on Complex.
                                                              (line   6)
* protocol (of socket):                  Socket Concepts.     (line  42)
* protocol family:                       Socket Concepts.     (line  42)
* protocols:                             NSS Basics.          (line  26)
* protocols database:                    Protocols Database.  (line   6)
* prototypes for variadic functions:     Variadic Prototypes. (line   6)
* pseudo-random numbers:                 Pseudo-Random Numbers.
                                                              (line   6)
* pseudo-terminals:                      Pseudo-Terminals.    (line   6)
* pthreads:                              POSIX Threads.       (line   6)
* punctuation character <1>:             Classification of Wide Characters.
                                                              (line 157)
* punctuation character:                 Classification of Characters.
                                                              (line  58)
* pushing input back:                    Unreading.           (line   6)
* quick sort function (for arrays):      Array Sort Function. (line   6)
* QUIT character:                        Signal Characters.   (line  22)
* quit signal:                           Termination Signals. (line  36)
* quote removal:                         Expansion Stages.    (line  32)
* race conditions, relating to job control: Launching Jobs.   (line  28)
* race conditions, relating to signals:  Signals in Handler.  (line   6)
* radix (of floating point number):      Floating Point Concepts.
                                                              (line  20)
* raising signals:                       Generating Signals.  (line   6)
* random numbers:                        Pseudo-Random Numbers.
                                                              (line   6)
* random-access files:                   File Position.       (line  22)
* range error:                           Math Error Reporting.
                                                              (line   6)
* range of integer type:                 Range of Type.       (line   6)
* read lock:                             File Locks.          (line  14)
* reading from a directory:              Accessing Directories.
                                                              (line   6)
* reading from a file descriptor:        I/O Primitives.      (line  15)
* reading from a socket:                 Transferring Data.   (line   6)
* reading from a stream, by blocks:      Block Input/Output.  (line   9)
* reading from a stream, by characters:  Character Input.     (line   6)
* reading from a stream, formatted:      Formatted Input.     (line   6)
* ready to run:                          Absolute Priority.   (line  17)
* real group ID:                         Process Persona.     (line  17)
* real user ID:                          Process Persona.     (line  17)
* real-time timer:                       Setting an Alarm.    (line  13)
* realtime CPU scheduling:               Absolute Priority.   (line   9)
* realtime processing:                   Why Lock Pages.      (line  14)
* realtime scheduling:                   Realtime Scheduling. (line   6)
* receiving datagrams:                   Receiving Datagrams. (line   6)
* record locking:                        File Locks.          (line   6)
* redirecting input and output:          Duplicating Descriptors.
                                                              (line   6)
* reentrant functions:                   Nonreentrancy.       (line  26)
* reentrant NSS functions:               NSS Module Names.    (line  21)
* relative file name:                    File Name Resolution.
                                                              (line  24)
* removal of quotes:                     Expansion Stages.    (line  32)
* removing a file:                       Deleting Files.      (line   6)
* removing macros that shadow functions: Macro Definitions.   (line   6)
* renaming a file:                       Renaming Files.      (line   8)
* reporting bugs:                        Reporting Bugs.      (line   6)
* reporting errors:                      Error Reporting.     (line   6)
* REPRINT character:                     Editing Characters.  (line  96)
* reserved names:                        Reserved Names.      (line   6)
* resource limits:                       Limits on Resources. (line   6)
* restarting interrupted primitives:     Interrupted Primitives.
                                                              (line  51)
* restrictions on signal handler functions: Nonreentrancy.    (line   6)
* root directory:                        File Name Resolution.
                                                              (line  19)
* Rot13:                                 Trivial Encryption.  (line  11)
* rpc:                                   NSS Basics.          (line  26)
* runnable process:                      Absolute Priority.   (line  25)
* running a command:                     Running a Command.   (line   6)
* saved set-group-ID:                    How Change Persona.  (line   6)
* saved set-user-ID:                     How Change Persona.  (line   6)
* scanning the group list:               Scanning All Groups. (line   6)
* scanning the user list:                Scanning All Users.  (line   6)
* scatter-gather:                        Scatter-Gather.      (line   6)
* scheduling, traditional:               Traditional Scheduling.
                                                              (line   6)
* search function (for arrays):          Array Search Function.
                                                              (line   6)
* search functions (for strings):        Search Functions.    (line   8)
* seed (for random numbers):             Pseudo-Random Numbers.
                                                              (line   6)
* seeking on a file descriptor:          File Position Primitive.
                                                              (line  15)
* seeking on a stream:                   File Positioning.    (line   6)
* segmentation violation:                Program Error Signals.
                                                              (line 108)
* sending a datagram:                    Sending Datagrams.   (line   6)
* sending signals:                       Generating Signals.  (line   6)
* sequential-access files:               File Position.       (line  14)
* server:                                Connections.         (line   6)
* services:                              NSS Basics.          (line  26)
* services database:                     Services Database.   (line   6)
* session <1>:                           Concepts of Job Control.
                                                              (line  25)
* session:                               Job Control.         (line   6)
* session leader:                        Concepts of Job Control.
                                                              (line  34)
* setting an alarm:                      Setting an Alarm.    (line  10)
* setuid programs:                       How Change Persona.  (line   6)
* setuid programs and file access:       Testing File Access. (line   6)
* severity class <1>:                    Adding Severity Classes.
                                                              (line   6)
* severity class:                        Printing Formatted Messages.
                                                              (line  93)
* sgettext:                              GUI program problems.
                                                              (line  59)
* shadow:                                NSS Basics.          (line  26)
* shadowing functions with macros:       Macro Definitions.   (line   6)
* shared lock:                           File Locks.          (line  14)
* shared memory:                         Memory Subsystem.    (line  13)
* shell:                                 Concepts of Job Control.
                                                              (line   6)
* shift state:                           Keeping the state.   (line  15)
* Shift_JIS:                             Extended Char Intro. (line 188)
* shrinking objects:                     Growing Objects.     (line  90)
* shutting down a socket:                Closing a Socket.    (line   6)
* sigaction flags:                       Flags for Sigaction. (line   6)
* sigaction function:                    Advanced Signal Handling.
                                                              (line   6)
* SIGCHLD, handling of:                  Stopped and Terminated Jobs.
                                                              (line  18)
* sign (of floating point number):       Floating Point Concepts.
                                                              (line  18)
* signal <1>:                            Signal Handling.     (line   6)
* signal:                                FP Exceptions.       (line   6)
* signal action:                         Delivery of Signal.  (line  13)
* signal actions:                        Signal Actions.      (line   6)
* signal flags:                          Flags for Sigaction. (line   6)
* signal function:                       Basic Signal Handling.
                                                              (line   6)
* signal handler function:               Defining Handlers.   (line   6)
* signal mask:                           Process Signal Mask. (line   6)
* signal messages:                       Signal Messages.     (line   6)
* signal names:                          Standard Signals.    (line   6)
* signal number:                         Standard Signals.    (line   6)
* signal set:                            Signal Sets.         (line   9)
* signals, generating:                   Generating Signals.  (line   6)
* signedness:                            Integers.            (line   9)
* significand (of floating point number): Floating Point Concepts.
                                                              (line  35)
* SIGTTIN, from background job:          Access to the Terminal.
                                                              (line  11)
* SIGTTOU, from background job:          Access to the Terminal.
                                                              (line  18)
* simple time:                           Calendar Time.       (line  13)
* single-byte string:                    Representation of Strings.
                                                              (line  67)
* size of string:                        Representation of Strings.
                                                              (line  56)
* SJIS:                                  Extended Char Intro. (line 188)
* socket:                                Sockets.             (line   9)
* socket address (name) binding:         Socket Addresses.    (line   6)
* socket domain:                         Socket Concepts.     (line  33)
* socket namespace:                      Socket Concepts.     (line  33)
* socket option level:                   Socket Options.      (line   9)
* socket options:                        Socket Options.      (line   6)
* socket pair:                           Socket Pairs.        (line   6)
* socket protocol:                       Socket Concepts.     (line  42)
* socket shutdown:                       Closing a Socket.    (line   6)
* socket, client actions:                Connecting.          (line   6)
* socket, closing:                       Closing a Socket.    (line   6)
* socket, connecting:                    Connecting.          (line   6)
* socket, creating:                      Creating a Socket.   (line   6)
* socket, initiating a connection:       Connecting.          (line   6)
* sockets, accepting connections:        Accepting Connections.
                                                              (line   6)
* sockets, listening:                    Listening.           (line   6)
* sockets, server actions:               Listening.           (line   6)
* soft limit:                            Limits on Resources. (line  17)
* soft link:                             Symbolic Links.      (line   6)
* sort function (for arrays):            Array Sort Function. (line   6)
* sparse files:                          File Position Primitive.
                                                              (line  60)
* special files:                         Making Special Files.
                                                              (line   6)
* special functions:                     Special Functions.   (line   6)
* specified action (for a signal):       Delivery of Signal.  (line  13)
* speed of execution:                    Why Lock Pages.      (line  14)
* square root function:                  Exponents and Logarithms.
                                                              (line 122)
* stable sorting:                        Array Sort Function. (line  21)
* standard dot notation, for Internet addresses: Abstract Host Addresses.
                                                              (line  48)
* standard environment variables:        Standard Environment.
                                                              (line   6)
* standard error file descriptor:        Descriptors and Streams.
                                                              (line  64)
* standard error stream:                 Standard Streams.    (line  24)
* standard file descriptors:             Descriptors and Streams.
                                                              (line  49)
* standard input file descriptor:        Descriptors and Streams.
                                                              (line  55)
* standard input stream:                 Standard Streams.    (line  16)
* standard output file descriptor:       Descriptors and Streams.
                                                              (line  59)
* standard output stream:                Standard Streams.    (line  20)
* standard streams:                      Standard Streams.    (line   6)
* standards:                             Standards and Portability.
                                                              (line   6)
* START character:                       Start/Stop Characters.
                                                              (line  11)
* startup of program:                    Program Arguments.   (line   6)
* stateful <1>:                          glibc iconv Implementation.
                                                              (line 594)
* stateful <2>:                          iconv Examples.      (line  96)
* stateful <3>:                          Generic Conversion Interface.
                                                              (line 110)
* stateful <4>:                          Converting Strings.  (line  65)
* stateful <5>:                          Converting a Character.
                                                              (line  81)
* stateful:                              Keeping the state.   (line   6)
* static memory allocation:              Memory Allocation and C.
                                                              (line  13)
* static storage class:                  Memory Allocation and C.
                                                              (line  13)
* STATUS character:                      Other Special.       (line  39)
* status codes:                          Error Reporting.     (line   6)
* status of a file:                      Attribute Meanings.  (line   6)
* status of obstack:                     Status of an Obstack.
                                                              (line   6)
* sticky bit:                            Permission Bits.     (line  71)
* STOP character:                        Start/Stop Characters.
                                                              (line  28)
* stop signal:                           Job Control Signals. (line  44)
* stopped job:                           Concepts of Job Control.
                                                              (line  55)
* stopped jobs, continuing:              Continuing Stopped Jobs.
                                                              (line   6)
* stopped jobs, detecting:               Stopped and Terminated Jobs.
                                                              (line   6)
* storage allocation:                    Memory.              (line   6)
* stream (sockets):                      Socket Concepts.     (line  12)
* stream orientation <1>:                Streams and I18N.    (line  38)
* stream orientation:                    Opening Streams.     (line  95)
* stream, for I/O to a string:           String Streams.      (line   6)
* streams and descriptors:               Stream/Descriptor Precautions.
                                                              (line   6)
* streams, and file descriptors:         Descriptors and Streams.
                                                              (line   6)
* streams, C++:                          Streams and I18N.    (line  30)
* streams, standard:                     Standard Streams.    (line   6)
* string:                                Representation of Strings.
                                                              (line  11)
* string allocation:                     Representation of Strings.
                                                              (line  56)
* string collation functions:            Collation Functions. (line   6)
* string comparison functions:           String/Array Comparison.
                                                              (line   6)
* string concatenation functions:        Copying and Concatenation.
                                                              (line  10)
* string copy functions:                 Copying and Concatenation.
                                                              (line  10)
* string length:                         Representation of Strings.
                                                              (line  56)
* string literal:                        Representation of Strings.
                                                              (line  35)
* string search functions:               Search Functions.    (line   8)
* string stream:                         String Streams.      (line   6)
* string vectors, null-character separated: Argz and Envz Vectors.
                                                              (line   6)
* string, representation of:             Representation of Strings.
                                                              (line   6)
* style of communication (of a socket):  Socket Concepts.     (line   6)
* subshell:                              Initializing the Shell.
                                                              (line   6)
* substitution of variables and commands: Expansion Stages.   (line  15)
* successive signals:                    Merged Signals.      (line   6)
* summer time:                           Broken-down Time.    (line  62)
* SunOS:                                 Berkeley Unix.       (line   6)
* supplementary group IDs:               Process Persona.     (line   6)
* SUSP character:                        Signal Characters.   (line  33)
* suspend character:                     Signal Characters.   (line  33)
* SVID:                                  SVID.                (line   6)
* swap space:                            Memory Concepts.     (line  18)
* symbolic link:                         Symbolic Links.      (line   6)
* symbolic link, opening:                Open-time Flags.     (line  68)
* synchronizing <1>:                     Synchronizing AIO Operations.
                                                              (line  17)
* synchronizing:                         Synchronizing I/O.   (line   6)
* syntax error messages, in argp:        Argp Helper Functions.
                                                              (line  16)
* syntax, for program arguments:         Argument Syntax.     (line   6)
* syntax, for reading numbers:           Parsing of Numbers.  (line   6)
* sysconf <1>:                           Processor Resources. (line  13)
* sysconf:                               Query Memory Parameters.
                                                              (line  43)
* system call:                           System Calls.        (line   6)
* system call number:                    System Calls.        (line  42)
* System V Unix:                         SVID.                (line   6)
* TCP (Internet protocol):               Protocols Database.  (line  12)
* template, for printf:                  Formatted Output.    (line   6)
* template, for scanf:                   Formatted Input.     (line   6)
* TERM environment variable:             Standard Environment.
                                                              (line  56)
* terminal flow control:                 Line Control.        (line  93)
* terminal identification:               Is It a Terminal.    (line   6)
* terminal input queue:                  I/O Queues.          (line  11)
* terminal input queue, clearing:        Line Control.        (line  59)
* terminal input signal:                 Job Control Signals. (line  65)
* terminal line control functions:       Line Control.        (line   6)
* terminal line speed:                   Line Speed.          (line   6)
* terminal mode data types:              Mode Data Types.     (line   6)
* terminal mode functions:               Mode Functions.      (line   6)
* terminal modes, BSD:                   BSD Terminal Modes.  (line   6)
* terminal output queue:                 I/O Queues.          (line  27)
* terminal output queue, flushing:       Line Control.        (line  34)
* terminal output signal:                Job Control Signals. (line  72)
* terminated jobs, detecting:            Stopped and Terminated Jobs.
                                                              (line   6)
* termination signal:                    Termination Signals. (line  22)
* testing access permission:             Testing File Access. (line   6)
* testing exit status of child process:  Process Completion.  (line   6)
* text stream:                           Binary Streams.      (line  13)
* thrashing:                             Memory Subsystem.    (line  31)
* thread of control:                     Program Basics.      (line   6)
* threads:                               Streams and Threads. (line   6)
* ticks, clock:                          Processor And CPU Time.
                                                              (line  19)
* tilde expansion:                       Expansion Stages.    (line   9)
* time:                                  Time Basics.         (line   6)
* TIME termios slot:                     Noncanonical Input.  (line  34)
* time zone:                             TZ Variable.         (line   9)
* time zone database:                    TZ Variable.         (line 118)
* time, elapsed:                         Time Basics.         (line  24)
* time, high precision:                  High Accuracy Clock. (line   6)
* timer, profiling:                      Setting an Alarm.    (line  22)
* timer, real-time:                      Setting an Alarm.    (line  13)
* timer, virtual:                        Setting an Alarm.    (line  17)
* timers, setting:                       Setting an Alarm.    (line  10)
* timespec:                              Elapsed Time.        (line  40)
* timeval:                               Elapsed Time.        (line  27)
* timing error in signal handling:       Remembering a Signal.
                                                              (line  72)
* TMPDIR environment variable:           Temporary Files.     (line 125)
* tokenizing strings:                    Finding Tokens in a String.
                                                              (line   6)
* tools, for installing library:         Tools for Compilation.
                                                              (line   6)
* transmitting datagrams:                Sending Datagrams.   (line   6)
* tree, directory:                       Working with Directory Trees.
                                                              (line   6)
* triangulation:                         glibc iconv Implementation.
                                                              (line  42)
* trigonometric functions:               Trig Functions.      (line   6)
* type measurements, floating:           Floating Type Macros.
                                                              (line   6)
* type measurements, integer:            Width of Type.       (line   6)
* type modifier character (printf):      Output Conversion Syntax.
                                                              (line  92)
* type modifier character (scanf):       Input Conversion Syntax.
                                                              (line  55)
* typeahead buffer:                      I/O Queues.          (line  11)
* TZ environment variable:               Standard Environment.
                                                              (line  64)
* UCS-2:                                 Extended Char Intro. (line  49)
* UCS-4:                                 Extended Char Intro. (line  49)
* ulps:                                  Errors in Math Functions.
                                                              (line   6)
* umask:                                 Setting Permissions. (line   6)
* unbuffered stream:                     Buffering Concepts.  (line   9)
* unconstrained memory allocation:       Unconstrained Allocation.
                                                              (line   6)
* undefining macros that shadow functions: Macro Definitions. (line   6)
* underflow exception:                   FP Exceptions.       (line   6)
* Unicode:                               Extended Char Intro. (line  37)
* Unix, Berkeley:                        Berkeley Unix.       (line   6)
* Unix, System V:                        SVID.                (line   6)
* unlinking a file:                      Deleting Files.      (line   6)
* unordered comparison:                  FP Comparison Functions.
                                                              (line   6)
* unreading characters:                  Unreading.           (line   6)
* upper-case character <1>:              Classification of Wide Characters.
                                                              (line 196)
* upper-case character:                  Classification of Characters.
                                                              (line  31)
* urgent data signal:                    Asynchronous I/O Signals.
                                                              (line  24)
* urgent socket condition:               Out-of-Band Data.    (line  18)
* usage limits:                          Limits on Resources. (line   6)
* usage messages, in argp:               Argp Helper Functions.
                                                              (line  11)
* user accounting database:              User Accounting Database.
                                                              (line   6)
* user database:                         User Database.       (line   6)
* user ID:                               User and Group IDs.  (line   6)
* user ID, determining:                  Who Logged In.       (line   6)
* user name:                             User and Group IDs.  (line   6)
* user signals:                          Miscellaneous Signals.
                                                              (line  12)
* usual file name errors:                File Name Errors.    (line   6)
* UTF-16:                                Extended Char Intro. (line  49)
* UTF-7:                                 Extended Char Intro. (line 222)
* UTF-8:                                 Extended Char Intro. (line  49)
* va_copy:                               Copying and Concatenation.
                                                              (line 449)
* variable number of arguments:          Variadic Functions.  (line   6)
* variable substitution:                 Expansion Stages.    (line  15)
* variable-sized arrays:                 GNU C Variable-Size Arrays.
                                                              (line   6)
* variadic function argument access:     Receiving Arguments. (line   6)
* variadic function prototypes:          Variadic Prototypes. (line   6)
* variadic functions:                    Variadic Functions.  (line   6)
* variadic functions, calling:           Calling Variadics.   (line   6)
* virtual time alarm signal:             Alarm Signals.       (line  24)
* virtual timer:                         Setting an Alarm.    (line  17)
* volatile declarations:                 Nonreentrancy.       (line  20)
* waiting for a signal:                  Waiting for a Signal.
                                                              (line   6)
* waiting for completion of child process: Process Completion.
                                                              (line   6)
* waiting for input or output:           Waiting for I/O.     (line   6)
* WERASE character:                      Editing Characters.  (line  61)
* whitespace character <1>:              Classification of Wide Characters.
                                                              (line 167)
* whitespace character:                  Classification of Characters.
                                                              (line  62)
* wide character:                        Extended Char Intro. (line  31)
* wide character string:                 Representation of Strings.
                                                              (line  21)
* width of integer type:                 Width of Type.       (line   6)
* wildcard expansion:                    Expansion Stages.    (line  27)
* wint_t:                                String/Array Conventions.
                                                              (line  41)
* word expansion:                        Word Expansion.      (line   6)
* working directory:                     Working Directory.   (line   6)
* write lock:                            File Locks.          (line  10)
* writing to a file descriptor:          I/O Primitives.      (line 155)
* writing to a socket:                   Transferring Data.   (line   6)
* writing to a stream, by blocks:        Block Input/Output.  (line   9)
* writing to a stream, by characters:    Simple Output.       (line   6)
* writing to a stream, formatted:        Formatted Output.    (line   6)
* YP:                                    Host Identification. (line  38)
* YP domain name:                        Host Identification. (line  38)
* zero divide:                           FP Exceptions.       (line   6)


File: libc.info,  Node: Type Index,  Next: Function Index,  Prev: Concept Index,  Up: Top

Type Index
**********

 [index ]
* Menu:

* __ftw64_func_t:                        Working with Directory Trees.
                                                              (line  65)
* __ftw_func_t:                          Working with Directory Trees.
                                                              (line  21)
* __nftw64_func_t:                       Working with Directory Trees.
                                                              (line  99)
* __nftw_func_t:                         Working with Directory Trees.
                                                              (line  73)
* blkcnt64_t:                            Attribute Meanings.  (line 225)
* blkcnt_t:                              Attribute Meanings.  (line 218)
* cc_t:                                  Mode Data Types.     (line  47)
* clock_t:                               CPU Time.            (line  39)
* comparison_fn_t:                       Comparison Functions.
                                                              (line  32)
* cookie_close_function:                 Hook Functions.      (line  60)
* cookie_io_functions_t:                 Streams and Cookies. (line  28)
* cookie_read_function:                  Hook Functions.      (line  49)
* cookie_seek_function:                  Hook Functions.      (line  57)
* cookie_write_function:                 Hook Functions.      (line  54)
* cpu_set_t:                             CPU Affinity.        (line  44)
* dev_t:                                 Attribute Meanings.  (line 210)
* DIR:                                   Opening a Directory. (line  10)
* div_t:                                 Integer Division.    (line  20)
* enum mcheck_status:                    Heap Consistency Checking.
                                                              (line  61)
* fd_set:                                Waiting for I/O.     (line  35)
* FILE:                                  Streams.             (line  17)
* fpos64_t:                              Portable Positioning.
                                                              (line  67)
* fpos_t:                                Portable Positioning.
                                                              (line  53)
* gid_t:                                 Reading Persona.     (line  16)
* glob64_t:                              Calling Glob.        (line  96)
* glob_t:                                Calling Glob.        (line  12)
* iconv_t:                               Generic Conversion Interface.
                                                              (line  16)
* imaxdiv_t:                             Integer Division.    (line  84)
* ino64_t:                               Attribute Meanings.  (line 202)
* ino_t:                                 Attribute Meanings.  (line 193)
* jmp_buf:                               Non-Local Details.   (line  11)
* ldiv_t:                                Integer Division.    (line  45)
* lldiv_t:                               Integer Division.    (line  63)
* mbstate_t:                             Keeping the state.   (line  15)
* mode_t:                                Attribute Meanings.  (line 188)
* nlink_t:                               Attribute Meanings.  (line 215)
* off64_t:                               File Position Primitive.
                                                              (line 155)
* off_t:                                 File Position Primitive.
                                                              (line 148)
* pid_t:                                 Process Identification.
                                                              (line  13)
* printf_arginfo_function:               Defining the Output Handler.
                                                              (line  55)
* printf_function:                       Defining the Output Handler.
                                                              (line  35)
* ptrdiff_t:                             Important Data Types.
                                                              (line  14)
* regex_t:                               POSIX Regexp Compilation.
                                                              (line  16)
* regmatch_t:                            Regexp Subexpressions.
                                                              (line  15)
* regoff_t:                              Regexp Subexpressions.
                                                              (line  26)
* sig_atomic_t:                          Atomic Types.        (line  17)
* sighandler_t:                          Basic Signal Handling.
                                                              (line  11)
* sigjmp_buf:                            Non-Local Exits and Signals.
                                                              (line  21)
* sigset_t:                              Signal Sets.         (line  14)
* size_t:                                Important Data Types.
                                                              (line  22)
* speed_t:                               Line Speed.          (line  57)
* ssize_t:                               I/O Primitives.      (line  11)
* stack_t:                               Signal Stack.        (line  27)
* struct __gconv_step:                   glibc iconv Implementation.
                                                              (line 206)
* struct __gconv_step_data:              glibc iconv Implementation.
                                                              (line 274)
* struct aiocb:                          Asynchronous I/O.    (line  28)
* struct aiocb64:                        Asynchronous I/O.    (line 111)
* struct aioinit:                        Configuration of AIO.
                                                              (line  18)
* struct argp:                           Argp Parsers.        (line  10)
* struct argp_child:                     Argp Children.       (line  18)
* struct argp_option:                    Argp Option Vectors. (line  14)
* struct argp_state:                     Argp Parsing State.  (line  11)
* struct dirent:                         Directory Entries.   (line  11)
* struct ENTRY:                          Hash Search Function.
                                                              (line  63)
* struct exit_status:                    Manipulating the Database.
                                                              (line  10)
* struct flock:                          File Locks.          (line  37)
* struct fstab:                          fstab.               (line  10)
* struct FTW:                            Working with Directory Trees.
                                                              (line 107)
* struct group:                          Group Data Structure.
                                                              (line  10)
* struct hostent:                        Host Names.          (line  21)
* struct if_nameindex:                   Interface Naming.    (line  37)
* struct in6_addr:                       Host Address Data Type.
                                                              (line  52)
* struct in_addr:                        Host Address Data Type.
                                                              (line  26)
* struct iovec:                          Scatter-Gather.      (line  21)
* struct itimerval:                      Setting an Alarm.    (line  54)
* struct lconv:                          The Lame Way to Locale Data.
                                                              (line  26)
* struct linger:                         Socket-Level Options.
                                                              (line  50)
* struct mallinfo:                       Statistics of Malloc.
                                                              (line  12)
* struct mntent:                         mtab.                (line   9)
* struct netent:                         Networks Database.   (line  14)
* struct ntptimeval:                     High Accuracy Clock. (line  17)
* struct obstack:                        Creating Obstacks.   (line  10)
* struct option:                         Getopt Long Options. (line  13)
* struct passwd:                         User Data Structure. (line  10)
* struct printf_info:                    Conversion Specifier Options.
                                                              (line  16)
* struct protoent:                       Protocols Database.  (line  30)
* struct random_data:                    BSD Random.          (line  68)
* struct rlimit:                         Limits on Resources. (line  79)
* struct rlimit64:                       Limits on Resources. (line  95)
* struct rusage:                         Resource Usage.      (line  34)
* struct sched_param:                    Basic Scheduling Functions.
                                                              (line  30)
* struct servent:                        Services Database.   (line  12)
* struct sgttyb:                         BSD Terminal Modes.  (line  16)
* struct sigaction:                      Advanced Signal Handling.
                                                              (line  15)
* struct sigstack:                       Signal Stack.        (line  97)
* struct sigvec:                         BSD Handler.         (line   7)
* struct sockaddr:                       Address Formats.     (line  24)
* struct sockaddr_in:                    Internet Address Formats.
                                                              (line  16)
* struct sockaddr_in6:                   Internet Address Formats.
                                                              (line  37)
* struct sockaddr_un:                    Local Namespace Details.
                                                              (line  25)
* struct stat:                           Attribute Meanings.  (line  15)
* struct stat64:                         Attribute Meanings.  (line 107)
* struct termios:                        Mode Data Types.     (line  11)
* struct timespec:                       Elapsed Time.        (line  40)
* struct timeval:                        Elapsed Time.        (line  27)
* struct timex:                          High Accuracy Clock. (line  51)
* struct timezone:                       High-Resolution Calendar.
                                                              (line  15)
* struct tm:                             Broken-down Time.    (line  20)
* struct tms:                            Processor Time.      (line  12)
* struct utimbuf:                        File Times.          (line  39)
* struct utmp:                           Manipulating the Database.
                                                              (line  21)
* struct utmpx:                          XPG Functions.       (line  10)
* struct utsname:                        Platform Type.       (line  16)
* struct vtimes:                         Resource Usage.      (line 114)
* tcflag_t:                              Mode Data Types.     (line  43)
* time_t:                                Simple Calendar Time.
                                                              (line  11)
* ucontext_t:                            System V contexts.   (line  24)
* uid_t:                                 Reading Persona.     (line  12)
* union wait:                            BSD Wait Functions.  (line  17)
* va_list:                               Argument Macros.     (line  10)
* VISIT:                                 Tree Search Function.
                                                              (line 102)
* wchar_t:                               Extended Char Intro. (line  65)
* wctrans_t:                             Wide Character Case Conversion.
                                                              (line  12)
* wctype_t:                              Classification of Wide Characters.
                                                              (line  30)
* wint_t:                                Extended Char Intro. (line  88)
* wordexp_t:                             Calling Wordexp.     (line  15)

