This is 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)CPU 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.
* 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.
* __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.
* fclean: (libc)Cleaning Streams.
* 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.
* 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.
* int: (libc)Random Access Directory.
* 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.
* 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.
* open_obstack_stream: (libc)Obstack 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.
* 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.
* 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.
* 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_end: (libc)Argument Macros.
* va_start: (libc)Argument Macros.
* va_start: (libc)Old Varargs.
* 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

   @set REPORT_BUGS_TO <https://support.codesourcery.com/GNUToolchain/>

   This file documents the GNU C library.

   This is Edition 0.12, last updated 2007-10-27, of `The GNU C Library
Reference Manual', for version 2.8 (Sourcery G++ Lite 2011.03-41).

   Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 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: Backtraces,  Up: Debugging Support

33.1 Backtraces
===============

A "backtrace" is a list of the function calls that are currently active
in a thread.  The usual way to inspect a backtrace of a program is to
use an external debugger such as gdb.  However, sometimes it is useful
to obtain a backtrace programmatically from within a program, e.g., for
the purposes of logging or diagnostics.

   The header file `execinfo.h' declares three functions that obtain
and manipulate backtraces of the current thread.  

 -- Function: int backtrace (void **BUFFER, int SIZE)
     The `backtrace' function obtains a backtrace for the current
     thread, as a list of pointers, and places the information into
     BUFFER.  The argument SIZE should be the number of `void *'
     elements that will fit into BUFFER.  The return value is the
     actual number of entries of BUFFER that are obtained, and is at
     most SIZE.

     The pointers placed in BUFFER are actually return addresses
     obtained by inspecting the stack, one return address per stack
     frame.

     Note that certain compiler optimizations may interfere with
     obtaining a valid backtrace.  Function inlining causes the inlined
     function to not have a stack frame; tail call optimization
     replaces one stack frame with another; frame pointer elimination
     will stop `backtrace' from interpreting the stack contents
     correctly.

 -- Function: char ** backtrace_symbols (void *const *BUFFER, int SIZE)
     The `backtrace_symbols' function translates the information
     obtained from the `backtrace' function into an array of strings.
     The argument BUFFER should be a pointer to an array of addresses
     obtained via the `backtrace' function, and SIZE is the number of
     entries in that array (the return value of `backtrace').

     The return value is a pointer to an array of strings, which has
     SIZE entries just like the array BUFFER.  Each string contains a
     printable representation of the corresponding element of BUFFER.
     It includes the function name (if this can be determined), an
     offset into the function, and the actual return address (in
     hexadecimal).

     Currently, the function name and offset only be obtained on
     systems that use the ELF binary format for programs and libraries.
     On other systems, only the hexadecimal return address will be
     present.  Also, you may need to pass additional flags to the
     linker to make the function names available to the program.  (For
     example, on systems using GNU ld, you must pass (`-rdynamic'.)

     The return value of `backtrace_symbols' is a pointer obtained via
     the `malloc' function, and it is the responsibility of the caller
     to `free' that pointer.  Note that only the return value need be
     freed, not the individual strings.

     The return value is `NULL' if sufficient memory for the strings
     cannot be obtained.

 -- Function: void backtrace_symbols_fd (void *const *BUFFER, int SIZE,
          int FD)
     The `backtrace_symbols_fd' function performs the same translation
     as the function `backtrace_symbols' function.  Instead of returning
     the strings to the caller, it writes the strings to the file
     descriptor FD, one per line.  It does not use the `malloc'
     function, and can therefore be used in situations where that
     function might fail.

   The following program illustrates the use of these functions.  Note
that the array to contain the return addresses returned by `backtrace'
is allocated on the stack.  Therefore code like this can be used in
situations where the memory handling via `malloc' does not work anymore
(in which case the `backtrace_symbols' has to be replaced by a
`backtrace_symbols_fd' call as well).  The number of return addresses
is normally not very large.  Even complicated programs rather seldom
have a nesting level of more than, say, 50 and with 200 possible
entries probably all programs should be covered.

     #include <execinfo.h>
     #include <stdio.h>
     #include <stdlib.h>

     /* Obtain a backtrace and print it to `stdout'. */
     void
     print_trace (void)
     {
       void *array[10];
       size_t size;
       char **strings;
       size_t i;

       size = backtrace (array, 10);
       strings = backtrace_symbols (array, size);

       printf ("Obtained %zd stack frames.\n", size);

       for (i = 0; i < size; i++)
          printf ("%s\n", strings[i]);

       free (strings);
     }

     /* A dummy function to make the backtrace more interesting. */
     void
     dummy_function (void)
     {
       print_trace ();
     }

     int
     main (void)
     {
       dummy_function ();
       return 0;
     }


File: libc.info,  Node: Language Features,  Next: Library Summary,  Prev: Debugging Support,  Up: Top

Appendix A C Language Facilities in the Library
***********************************************

Some of the facilities implemented by the C library really should be
thought of as parts of the C language itself.  These facilities ought to
be documented in the C Language Manual, not in the library manual; but
since we don't have the language manual yet, and documentation for these
features has been written, we are publishing it here.

* Menu:

* Consistency Checking::        Using `assert' to abort if
				 something ``impossible'' happens.
* Variadic Functions::          Defining functions with varying numbers
                                 of args.
* Null Pointer Constant::       The macro `NULL'.
* Important Data Types::        Data types for object sizes.
* Data Type Measurements::      Parameters of data type representations.


File: libc.info,  Node: Consistency Checking,  Next: Variadic Functions,  Up: Language Features

A.1 Explicitly Checking Internal Consistency
============================================

When you're writing a program, it's often a good idea to put in checks
at strategic places for "impossible" errors or violations of basic
assumptions.  These kinds of checks are helpful in debugging problems
with the interfaces between different parts of the program, for example.

   The `assert' macro, defined in the header file `assert.h', provides
a convenient way to abort the program while printing a message about
where in the program the error was detected.

   Once you think your program is debugged, you can disable the error
checks performed by the `assert' macro by recompiling with the macro
`NDEBUG' defined.  This means you don't actually have to change the
program source code to disable these checks.

   But disabling these consistency checks is undesirable unless they
make the program significantly slower.  All else being equal, more error
checking is good no matter who is running the program.  A wise user
would rather have a program crash, visibly, than have it return nonsense
without indicating anything might be wrong.

 -- Macro: void assert (int EXPRESSION)
     Verify the programmer's belief that EXPRESSION is nonzero at this
     point in the program.

     If `NDEBUG' is not defined, `assert' tests the value of
     EXPRESSION.  If it is false (zero), `assert' aborts the program
     (*note Aborting a Program::) after printing a message of the form:

          `FILE':LINENUM: FUNCTION: Assertion `EXPRESSION' failed.

     on the standard error stream `stderr' (*note Standard Streams::).
     The filename and line number are taken from the C preprocessor
     macros `__FILE__' and `__LINE__' and specify where the call to
     `assert' was made.  When using the GNU C compiler, the name of the
     function which calls `assert' is taken from the built-in variable
     `__PRETTY_FUNCTION__'; with older compilers, the function name and
     following colon are omitted.

     If the preprocessor macro `NDEBUG' is defined before `assert.h' is
     included, the `assert' macro is defined to do absolutely nothing.

     *Warning:* Even the argument expression EXPRESSION is not
     evaluated if `NDEBUG' is in effect.  So never use `assert' with
     arguments that involve side effects.  For example, `assert (++i >
     0);' is a bad idea, because `i' will not be incremented if
     `NDEBUG' is defined.

   Sometimes the "impossible" condition you want to check for is an
error return from an operating system function.  Then it is useful to
display not only where the program crashes, but also what error was
returned.  The `assert_perror' macro makes this easy.

 -- Macro: void assert_perror (int ERRNUM)
     Similar to `assert', but verifies that ERRNUM is zero.

     If `NDEBUG' is not defined, `assert_perror' tests the value of
     ERRNUM.  If it is nonzero, `assert_perror' aborts the program
     after printing a message of the form:

          `FILE':LINENUM: FUNCTION: ERROR TEXT

     on the standard error stream.  The file name, line number, and
     function name are as for `assert'.  The error text is the result of
     `strerror (ERRNUM)'.  *Note Error Messages::.

     Like `assert', if `NDEBUG' is defined before `assert.h' is
     included, the `assert_perror' macro does absolutely nothing.  It
     does not evaluate the argument, so ERRNUM should not have any side
     effects.  It is best for ERRNUM to be just a simple variable
     reference; often it will be `errno'.

     This macro is a GNU extension.

   *Usage note:* The `assert' facility is designed for detecting
_internal inconsistency_; it is not suitable for reporting invalid
input or improper usage by the _user_ of the program.

   The information in the diagnostic messages printed by the `assert'
and `assert_perror' macro is intended to help you, the programmer,
track down the cause of a bug, but is not really useful for telling a
user of your program why his or her input was invalid or why a command
could not be carried out.  What's more, your program should not abort
when given invalid input, as `assert' would do--it should exit with
nonzero status (*note Exit Status::) after printing its error messages,
or perhaps read another command or move on to the next input file.

   *Note Error Messages::, for information on printing error messages
for problems that _do not_ represent bugs in the program.


File: libc.info,  Node: Variadic Functions,  Next: Null Pointer Constant,  Prev: Consistency Checking,  Up: Language Features

A.2 Variadic Functions
======================

ISO C defines a syntax for declaring a function to take a variable
number or type of arguments.  (Such functions are referred to as
"varargs functions" or "variadic functions".)  However, the language
itself provides no mechanism for such functions to access their
non-required arguments; instead, you use the variable arguments macros
defined in `stdarg.h'.

   This section describes how to declare variadic functions, how to
write them, and how to call them properly.

   *Compatibility Note:* Many older C dialects provide a similar, but
incompatible, mechanism for defining functions with variable numbers of
arguments, using `varargs.h'.

* Menu:

* Why Variadic::                Reasons for making functions take
                                 variable arguments.
* How Variadic::                How to define and call variadic functions.
* Variadic Example::            A complete example.


File: libc.info,  Node: Why Variadic,  Next: How Variadic,  Up: Variadic Functions

A.2.1 Why Variadic Functions are Used
-------------------------------------

Ordinary C functions take a fixed number of arguments.  When you define
a function, you specify the data type for each argument.  Every call to
the function should supply the expected number of arguments, with types
that can be converted to the specified ones.  Thus, if the function
`foo' is declared with `int foo (int, char *);' then you must call it
with two arguments, a number (any kind will do) and a string pointer.

   But some functions perform operations that can meaningfully accept an
unlimited number of arguments.

   In some cases a function can handle any number of values by
operating on all of them as a block.  For example, consider a function
that allocates a one-dimensional array with `malloc' to hold a
specified set of values.  This operation makes sense for any number of
values, as long as the length of the array corresponds to that number.
Without facilities for variable arguments, you would have to define a
separate function for each possible array size.

   The library function `printf' (*note Formatted Output::) is an
example of another class of function where variable arguments are
useful.  This function prints its arguments (which can vary in type as
well as number) under the control of a format template string.

   These are good reasons to define a "variadic" function which can
handle as many arguments as the caller chooses to pass.

   Some functions such as `open' take a fixed set of arguments, but
occasionally ignore the last few.  Strict adherence to ISO C requires
these functions to be defined as variadic; in practice, however, the GNU
C compiler and most other C compilers let you define such a function to
take a fixed set of arguments--the most it can ever use--and then only
_declare_ the function as variadic (or not declare its arguments at
all!).


File: libc.info,  Node: How Variadic,  Next: Variadic Example,  Prev: Why Variadic,  Up: Variadic Functions

A.2.2 How Variadic Functions are Defined and Used
-------------------------------------------------

Defining and using a variadic function involves three steps:

   * _Define_ the function as variadic, using an ellipsis (`...') in
     the argument list, and using special macros to access the variable
     arguments.  *Note Receiving Arguments::.

   * _Declare_ the function as variadic, using a prototype with an
     ellipsis (`...'), in all the files which call it.  *Note Variadic
     Prototypes::.

   * _Call_ the function by writing the fixed arguments followed by the
     additional variable arguments.  *Note Calling Variadics::.

* Menu:

* Variadic Prototypes::  How to make a prototype for a function
			  with variable arguments.
* Receiving Arguments::  Steps you must follow to access the
			  optional argument values.
* How Many Arguments::   How to decide whether there are more arguments.
* Calling Variadics::    Things you need to know about calling
			  variable arguments functions.
* Argument Macros::      Detailed specification of the macros
        		  for accessing variable arguments.
* Old Varargs::		 The pre-ISO way of defining variadic functions.


File: libc.info,  Node: Variadic Prototypes,  Next: Receiving Arguments,  Up: How Variadic

A.2.2.1 Syntax for Variable Arguments
.....................................

A function that accepts a variable number of arguments must be declared
with a prototype that says so.   You write the fixed arguments as usual,
and then tack on `...' to indicate the possibility of additional
arguments.  The syntax of ISO C requires at least one fixed argument
before the `...'.  For example,

     int
     func (const char *a, int b, ...)
     {
       ...
     }

defines a function `func' which returns an `int' and takes two required
arguments, a `const char *' and an `int'.  These are followed by any
number of anonymous arguments.

   *Portability note:* For some C compilers, the last required argument
must not be declared `register' in the function definition.
Furthermore, this argument's type must be "self-promoting": that is,
the default promotions must not change its type.  This rules out array
and function types, as well as `float', `char' (whether signed or not)
and `short int' (whether signed or not).  This is actually an ISO C
requirement.


File: libc.info,  Node: Receiving Arguments,  Next: How Many Arguments,  Prev: Variadic Prototypes,  Up: How Variadic

A.2.2.2 Receiving the Argument Values
.....................................

Ordinary fixed arguments have individual names, and you can use these
names to access their values.  But optional arguments have no
names--nothing but `...'.  How can you access them?

   The only way to access them is sequentially, in the order they were
written, and you must use special macros from `stdarg.h' in the
following three step process:

  1. You initialize an argument pointer variable of type `va_list' using
     `va_start'.  The argument pointer when initialized points to the
     first optional argument.

  2. You access the optional arguments by successive calls to `va_arg'.
     The first call to `va_arg' gives you the first optional argument,
     the next call gives you the second, and so on.

     You can stop at any time if you wish to ignore any remaining
     optional arguments.  It is perfectly all right for a function to
     access fewer arguments than were supplied in the call, but you
     will get garbage values if you try to access too many arguments.

  3. You indicate that you are finished with the argument pointer
     variable by calling `va_end'.

     (In practice, with most C compilers, calling `va_end' does nothing.
     This is always true in the GNU C compiler.  But you might as well
     call `va_end' just in case your program is someday compiled with a
     peculiar compiler.)

   *Note Argument Macros::, for the full definitions of `va_start',
`va_arg' and `va_end'.

   Steps 1 and 3 must be performed in the function that accepts the
optional arguments.  However, you can pass the `va_list' variable as an
argument to another function and perform all or part of step 2 there.

   You can perform the entire sequence of three steps multiple times
within a single function invocation.  If you want to ignore the optional
arguments, you can do these steps zero times.

   You can have more than one argument pointer variable if you like.
You can initialize each variable with `va_start' when you wish, and
then you can fetch arguments with each argument pointer as you wish.
Each argument pointer variable will sequence through the same set of
argument values, but at its own pace.

   *Portability note:* With some compilers, once you pass an argument
pointer value to a subroutine, you must not keep using the same
argument pointer value after that subroutine returns.  For full
portability, you should just pass it to `va_end'.  This is actually an
ISO C requirement, but most ANSI C compilers work happily regardless.


File: libc.info,  Node: How Many Arguments,  Next: Calling Variadics,  Prev: Receiving Arguments,  Up: How Variadic

A.2.2.3 How Many Arguments Were Supplied
........................................

There is no general way for a function to determine the number and type
of the optional arguments it was called with.  So whoever designs the
function typically designs a convention for the caller to specify the
number and type of arguments.  It is up to you to define an appropriate
calling convention for each variadic function, and write all calls
accordingly.

   One kind of calling convention is to pass the number of optional
arguments as one of the fixed arguments.  This convention works provided
all of the optional arguments are of the same type.

   A similar alternative is to have one of the required arguments be a
bit mask, with a bit for each possible purpose for which an optional
argument might be supplied.  You would test the bits in a predefined
sequence; if the bit is set, fetch the value of the next argument,
otherwise use a default value.

   A required argument can be used as a pattern to specify both the
number and types of the optional arguments.  The format string argument
to `printf' is one example of this (*note Formatted Output Functions::).

   Another possibility is to pass an "end marker" value as the last
optional argument.  For example, for a function that manipulates an
arbitrary number of pointer arguments, a null pointer might indicate the
end of the argument list.  (This assumes that a null pointer isn't
otherwise meaningful to the function.)  The `execl' function works in
just this way; see *note Executing a File::.


File: libc.info,  Node: Calling Variadics,  Next: Argument Macros,  Prev: How Many Arguments,  Up: How Variadic

A.2.2.4 Calling Variadic Functions
..................................

You don't have to do anything special to call a variadic function.
Just put the arguments (required arguments, followed by optional ones)
inside parentheses, separated by commas, as usual.  But you must declare
the function with a prototype and know how the argument values are
converted.

   In principle, functions that are _defined_ to be variadic must also
be _declared_ to be variadic using a function prototype whenever you
call them.  (*Note Variadic Prototypes::, for how.)  This is because
some C compilers use a different calling convention to pass the same set
of argument values to a function depending on whether that function
takes variable arguments or fixed arguments.

   In practice, the GNU C compiler always passes a given set of argument
types in the same way regardless of whether they are optional or
required.  So, as long as the argument types are self-promoting, you can
safely omit declaring them.  Usually it is a good idea to declare the
argument types for variadic functions, and indeed for all functions.
But there are a few functions which it is extremely convenient not to
have to declare as variadic--for example, `open' and `printf'.

   Since the prototype doesn't specify types for optional arguments, in
a call to a variadic function the "default argument promotions" are
performed on the optional argument values.  This means the objects of
type `char' or `short int' (whether signed or not) are promoted to
either `int' or `unsigned int', as appropriate; and that objects of
type `float' are promoted to type `double'.  So, if the caller passes a
`char' as an optional argument, it is promoted to an `int', and the
function can access it with `va_arg (AP, int)'.

   Conversion of the required arguments is controlled by the function
prototype in the usual way: the argument expression is converted to the
declared argument type as if it were being assigned to a variable of
that type.


File: libc.info,  Node: Argument Macros,  Next: Old Varargs,  Prev: Calling Variadics,  Up: How Variadic

A.2.2.5 Argument Access Macros
..............................

Here are descriptions of the macros used to retrieve variable arguments.
These macros are defined in the header file `stdarg.h'.  

 -- Data Type: va_list
     The type `va_list' is used for argument pointer variables.

 -- Macro: void va_start (va_list AP, LAST-REQUIRED)
     This macro initializes the argument pointer variable AP to point
     to the first of the optional arguments of the current function;
     LAST-REQUIRED must be the last required argument to the function.

     *Note Old Varargs::, for an alternate definition of `va_start'
     found in the header file `varargs.h'.

 -- Macro: TYPE va_arg (va_list AP, TYPE)
     The `va_arg' macro returns the value of the next optional argument,
     and modifies the value of AP to point to the subsequent argument.
     Thus, successive uses of `va_arg' return successive optional
     arguments.

     The type of the value returned by `va_arg' is TYPE as specified in
     the call.  TYPE must be a self-promoting type (not `char' or
     `short int' or `float') that matches the type of the actual
     argument.

 -- Macro: void va_end (va_list AP)
     This ends the use of AP.  After a `va_end' call, further `va_arg'
     calls with the same AP may not work.  You should invoke `va_end'
     before returning from the function in which `va_start' was invoked
     with the same AP argument.

     In the GNU C library, `va_end' does nothing, and you need not ever
     use it except for reasons of portability.


   Sometimes it is necessary to parse the list of parameters more than
once or one wants to remember a certain position in the parameter list.
To do this, one will have to make a copy of the current value of the
argument.  But `va_list' is an opaque type and one cannot necessarily
assign the value of one variable of type `va_list' to another variable
of the same type.

 -- Macro: void __va_copy (va_list DEST, va_list SRC)
     The `__va_copy' macro allows copying of objects of type `va_list'
     even if this is not an integral type.  The argument pointer in
     DEST is initialized to point to the same argument as the pointer
     in SRC.

     This macro is a GNU extension but it will hopefully also be
     available in the next update of the ISO C standard.

   If you want to use `__va_copy' you should always be prepared for the
possibility that this macro will not be available.  On architectures
where a simple assignment is invalid, hopefully `__va_copy' _will_ be
available, so one should always write something like this:

     {
       va_list ap, save;
       ...
     #ifdef __va_copy
       __va_copy (save, ap);
     #else
       save = ap;
     #endif
       ...
     }


File: libc.info,  Node: Variadic Example,  Prev: How Variadic,  Up: Variadic Functions

A.2.3 Example of a Variadic Function
------------------------------------

Here is a complete sample function that accepts a variable number of
arguments.  The first argument to the function is the count of remaining
arguments, which are added up and the result returned.  While trivial,
this function is sufficient to illustrate how to use the variable
arguments facility.

     #include <stdarg.h>
     #include <stdio.h>

     int
     add_em_up (int count,...)
     {
       va_list ap;
       int i, sum;

       va_start (ap, count);         /* Initialize the argument list. */

       sum = 0;
       for (i = 0; i < count; i++)
         sum += va_arg (ap, int);    /* Get the next argument value. */

       va_end (ap);                  /* Clean up. */
       return sum;
     }

     int
     main (void)
     {
       /* This call prints 16. */
       printf ("%d\n", add_em_up (3, 5, 5, 6));

       /* This call prints 55. */
       printf ("%d\n", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

       return 0;
     }


File: libc.info,  Node: Old Varargs,  Prev: Argument Macros,  Up: How Variadic

A.2.3.1 Old-Style Variadic Functions
....................................

Before ISO C, programmers used a slightly different facility for
writing variadic functions.  The GNU C compiler still supports it;
currently, it is more portable than the ISO C facility, since support
for ISO C is still not universal.  The header file which defines the
old-fashioned variadic facility is called `varargs.h'.

   Using `varargs.h' is almost the same as using `stdarg.h'.  There is
no difference in how you call a variadic function; see *note Calling
Variadics::.  The only difference is in how you define them.  First of
all, you must use old-style non-prototype syntax, like this:

     tree
     build (va_alist)
          va_dcl
     {

   Secondly, you must give `va_start' only one argument, like this:

       va_list p;
       va_start (p);

   These are the special macros used for defining old-style variadic
functions:

 -- Macro: va_alist
     This macro stands for the argument name list required in a variadic
     function.

 -- Macro: va_dcl
     This macro declares the implicit argument or arguments for a
     variadic function.

 -- Macro: void va_start (va_list AP)
     This macro, as defined in `varargs.h', initializes the argument
     pointer variable AP to point to the first argument of the current
     function.

   The other argument macros, `va_arg' and `va_end', are the same in
`varargs.h' as in `stdarg.h'; see *note Argument Macros::, for details.

   It does not work to include both `varargs.h' and `stdarg.h' in the
same compilation; they define `va_start' in conflicting ways.


File: libc.info,  Node: Null Pointer Constant,  Next: Important Data Types,  Prev: Variadic Functions,  Up: Language Features

A.3 Null Pointer Constant
=========================

The null pointer constant is guaranteed not to point to any real object.
You can assign it to any pointer variable since it has type `void *'.
The preferred way to write a null pointer constant is with `NULL'.

 -- Macro: void * NULL
     This is a null pointer constant.

   You can also use `0' or `(void *)0' as a null pointer constant, but
using `NULL' is cleaner because it makes the purpose of the constant
more evident.

   If you use the null pointer constant as a function argument, then for
complete portability you should make sure that the function has a
prototype declaration.  Otherwise, if the target machine has two
different pointer representations, the compiler won't know which
representation to use for that argument.  You can avoid the problem by
explicitly casting the constant to the proper pointer type, but we
recommend instead adding a prototype for the function you are calling.


File: libc.info,  Node: Important Data Types,  Next: Data Type Measurements,  Prev: Null Pointer Constant,  Up: Language Features

A.4 Important Data Types
========================

The result of subtracting two pointers in C is always an integer, but
the precise data type varies from C compiler to C compiler.  Likewise,
the data type of the result of `sizeof' also varies between compilers.
ISO defines standard aliases for these two types, so you can refer to
them in a portable fashion.  They are defined in the header file
`stddef.h'.  

 -- Data Type: ptrdiff_t
     This is the signed integer type of the result of subtracting two
     pointers.  For example, with the declaration `char *p1, *p2;', the
     expression `p2 - p1' is of type `ptrdiff_t'.  This will probably
     be one of the standard signed integer types (`short int', `int' or
     `long int'), but might be a nonstandard type that exists only for
     this purpose.

 -- Data Type: size_t
     This is an unsigned integer type used to represent the sizes of
     objects.  The result of the `sizeof' operator is of this type, and
     functions such as `malloc' (*note Unconstrained Allocation::) and
     `memcpy' (*note Copying and Concatenation::) accept arguments of
     this type to specify object sizes.

     *Usage Note:* `size_t' is the preferred way to declare any
     arguments or variables that hold the size of an object.

   In the GNU system `size_t' is equivalent to either `unsigned int' or
`unsigned long int'.  These types have identical properties on the GNU
system and, for most purposes, you can use them interchangeably.
However, they are distinct as data types, which makes a difference in
certain contexts.

   For example, when you specify the type of a function argument in a
function prototype, it makes a difference which one you use.  If the
system header files declare `malloc' with an argument of type `size_t'
and you declare `malloc' with an argument of type `unsigned int', you
will get a compilation error if `size_t' happens to be `unsigned long
int' on your system.  To avoid any possibility of error, when a
function argument or value is supposed to have type `size_t', never
declare its type in any other way.

   *Compatibility Note:* Implementations of C before the advent of
ISO C generally used `unsigned int' for representing object sizes and
`int' for pointer subtraction results.  They did not necessarily define
either `size_t' or `ptrdiff_t'.  Unix systems did define `size_t', in
`sys/types.h', but the definition was usually a signed type.


File: libc.info,  Node: Data Type Measurements,  Prev: Important Data Types,  Up: Language Features

A.5 Data Type Measurements
==========================

Most of the time, if you choose the proper C data type for each object
in your program, you need not be concerned with just how it is
represented or how many bits it uses.  When you do need such
information, the C language itself does not provide a way to get it.
The header files `limits.h' and `float.h' contain macros which give you
this information in full detail.

* Menu:

* Width of Type::           How many bits does an integer type hold?
* Range of Type::           What are the largest and smallest values
			     that an integer type can hold?
* Floating Type Macros::    Parameters that measure the floating point types.
* Structure Measurement::   Getting measurements on structure types.


File: libc.info,  Node: Width of Type,  Next: Range of Type,  Up: Data Type Measurements

A.5.1 Computing the Width of an Integer Data Type
-------------------------------------------------

The most common reason that a program needs to know how many bits are in
an integer type is for using an array of `long int' as a bit vector.
You can access the bit at index N with

     vector[N / LONGBITS] & (1 << (N % LONGBITS))

provided you define `LONGBITS' as the number of bits in a `long int'.

   There is no operator in the C language that can give you the number
of bits in an integer data type.  But you can compute it from the macro
`CHAR_BIT', defined in the header file `limits.h'.

`CHAR_BIT'
     This is the number of bits in a `char'--eight, on most systems.
     The value has type `int'.

     You can compute the number of bits in any data type TYPE like this:

          sizeof (TYPE) * CHAR_BIT


File: libc.info,  Node: Range of Type,  Next: Floating Type Macros,  Prev: Width of Type,  Up: Data Type Measurements

A.5.2 Range of an Integer Type
------------------------------

Suppose you need to store an integer value which can range from zero to
one million.  Which is the smallest type you can use?  There is no
general rule; it depends on the C compiler and target machine.  You can
use the `MIN' and `MAX' macros in `limits.h' to determine which type
will work.

   Each signed integer type has a pair of macros which give the smallest
and largest values that it can hold.  Each unsigned integer type has one
such macro, for the maximum value; the minimum value is, of course,
zero.

   The values of these macros are all integer constant expressions.  The
`MAX' and `MIN' macros for `char' and `short int' types have values of
type `int'.  The `MAX' and `MIN' macros for the other types have values
of the same type described by the macro--thus, `ULONG_MAX' has type
`unsigned long int'.

`SCHAR_MIN'
     This is the minimum value that can be represented by a
     `signed char'.

`SCHAR_MAX'
`UCHAR_MAX'
     These are the maximum values that can be represented by a
     `signed char' and `unsigned char', respectively.

`CHAR_MIN'
     This is the minimum value that can be represented by a `char'.
     It's equal to `SCHAR_MIN' if `char' is signed, or zero otherwise.

`CHAR_MAX'
     This is the maximum value that can be represented by a `char'.
     It's equal to `SCHAR_MAX' if `char' is signed, or `UCHAR_MAX'
     otherwise.

`SHRT_MIN'
     This is the minimum value that can be represented by a
     `signed short int'.  On most machines that the GNU C library runs
     on, `short' integers are 16-bit quantities.

`SHRT_MAX'
`USHRT_MAX'
     These are the maximum values that can be represented by a
     `signed short int' and `unsigned short int', respectively.

`INT_MIN'
     This is the minimum value that can be represented by a
     `signed int'.  On most machines that the GNU C system runs on, an
     `int' is a 32-bit quantity.

`INT_MAX'
`UINT_MAX'
     These are the maximum values that can be represented by,
     respectively, the type `signed int' and the type `unsigned int'.

`LONG_MIN'
     This is the minimum value that can be represented by a
     `signed long int'.  On most machines that the GNU C system runs
     on, `long' integers are 32-bit quantities, the same size as `int'.

`LONG_MAX'
`ULONG_MAX'
     These are the maximum values that can be represented by a
     `signed long int' and `unsigned long int', respectively.

`LONG_LONG_MIN'
     This is the minimum value that can be represented by a
     `signed long long int'.  On most machines that the GNU C system
     runs on, `long long' integers are 64-bit quantities.

`LONG_LONG_MAX'
`ULONG_LONG_MAX'
     These are the maximum values that can be represented by a `signed
     long long int' and `unsigned long long int', respectively.

`WCHAR_MAX'
     This is the maximum value that can be represented by a `wchar_t'.
     *Note Extended Char Intro::.

   The header file `limits.h' also defines some additional constants
that parameterize various operating system and file system limits.
These constants are described in *note System Configuration::.


File: libc.info,  Node: Floating Type Macros,  Next: Structure Measurement,  Prev: Range of Type,  Up: Data Type Measurements

A.5.3 Floating Type Macros
--------------------------

The specific representation of floating point numbers varies from
machine to machine.  Because floating point numbers are represented
internally as approximate quantities, algorithms for manipulating
floating point data often need to take account of the precise details of
the machine's floating point representation.

   Some of the functions in the C library itself need this information;
for example, the algorithms for printing and reading floating point
numbers (*note I/O on Streams::) and for calculating trigonometric and
irrational functions (*note Mathematics::) use it to avoid round-off
error and loss of accuracy.  User programs that implement numerical
analysis techniques also often need this information in order to
minimize or compute error bounds.

   The header file `float.h' describes the format used by your machine.

* Menu:

* Floating Point Concepts::     Definitions of terminology.
* Floating Point Parameters::   Details of specific macros.
* IEEE Floating Point::         The measurements for one common
                                 representation.


File: libc.info,  Node: Floating Point Concepts,  Next: Floating Point Parameters,  Up: Floating Type Macros

A.5.3.1 Floating Point Representation Concepts
..............................................

This section introduces the terminology for describing floating point
representations.

   You are probably already familiar with most of these concepts in
terms of scientific or exponential notation for floating point numbers.
For example, the number `123456.0' could be expressed in exponential
notation as `1.23456e+05', a shorthand notation indicating that the
mantissa `1.23456' is multiplied by the base `10' raised to power `5'.

   More formally, the internal representation of a floating point number
can be characterized in terms of the following parameters:

   * The "sign" is either `-1' or `1'.

   * The "base" or "radix" for exponentiation, an integer greater than
     `1'.  This is a constant for a particular representation.

   * The "exponent" to which the base is raised.  The upper and lower
     bounds of the exponent value are constants for a particular
     representation.

     Sometimes, in the actual bits representing the floating point
     number, the exponent is "biased" by adding a constant to it, to
     make it always be represented as an unsigned quantity.  This is
     only important if you have some reason to pick apart the bit
     fields making up the floating point number by hand, which is
     something for which the GNU library provides no support.  So this
     is ignored in the discussion that follows.

   * The "mantissa" or "significand" is an unsigned integer which is a
     part of each floating point number.

   * The "precision" of the mantissa.  If the base of the representation
     is B, then the precision is the number of base-B digits in the
     mantissa.  This is a constant for a particular representation.

     Many floating point representations have an implicit "hidden bit"
     in the mantissa.  This is a bit which is present virtually in the
     mantissa, but not stored in memory because its value is always 1
     in a normalized number.  The precision figure (see above) includes
     any hidden bits.

     Again, the GNU library provides no facilities for dealing with such
     low-level aspects of the representation.

   The mantissa of a floating point number represents an implicit
fraction whose denominator is the base raised to the power of the
precision.  Since the largest representable mantissa is one less than
this denominator, the value of the fraction is always strictly less
than `1'.  The mathematical value of a floating point number is then
the product of this fraction, the sign, and the base raised to the
exponent.

   We say that the floating point number is "normalized" if the
fraction is at least `1/B', where B is the base.  In other words, the
mantissa would be too large to fit if it were multiplied by the base.
Non-normalized numbers are sometimes called "denormal"; they contain
less precision than the representation normally can hold.

   If the number is not normalized, then you can subtract `1' from the
exponent while multiplying the mantissa by the base, and get another
floating point number with the same value.  "Normalization" consists of
doing this repeatedly until the number is normalized.  Two distinct
normalized floating point numbers cannot be equal in value.

   (There is an exception to this rule: if the mantissa is zero, it is
considered normalized.  Another exception happens on certain machines
where the exponent is as small as the representation can hold.  Then it
is impossible to subtract `1' from the exponent, so a number may be
normalized even if its fraction is less than `1/B'.)


File: libc.info,  Node: Floating Point Parameters,  Next: IEEE Floating Point,  Prev: Floating Point Concepts,  Up: Floating Type Macros

A.5.3.2 Floating Point Parameters
.................................

These macro definitions can be accessed by including the header file
`float.h' in your program.

   Macro names starting with `FLT_' refer to the `float' type, while
names beginning with `DBL_' refer to the `double' type and names
beginning with `LDBL_' refer to the `long double' type.  (If GCC does
not support `long double' as a distinct data type on a target machine
then the values for the `LDBL_' constants are equal to the
corresponding constants for the `double' type.)

   Of these macros, only `FLT_RADIX' is guaranteed to be a constant
expression.  The other macros listed here cannot be reliably used in
places that require constant expressions, such as `#if' preprocessing
directives or in the dimensions of static arrays.

   Although the ISO C standard specifies minimum and maximum values for
most of these parameters, the GNU C implementation uses whatever values
describe the floating point representation of the target machine.  So in
principle GNU C actually satisfies the ISO C requirements only if the
target machine is suitable.  In practice, all the machines currently
supported are suitable.

`FLT_ROUNDS'
     This value characterizes the rounding mode for floating point
     addition.  The following values indicate standard rounding modes:

    `-1'
          The mode is indeterminable.

    `0'
          Rounding is towards zero.

    `1'
          Rounding is to the nearest number.

    `2'
          Rounding is towards positive infinity.

    `3'
          Rounding is towards negative infinity.

     Any other value represents a machine-dependent nonstandard rounding
     mode.

     On most machines, the value is `1', in accordance with the IEEE
     standard for floating point.

     Here is a table showing how certain values round for each possible
     value of `FLT_ROUNDS', if the other aspects of the representation
     match the IEEE single-precision standard.

                          0      1             2             3
           1.00000003    1.0    1.0           1.00000012    1.0
           1.00000007    1.0    1.00000012    1.00000012    1.0
          -1.00000003   -1.0   -1.0          -1.0          -1.00000012
          -1.00000007   -1.0   -1.00000012   -1.0          -1.00000012

`FLT_RADIX'
     This is the value of the base, or radix, of the exponent
     representation.  This is guaranteed to be a constant expression,
     unlike the other macros described in this section.  The value is 2
     on all machines we know of except the IBM 360 and derivatives.

`FLT_MANT_DIG'
     This is the number of base-`FLT_RADIX' digits in the floating point
     mantissa for the `float' data type.  The following expression
     yields `1.0' (even though mathematically it should not) due to the
     limited number of mantissa digits:

          float radix = FLT_RADIX;

          1.0f + 1.0f / radix / radix / ... / radix

     where `radix' appears `FLT_MANT_DIG' times.

`DBL_MANT_DIG'
`LDBL_MANT_DIG'
     This is the number of base-`FLT_RADIX' digits in the floating point
     mantissa for the data types `double' and `long double',
     respectively.

`FLT_DIG'
     This is the number of decimal digits of precision for the `float'
     data type.  Technically, if P and B are the precision and base
     (respectively) for the representation, then the decimal precision
     Q is the maximum number of decimal digits such that any floating
     point number with Q base 10 digits can be rounded to a floating
     point number with P base B digits and back again, without change
     to the Q decimal digits.

     The value of this macro is supposed to be at least `6', to satisfy
     ISO C.

`DBL_DIG'
`LDBL_DIG'
     These are similar to `FLT_DIG', but for the data types `double'
     and `long double', respectively.  The values of these macros are
     supposed to be at least `10'.

`FLT_MIN_EXP'
     This is the smallest possible exponent value for type `float'.
     More precisely, is the minimum negative integer such that the value
     `FLT_RADIX' raised to this power minus 1 can be represented as a
     normalized floating point number of type `float'.

`DBL_MIN_EXP'
`LDBL_MIN_EXP'
     These are similar to `FLT_MIN_EXP', but for the data types
     `double' and `long double', respectively.

`FLT_MIN_10_EXP'
     This is the minimum negative integer such that `10' raised to this
     power minus 1 can be represented as a normalized floating point
     number of type `float'.  This is supposed to be `-37' or even less.

`DBL_MIN_10_EXP'
`LDBL_MIN_10_EXP'
     These are similar to `FLT_MIN_10_EXP', but for the data types
     `double' and `long double', respectively.

`FLT_MAX_EXP'
     This is the largest possible exponent value for type `float'.  More
     precisely, this is the maximum positive integer such that value
     `FLT_RADIX' raised to this power minus 1 can be represented as a
     floating point number of type `float'.

`DBL_MAX_EXP'
`LDBL_MAX_EXP'
     These are similar to `FLT_MAX_EXP', but for the data types
     `double' and `long double', respectively.

`FLT_MAX_10_EXP'
     This is the maximum positive integer such that `10' raised to this
     power minus 1 can be represented as a normalized floating point
     number of type `float'.  This is supposed to be at least `37'.

`DBL_MAX_10_EXP'
`LDBL_MAX_10_EXP'
     These are similar to `FLT_MAX_10_EXP', but for the data types
     `double' and `long double', respectively.

`FLT_MAX'
     The value of this macro is the maximum number representable in type
     `float'.  It is supposed to be at least `1E+37'.  The value has
     type `float'.

     The smallest representable number is `- FLT_MAX'.

`DBL_MAX'
`LDBL_MAX'
     These are similar to `FLT_MAX', but for the data types `double'
     and `long double', respectively.  The type of the macro's value is
     the same as the type it describes.

`FLT_MIN'
     The value of this macro is the minimum normalized positive floating
     point number that is representable in type `float'.  It is supposed
     to be no more than `1E-37'.

`DBL_MIN'
`LDBL_MIN'
     These are similar to `FLT_MIN', but for the data types `double'
     and `long double', respectively.  The type of the macro's value is
     the same as the type it describes.

`FLT_EPSILON'
     This is the minimum positive floating point number of type `float'
     such that `1.0 + FLT_EPSILON != 1.0' is true.  It's supposed to be
     no greater than `1E-5'.

`DBL_EPSILON'
`LDBL_EPSILON'
     These are similar to `FLT_EPSILON', but for the data types
     `double' and `long double', respectively.  The type of the macro's
     value is the same as the type it describes.  The values are not
     supposed to be greater than `1E-9'.


File: libc.info,  Node: IEEE Floating Point,  Prev: Floating Point Parameters,  Up: Floating Type Macros

A.5.3.3 IEEE Floating Point
...........................

Here is an example showing how the floating type measurements come out
for the most common floating point representation, specified by the
`IEEE Standard for Binary Floating Point Arithmetic (ANSI/IEEE Std
754-1985)'.  Nearly all computers designed since the 1980s use this
format.

   The IEEE single-precision float representation uses a base of 2.
There is a sign bit, a mantissa with 23 bits plus one hidden bit (so
the total precision is 24 base-2 digits), and an 8-bit exponent that
can represent values in the range -125 to 128, inclusive.

   So, for an implementation that uses this representation for the
`float' data type, appropriate values for the corresponding parameters
are:

     FLT_RADIX                             2
     FLT_MANT_DIG                         24
     FLT_DIG                               6
     FLT_MIN_EXP                        -125
     FLT_MIN_10_EXP                      -37
     FLT_MAX_EXP                         128
     FLT_MAX_10_EXP                      +38
     FLT_MIN                 1.17549435E-38F
     FLT_MAX                 3.40282347E+38F
     FLT_EPSILON             1.19209290E-07F

   Here are the values for the `double' data type:

     DBL_MANT_DIG                         53
     DBL_DIG                              15
     DBL_MIN_EXP                       -1021
     DBL_MIN_10_EXP                     -307
     DBL_MAX_EXP                        1024
     DBL_MAX_10_EXP                      308
     DBL_MAX         1.7976931348623157E+308
     DBL_MIN         2.2250738585072014E-308
     DBL_EPSILON     2.2204460492503131E-016


File: libc.info,  Node: Structure Measurement,  Prev: Floating Type Macros,  Up: Data Type Measurements

A.5.4 Structure Field Offset Measurement
----------------------------------------

You can use `offsetof' to measure the location within a structure type
of a particular structure member.

 -- Macro: size_t offsetof (TYPE, MEMBER)
     This expands to a integer constant expression that is the offset
     of the structure member named MEMBER in the structure type TYPE.
     For example, `offsetof (struct s, elem)' is the offset, in bytes,
     of the member `elem' in a `struct s'.

     This macro won't work if MEMBER is a bit field; you get an error
     from the C compiler in that case.


File: libc.info,  Node: Library Summary,  Next: Installation,  Prev: Language Features,  Up: Top

Appendix B Summary of Library Facilities
****************************************

This appendix is a complete list of the facilities declared within the
header files supplied with the GNU C library.  Each entry also lists the
standard or other source from which each facility is derived, and tells
you where in the manual you can find more information about how to use
it.

`long int a64l (const char *STRING)'
     `stdlib.h' (XPG):  *note Encode Binary Data::.

`void abort (void)'
     `stdlib.h' (ISO):  *note Aborting a Program::.

`int abs (int NUMBER)'
     `stdlib.h' (ISO):  *note Absolute Value::.

`int accept (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH_PTR)'
     `sys/socket.h' (BSD):  *note Accepting Connections::.

`int access (const char *FILENAME, int HOW)'
     `unistd.h' (POSIX.1):  *note Testing File Access::.

`ACCOUNTING'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`double acos (double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`float acosf (float X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`double acosh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float acoshf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double acoshl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double acosl (long double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`int addmntent (FILE *STREAM, const struct mntent *MNT)'
     `mntent.h' (BSD):  *note mtab::.

`int adjtime (const struct timeval *DELTA, struct timeval *OLDDELTA)'
     `sys/time.h' (BSD):  *note High-Resolution Calendar::.

`int adjtimex (struct timex *TIMEX)'
     `sys/timex.h' (GNU):  *note High-Resolution Calendar::.

`AF_FILE'
     `sys/socket.h' (GNU):  *note Address Formats::.

`AF_INET'
     `sys/socket.h' (BSD):  *note Address Formats::.

`AF_INET6'
     `sys/socket.h' (IPv6 Basic API):  *note Address Formats::.

`AF_LOCAL'
     `sys/socket.h' (POSIX):  *note Address Formats::.

`AF_UNIX'
     `sys/socket.h' (BSD, Unix98):  *note Address Formats::.

`AF_UNSPEC'
     `sys/socket.h' (BSD):  *note Address Formats::.

`int aio_cancel (int FILDES, struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Cancel AIO Operations::.

`int aio_cancel64 (int FILDES, struct aiocb64 *AIOCBP)'
     `aio.h' (Unix98):  *note Cancel AIO Operations::.

`int aio_error (const struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Status of AIO Operations::.

`int aio_error64 (const struct aiocb64 *AIOCBP)'
     `aio.h' (Unix98):  *note Status of AIO Operations::.

`int aio_fsync (int OP, struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Synchronizing AIO Operations::.

`int aio_fsync64 (int OP, struct aiocb64 *AIOCBP)'
     `aio.h' (Unix98):  *note Synchronizing AIO Operations::.

`void aio_init (const struct aioinit *INIT)'
     `aio.h' (GNU):  *note Configuration of AIO::.

`int aio_read (struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Asynchronous Reads/Writes::.

`int aio_read64 (struct aiocb *AIOCBP)'
     `aio.h' (Unix98):  *note Asynchronous Reads/Writes::.

`ssize_t aio_return (const struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Status of AIO Operations::.

`int aio_return64 (const struct aiocb64 *AIOCBP)'
     `aio.h' (Unix98):  *note Status of AIO Operations::.

`int aio_suspend (const struct aiocb *const LIST[], int NENT, const struct timespec *TIMEOUT)'
     `aio.h' (POSIX.1b):  *note Synchronizing AIO Operations::.

`int aio_suspend64 (const struct aiocb64 *const LIST[], int NENT, const struct timespec *TIMEOUT)'
     `aio.h' (Unix98):  *note Synchronizing AIO Operations::.

`int aio_write (struct aiocb *AIOCBP)'
     `aio.h' (POSIX.1b):  *note Asynchronous Reads/Writes::.

`int aio_write64 (struct aiocb *AIOCBP)'
     `aio.h' (Unix98):  *note Asynchronous Reads/Writes::.

`unsigned int alarm (unsigned int SECONDS)'
     `unistd.h' (POSIX.1):  *note Setting an Alarm::.

`void * alloca (size_t SIZE);'
     `stdlib.h' (GNU, BSD):  *note Variable Size Automatic::.

`int alphasort (const void *A, const void *B)'
     `dirent.h' (BSD/SVID):  *note Scanning Directory Content::.

`int alphasort64 (const void *A, const void *B)'
     `dirent.h' (GNU):  *note Scanning Directory Content::.

`tcflag_t ALTWERASE'
     `termios.h' (BSD):  *note Local Modes::.

`int ARG_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`error_t argp_err_exit_status'
     `argp.h' (GNU):  *note Argp Global Variables::.

`void argp_error (const struct argp_state *STATE, const char *FMT, ...)'
     `argp.h' (GNU):  *note Argp Helper Functions::.

`int ARGP_ERR_UNKNOWN'
     `argp.h' (GNU):  *note Argp Parser Functions::.

`void argp_failure (const struct argp_state *STATE, int STATUS, int ERRNUM, const char *FMT, ...)'
     `argp.h' (GNU):  *note Argp Helper Functions::.

`void argp_help (const struct argp *ARGP, FILE *STREAM, unsigned FLAGS, char *NAME)'
     `argp.h' (GNU):  *note Argp Help::.

`ARGP_IN_ORDER'
     `argp.h' (GNU):  *note Argp Flags::.

`ARGP_KEY_ARG'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_ARGS'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_END'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_ERROR'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_FINI'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_HELP_ARGS_DOC'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_HELP_DUP_ARGS_NOTE'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_HELP_EXTRA'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_HELP_HEADER'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_HELP_POST_DOC'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_HELP_PRE_DOC'
     `argp.h' (GNU):  *note Argp Help Filter Keys::.

`ARGP_KEY_INIT'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_NO_ARGS'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_KEY_SUCCESS'
     `argp.h' (GNU):  *note Argp Special Keys::.

`ARGP_LONG_ONLY'
     `argp.h' (GNU):  *note Argp Flags::.

`ARGP_NO_ARGS'
     `argp.h' (GNU):  *note Argp Flags::.

`ARGP_NO_ERRS'
     `argp.h' (GNU):  *note Argp Flags::.

`ARGP_NO_EXIT'
     `argp.h' (GNU):  *note Argp Flags::.

`ARGP_NO_HELP'
     `argp.h' (GNU):  *note Argp Flags::.

`error_t argp_parse (const struct argp *ARGP, int ARGC, char **ARGV, unsigned FLAGS, int *ARG_INDEX, void *INPUT)'
     `argp.h' (GNU):  *note Suboptions: Argp.

`ARGP_PARSE_ARGV0'
     `argp.h' (GNU):  *note Argp Flags::.

`const char * argp_program_bug_address'
     `argp.h' (GNU):  *note Argp Global Variables::.

`const char * argp_program_version'
     `argp.h' (GNU):  *note Argp Global Variables::.

`argp_program_version_hook'
     `argp.h' (GNU):  *note Argp Global Variables::.

`ARGP_SILENT'
     `argp.h' (GNU):  *note Argp Flags::.

`void argp_state_help (const struct argp_state *STATE, FILE *STREAM, unsigned FLAGS)'
     `argp.h' (GNU):  *note Argp Helper Functions::.

`void argp_usage (const struct argp_state *STATE)'
     `argp.h' (GNU):  *note Argp Helper Functions::.

`error_t argz_add (char **ARGZ, size_t *ARGZ_LEN, const char *STR)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_add_sep (char **ARGZ, size_t *ARGZ_LEN, const char *STR, int DELIM)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_append (char **ARGZ, size_t *ARGZ_LEN, const char *BUF, size_t BUF_LEN)'
     `argz.h' (GNU):  *note Argz Functions::.

`size_t argz_count (const char *ARGZ, size_t ARG_LEN)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_create (char *const ARGV[], char **ARGZ, size_t *ARGZ_LEN)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_create_sep (const char *STRING, int SEP, char **ARGZ, size_t *ARGZ_LEN)'
     `argz.h' (GNU):  *note Argz Functions::.

`void argz_delete (char **ARGZ, size_t *ARGZ_LEN, char *ENTRY)'
     `argz.h' (GNU):  *note Argz Functions::.

`void argz_extract (char *ARGZ, size_t ARGZ_LEN, char **ARGV)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_insert (char **ARGZ, size_t *ARGZ_LEN, char *BEFORE, const char *ENTRY)'
     `argz.h' (GNU):  *note Argz Functions::.

`char * argz_next (char *ARGZ, size_t ARGZ_LEN, const char *ENTRY)'
     `argz.h' (GNU):  *note Argz Functions::.

`error_t argz_replace (char **ARGZ, size_t *ARGZ_LEN, const char *STR, const char *WITH, unsigned *REPLACE_COUNT)'
     `argz.h' (GNU):  *note Argz Functions::.

`void argz_stringify (char *ARGZ, size_t LEN, int SEP)'
     `argz.h' (GNU):  *note Argz Functions::.

`char * asctime (const struct tm *BROKENTIME)'
     `time.h' (ISO):  *note Formatting Calendar Time::.

`char * asctime_r (const struct tm *BROKENTIME, char *BUFFER)'
     `time.h' (POSIX.1c):  *note Formatting Calendar Time::.

`double asin (double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`float asinf (float X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`double asinh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float asinhf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double asinhl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double asinl (long double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`int asprintf (char **PTR, const char *TEMPLATE, ...)'
     `stdio.h' (GNU):  *note Dynamic Output::.

`void assert (int EXPRESSION)'
     `assert.h' (ISO):  *note Consistency Checking::.

`void assert_perror (int ERRNUM)'
     `assert.h' (GNU):  *note Consistency Checking::.

`double atan (double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`double atan2 (double Y, double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`float atan2f (float Y, float X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`long double atan2l (long double Y, long double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`float atanf (float X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`double atanh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float atanhf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double atanhl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double atanl (long double X)'
     `math.h' (ISO):  *note Inverse Trig Functions::.

`int atexit (void (*FUNCTION) (void))'
     `stdlib.h' (ISO):  *note Cleanups on Exit::.

`double atof (const char *STRING)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`int atoi (const char *STRING)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`long int atol (const char *STRING)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`long long int atoll (const char *STRING)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`B0'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B110'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B115200'
     `termios.h' (GNU):  *note Line Speed::.

`B1200'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B134'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B150'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B1800'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B19200'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B200'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B230400'
     `termios.h' (GNU):  *note Line Speed::.

`B2400'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B300'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B38400'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B460800'
     `termios.h' (GNU):  *note Line Speed::.

`B4800'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B50'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B57600'
     `termios.h' (GNU):  *note Line Speed::.

`B600'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B75'
     `termios.h' (POSIX.1):  *note Line Speed::.

`B9600'
     `termios.h' (POSIX.1):  *note Line Speed::.

`int backtrace (void **BUFFER, int SIZE)'
     `execinfo.h' (GNU):  *note Backtraces::.

`char ** backtrace_symbols (void *const *BUFFER, int SIZE)'
     `execinfo.h' (GNU):  *note Backtraces::.

`void backtrace_symbols_fd (void *const *BUFFER, int SIZE, int FD)'
     `execinfo.h' (GNU):  *note Backtraces::.

`char * basename (char *PATH)'
     `libgen.h' (XPG):  *note Finding Tokens in a String::.

`char * basename (const char *FILENAME)'
     `string.h' (GNU):  *note Finding Tokens in a String::.

`int BC_BASE_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`int BC_DIM_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`int bcmp (const void *A1, const void *A2, size_t SIZE)'
     `string.h' (BSD):  *note String/Array Comparison::.

`void bcopy (const void *FROM, void *TO, size_t SIZE)'
     `string.h' (BSD):  *note Copying and Concatenation::.

`int BC_SCALE_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`int BC_STRING_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`int bind (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)'
     `sys/socket.h' (BSD):  *note Setting Address::.

`char * bindtextdomain (const char *DOMAINNAME, const char *DIRNAME)'
     `libintl.h' (GNU):  *note Locating gettext catalog::.

`char * bind_textdomain_codeset (const char *DOMAINNAME, const char *CODESET)'
     `libintl.h' (GNU):  *note Charset conversion in gettext::.

`blkcnt64_t'
     `sys/types.h' (Unix98):  *note Attribute Meanings::.

`blkcnt_t'
     `sys/types.h' (Unix98):  *note Attribute Meanings::.

`BOOT_TIME'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`BOOT_TIME'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int brk (void *ADDR)'
     `unistd.h' (BSD):  *note Resizing the Data Segment::.

`tcflag_t BRKINT'
     `termios.h' (POSIX.1):  *note Input Modes::.

`_BSD_SOURCE'
     (GNU):  *note Feature Test Macros::.

`void * bsearch (const void *KEY, const void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)'
     `stdlib.h' (ISO):  *note Array Search Function::.

`wint_t btowc (int C)'
     `wchar.h' (ISO):  *note Converting a Character::.

`int BUFSIZ'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`void bzero (void *BLOCK, size_t SIZE)'
     `string.h' (BSD):  *note Copying and Concatenation::.

`double cabs (complex double Z)'
     `complex.h' (ISO):  *note Absolute Value::.

`float cabsf (complex float Z)'
     `complex.h' (ISO):  *note Absolute Value::.

`long double cabsl (complex long double Z)'
     `complex.h' (ISO):  *note Absolute Value::.

`complex double cacos (complex double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex float cacosf (complex float Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex double cacosh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float cacoshf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double cacoshl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double cacosl (complex long double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`void * calloc (size_t COUNT, size_t ELTSIZE)'
     `malloc.h', `stdlib.h' (ISO):  *note Allocating Cleared Space::.

`char * canonicalize_file_name (const char *NAME)'
     `stdlib.h' (GNU):  *note Symbolic Links::.

`double carg (complex double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`float cargf (complex float Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`long double cargl (complex long double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`complex double casin (complex double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex float casinf (complex float Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex double casinh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float casinhf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double casinhl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double casinl (complex long double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex double catan (complex double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex float catanf (complex float Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`complex double catanh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float catanhf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double catanhl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double catanl (complex long double Z)'
     `complex.h' (ISO):  *note Inverse Trig Functions::.

`nl_catd catopen (const char *CAT_NAME, int FLAG)'
     `nl_types.h' (X/Open):  *note The catgets Functions::.

`int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE, char *IVEC)'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`double cbrt (double X)'
     `math.h' (BSD):  *note Exponents and Logarithms::.

`float cbrtf (float X)'
     `math.h' (BSD):  *note Exponents and Logarithms::.

`long double cbrtl (long double X)'
     `math.h' (BSD):  *note Exponents and Logarithms::.

`complex double ccos (complex double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex float ccosf (complex float Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex double ccosh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float ccoshf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double ccoshl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double ccosl (complex long double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`cc_t'
     `termios.h' (POSIX.1):  *note Mode Data Types::.

`tcflag_t CCTS_OFLOW'
     `termios.h' (BSD):  *note Control Modes::.

`double ceil (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`float ceilf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double ceill (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`complex double cexp (complex double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex float cexpf (complex float Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex long double cexpl (complex long double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`speed_t cfgetispeed (const struct termios *TERMIOS-P)'
     `termios.h' (POSIX.1):  *note Line Speed::.

`speed_t cfgetospeed (const struct termios *TERMIOS-P)'
     `termios.h' (POSIX.1):  *note Line Speed::.

`void cfmakeraw (struct termios *TERMIOS-P)'
     `termios.h' (BSD):  *note Noncanonical Input::.

`void cfree (void *PTR)'
     `stdlib.h' (Sun):  *note Freeing after Malloc::.

`int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)'
     `termios.h' (POSIX.1):  *note Line Speed::.

`int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)'
     `termios.h' (POSIX.1):  *note Line Speed::.

`int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)'
     `termios.h' (BSD):  *note Line Speed::.

`CHAR_BIT'
     `limits.h' (ISO):  *note Width of Type::.

`CHAR_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`CHAR_MIN'
     `limits.h' (ISO):  *note Range of Type::.

`int chdir (const char *FILENAME)'
     `unistd.h' (POSIX.1):  *note Working Directory::.

`int CHILD_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`int chmod (const char *FILENAME, mode_t MODE)'
     `sys/stat.h' (POSIX.1):  *note Setting Permissions::.

`int chown (const char *FILENAME, uid_t OWNER, gid_t GROUP)'
     `unistd.h' (POSIX.1):  *note File Owner::.

`tcflag_t CIGNORE'
     `termios.h' (BSD):  *note Control Modes::.

`double cimag (complex double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`float cimagf (complex float Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`long double cimagl (complex long double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`int clearenv (void)'
     `stdlib.h' (GNU):  *note Environment Access::.

`void clearerr (FILE *STREAM)'
     `stdio.h' (ISO):  *note Error Recovery::.

`void clearerr_unlocked (FILE *STREAM)'
     `stdio.h' (GNU):  *note Error Recovery::.

`int CLK_TCK'
     `time.h' (POSIX.1):  *note CPU Time::.

`tcflag_t CLOCAL'
     `termios.h' (POSIX.1):  *note Control Modes::.

`clock_t clock (void)'
     `time.h' (ISO):  *note CPU Time::.

`int CLOCKS_PER_SEC'
     `time.h' (ISO):  *note CPU Time::.

`clock_t'
     `time.h' (ISO):  *note CPU Time::.

`complex double clog (complex double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex double clog10 (complex double Z)'
     `complex.h' (GNU):  *note Exponents and Logarithms::.

`complex float clog10f (complex float Z)'
     `complex.h' (GNU):  *note Exponents and Logarithms::.

`complex long double clog10l (complex long double Z)'
     `complex.h' (GNU):  *note Exponents and Logarithms::.

`complex float clogf (complex float Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex long double clogl (complex long double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`int close (int FILEDES)'
     `unistd.h' (POSIX.1):  *note Opening and Closing Files::.

`int closedir (DIR *DIRSTREAM)'
     `dirent.h' (POSIX.1):  *note Reading/Closing Directory::.

`void closelog (void)'
     `syslog.h' (BSD):  *note closelog::.

`int COLL_WEIGHTS_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`size_t confstr (int PARAMETER, char *BUF, size_t LEN)'
     `unistd.h' (POSIX.2):  *note String Parameters::.

`complex double conj (complex double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`complex float conjf (complex float Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`complex long double conjl (complex long double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`int connect (int SOCKET, struct sockaddr *ADDR, socklen_t LENGTH)'
     `sys/socket.h' (BSD):  *note Connecting::.

`cookie_close_function'
     `stdio.h' (GNU):  *note Hook Functions::.

`cookie_io_functions_t'
     `stdio.h' (GNU):  *note Streams and Cookies::.

`cookie_read_function'
     `stdio.h' (GNU):  *note Hook Functions::.

`cookie_seek_function'
     `stdio.h' (GNU):  *note Hook Functions::.

`cookie_write_function'
     `stdio.h' (GNU):  *note Hook Functions::.

`double copysign (double X, double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`float copysignf (float X, float Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`long double copysignl (long double X, long double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`double cos (double X)'
     `math.h' (ISO):  *note Trig Functions::.

`float cosf (float X)'
     `math.h' (ISO):  *note Trig Functions::.

`double cosh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float coshf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double coshl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double cosl (long double X)'
     `math.h' (ISO):  *note Trig Functions::.

`complex double cpow (complex double BASE, complex double POWER)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex float cpowf (complex float BASE, complex float POWER)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex long double cpowl (complex long double BASE, complex long double POWER)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex double cproj (complex double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`complex float cprojf (complex float Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`complex long double cprojl (complex long double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`void CPU_CLR (int CPU, cpu_set_t *SET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`int CPU_ISSET (int CPU, const cpu_set_t *SET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`void CPU_SET (int CPU, cpu_set_t *SET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`int CPU_SETSIZE'
     `sched.h' (GNU):  *note CPU Affinity::.

`cpu_set_t'
     `sched.h' (GNU):  *note CPU Affinity::.

`void CPU_ZERO (cpu_set_t *SET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`tcflag_t CREAD'
     `termios.h' (POSIX.1):  *note Control Modes::.

`double creal (complex double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`float crealf (complex float Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`long double creall (complex long double Z)'
     `complex.h' (ISO):  *note Operations on Complex::.

`int creat (const char *FILENAME, mode_t MODE)'
     `fcntl.h' (POSIX.1):  *note Opening and Closing Files::.

`int creat64 (const char *FILENAME, mode_t MODE)'
     `fcntl.h' (Unix98):  *note Opening and Closing Files::.

`tcflag_t CRTS_IFLOW'
     `termios.h' (BSD):  *note Control Modes::.

`char * crypt (const char *KEY, const char *SALT)'
     `crypt.h' (BSD, SVID):  *note crypt::.

`char * crypt_r (const char *KEY, const char *SALT, struct crypt_data * DATA)'
     `crypt.h' (GNU):  *note crypt::.

`tcflag_t CS5'
     `termios.h' (POSIX.1):  *note Control Modes::.

`tcflag_t CS6'
     `termios.h' (POSIX.1):  *note Control Modes::.

`tcflag_t CS7'
     `termios.h' (POSIX.1):  *note Control Modes::.

`tcflag_t CS8'
     `termios.h' (POSIX.1):  *note Control Modes::.

`complex double csin (complex double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex float csinf (complex float Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex double csinh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float csinhf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double csinhl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double csinl (complex long double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`tcflag_t CSIZE'
     `termios.h' (POSIX.1):  *note Control Modes::.

`_CS_LFS64_CFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS64_LDFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS64_LIBS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS64_LINTFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS_CFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS_LDFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS_LIBS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_LFS_LINTFLAGS'
     `unistd.h' (Unix98):  *note String Parameters::.

`_CS_PATH'
     `unistd.h' (POSIX.2):  *note String Parameters::.

`complex double csqrt (complex double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex float csqrtf (complex float Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`complex long double csqrtl (complex long double Z)'
     `complex.h' (ISO):  *note Exponents and Logarithms::.

`tcflag_t CSTOPB'
     `termios.h' (POSIX.1):  *note Control Modes::.

`complex double ctan (complex double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex float ctanf (complex float Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`complex double ctanh (complex double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex float ctanhf (complex float Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double ctanhl (complex long double Z)'
     `complex.h' (ISO):  *note Hyperbolic Functions::.

`complex long double ctanl (complex long double Z)'
     `complex.h' (ISO):  *note Trig Functions::.

`char * ctermid (char *STRING)'
     `stdio.h' (POSIX.1):  *note Identifying the Terminal::.

`char * ctime (const time_t *TIME)'
     `time.h' (ISO):  *note Formatting Calendar Time::.

`char * ctime_r (const time_t *TIME, char *BUFFER)'
     `time.h' (POSIX.1c):  *note Formatting Calendar Time::.

`char * cuserid (char *STRING)'
     `stdio.h' (POSIX.1):  *note Who Logged In::.

`int daylight'
     `time.h' (SVID):  *note Time Zone Functions::.

`DBL_DIG'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_EPSILON'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MANT_DIG'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MAX'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MAX_10_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MAX_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MIN'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MIN_10_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`DBL_MIN_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`char * dcgettext (const char *DOMAINNAME, const char *MSGID, int CATEGORY)'
     `libintl.h' (GNU):  *note Translation with gettext::.

`char * dcngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N, int CATEGORY)'
     `libintl.h' (GNU):  *note Advanced gettext functions::.

`DEAD_PROCESS'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`DEAD_PROCESS'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`DES_DECRYPT'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DES_ENCRYPT'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DESERR_BADPARAM'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DESERR_HWERROR'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DESERR_NOHWDEVICE'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DESERR_NONE'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`int DES_FAILED (int ERR)'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DES_HW'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`void des_setparity (char *KEY)'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`DES_SW'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`dev_t'
     `sys/types.h' (POSIX.1):  *note Attribute Meanings::.

`char * dgettext (const char *DOMAINNAME, const char *MSGID)'
     `libintl.h' (GNU):  *note Translation with gettext::.

`double difftime (time_t TIME1, time_t TIME0)'
     `time.h' (ISO):  *note Elapsed Time::.

`DIR'
     `dirent.h' (POSIX.1):  *note Opening a Directory::.

`int dirfd (DIR *DIRSTREAM)'
     `dirent.h' (GNU):  *note Opening a Directory::.

`char * dirname (char *PATH)'
     `libgen.h' (XPG):  *note Finding Tokens in a String::.

`div_t div (int NUMERATOR, int DENOMINATOR)'
     `stdlib.h' (ISO):  *note Integer Division::.

`div_t'
     `stdlib.h' (ISO):  *note Integer Division::.

`char * dngettext (const char *DOMAIN, const char *MSGID1, const char *MSGID2, unsigned long int N)'
     `libintl.h' (GNU):  *note Advanced gettext functions::.

`double drand48 (void)'
     `stdlib.h' (SVID):  *note SVID Random::.

`int drand48_r (struct drand48_data *BUFFER, double *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`double drem (double NUMERATOR, double DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`float dremf (float NUMERATOR, float DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`long double dreml (long double NUMERATOR, long double DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`mode_t DTTOIF (int DTYPE)'
     `dirent.h' (BSD):  *note Directory Entries::.

`int dup (int OLD)'
     `unistd.h' (POSIX.1):  *note Duplicating Descriptors::.

`int dup2 (int OLD, int NEW)'
     `unistd.h' (POSIX.1):  *note Duplicating Descriptors::.

`int E2BIG'
     `errno.h' (POSIX.1: Argument list too long):  *note Error Codes::.

`int EACCES'
     `errno.h' (POSIX.1: Permission denied):  *note Error Codes::.

`int EADDRINUSE'
     `errno.h' (BSD: Address already in use):  *note Error Codes::.

`int EADDRNOTAVAIL'
     `errno.h' (BSD: Cannot assign requested address):  *note Error
     Codes::.

`int EADV'
     `errno.h' (Linux???: Advertise error):  *note Error Codes::.

`int EAFNOSUPPORT'
     `errno.h' (BSD: Address family not supported by protocol):  *note
     Error Codes::.

`int EAGAIN'
     `errno.h' (POSIX.1: Resource temporarily unavailable):  *note
     Error Codes::.

`int EALREADY'
     `errno.h' (BSD: Operation already in progress):  *note Error
     Codes::.

`int EAUTH'
     `errno.h' (BSD: Authentication error):  *note Error Codes::.

`int EBACKGROUND'
     `errno.h' (GNU: Inappropriate operation for background process):
     *note Error Codes::.

`int EBADE'
     `errno.h' (Linux???: Invalid exchange):  *note Error Codes::.

`int EBADF'
     `errno.h' (POSIX.1: Bad file descriptor):  *note Error Codes::.

`int EBADFD'
     `errno.h' (Linux???: File descriptor in bad state):  *note Error
     Codes::.

`int EBADMSG'
     `errno.h' (XOPEN: Bad message):  *note Error Codes::.

`int EBADR'
     `errno.h' (Linux???: Invalid request descriptor):  *note Error
     Codes::.

`int EBADRPC'
     `errno.h' (BSD: RPC struct is bad):  *note Error Codes::.

`int EBADRQC'
     `errno.h' (Linux???: Invalid request code):  *note Error Codes::.

`int EBADSLT'
     `errno.h' (Linux???: Invalid slot):  *note Error Codes::.

`int EBFONT'
     `errno.h' (Linux???: Bad font file format):  *note Error Codes::.

`int EBUSY'
     `errno.h' (POSIX.1: Device or resource busy):  *note Error Codes::.

`int ECANCELED'
     `errno.h' (POSIX.1: Operation canceled):  *note Error Codes::.

`int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN, unsigned MODE)'
     `rpc/des_crypt.h' (SUNRPC):  *note DES Encryption::.

`int ECHILD'
     `errno.h' (POSIX.1: No child processes):  *note Error Codes::.

`tcflag_t ECHO'
     `termios.h' (POSIX.1):  *note Local Modes::.

`tcflag_t ECHOCTL'
     `termios.h' (BSD):  *note Local Modes::.

`tcflag_t ECHOE'
     `termios.h' (POSIX.1):  *note Local Modes::.

`tcflag_t ECHOK'
     `termios.h' (POSIX.1):  *note Local Modes::.

`tcflag_t ECHOKE'
     `termios.h' (BSD):  *note Local Modes::.

`tcflag_t ECHONL'
     `termios.h' (POSIX.1):  *note Local Modes::.

`tcflag_t ECHOPRT'
     `termios.h' (BSD):  *note Local Modes::.

`int ECHRNG'
     `errno.h' (Linux???: Channel number out of range):  *note Error
     Codes::.

`int ECOMM'
     `errno.h' (Linux???: Communication error on send):  *note Error
     Codes::.

`int ECONNABORTED'
     `errno.h' (BSD: Software caused connection abort):  *note Error
     Codes::.

`int ECONNREFUSED'
     `errno.h' (BSD: Connection refused):  *note Error Codes::.

`int ECONNRESET'
     `errno.h' (BSD: Connection reset by peer):  *note Error Codes::.

`char * ecvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)'
     `stdlib.h' (SVID, Unix98):  *note System V Number Conversion::.

`int ecvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`int ED'
     `errno.h' (GNU: ?):  *note Error Codes::.

`int EDEADLK'
     `errno.h' (POSIX.1: Resource deadlock avoided):  *note Error
     Codes::.

`int EDEADLOCK'
     `errno.h' (Linux???: File locking deadlock error):  *note Error
     Codes::.

`int EDESTADDRREQ'
     `errno.h' (BSD: Destination address required):  *note Error
     Codes::.

`int EDIED'
     `errno.h' (GNU: Translator died):  *note Error Codes::.

`int EDOM'
     `errno.h' (ISO: Numerical argument out of domain):  *note Error
     Codes::.

`int EDOTDOT'
     `errno.h' (Linux???: RFS specific error):  *note Error Codes::.

`int EDQUOT'
     `errno.h' (BSD: Disk quota exceeded):  *note Error Codes::.

`int EEXIST'
     `errno.h' (POSIX.1: File exists):  *note Error Codes::.

`int EFAULT'
     `errno.h' (POSIX.1: Bad address):  *note Error Codes::.

`int EFBIG'
     `errno.h' (POSIX.1: File too large):  *note Error Codes::.

`int EFTYPE'
     `errno.h' (BSD: Inappropriate file type or format):  *note Error
     Codes::.

`int EGRATUITOUS'
     `errno.h' (GNU: Gratuitous error):  *note Error Codes::.

`int EGREGIOUS'
     `errno.h' (GNU: You really blew it this time):  *note Error
     Codes::.

`int EHOSTDOWN'
     `errno.h' (BSD: Host is down):  *note Error Codes::.

`int EHOSTUNREACH'
     `errno.h' (BSD: No route to host):  *note Error Codes::.

`int EIDRM'
     `errno.h' (XOPEN: Identifier removed):  *note Error Codes::.

`int EIEIO'
     `errno.h' (GNU: Computer bought the farm):  *note Error Codes::.

`int EILSEQ'
     `errno.h' (ISO: Invalid or incomplete multibyte or wide
     character):  *note Error Codes::.

`int EINPROGRESS'
     `errno.h' (BSD: Operation now in progress):  *note Error Codes::.

`int EINTR'
     `errno.h' (POSIX.1: Interrupted system call):  *note Error Codes::.

`int EINVAL'
     `errno.h' (POSIX.1: Invalid argument):  *note Error Codes::.

`int EIO'
     `errno.h' (POSIX.1: Input/output error):  *note Error Codes::.

`int EISCONN'
     `errno.h' (BSD: Transport endpoint is already connected):  *note
     Error Codes::.

`int EISDIR'
     `errno.h' (POSIX.1: Is a directory):  *note Error Codes::.

`int EISNAM'
     `errno.h' (Linux???: Is a named type file):  *note Error Codes::.

`int EKEYEXPIRED'
     `errno.h' (Linux: Key has expired):  *note Error Codes::.

`int EKEYREJECTED'
     `errno.h' (Linux: Key was rejected by service):  *note Error
     Codes::.

`int EKEYREVOKED'
     `errno.h' (Linux: Key has been revoked):  *note Error Codes::.

`int EL2HLT'
     `errno.h' (Obsolete: Level 2 halted):  *note Error Codes::.

`int EL2NSYNC'
     `errno.h' (Obsolete: Level 2 not synchronized):  *note Error
     Codes::.

`int EL3HLT'
     `errno.h' (Obsolete: Level 3 halted):  *note Error Codes::.

`int EL3RST'
     `errno.h' (Obsolete: Level 3 reset):  *note Error Codes::.

`int ELIBACC'
     `errno.h' (Linux???: Can not access a needed shared library):
     *note Error Codes::.

`int ELIBBAD'
     `errno.h' (Linux???: Accessing a corrupted shared library):  *note
     Error Codes::.

`int ELIBEXEC'
     `errno.h' (Linux???: Cannot exec a shared library directly):
     *note Error Codes::.

`int ELIBMAX'
     `errno.h' (Linux???: Attempting to link in too many shared
     libraries):  *note Error Codes::.

`int ELIBSCN'
     `errno.h' (Linux???: .lib section in a.out corrupted):  *note
     Error Codes::.

`int ELNRNG'
     `errno.h' (Linux???: Link number out of range):  *note Error
     Codes::.

`int ELOOP'
     `errno.h' (BSD: Too many levels of symbolic links):  *note Error
     Codes::.

`int EMEDIUMTYPE'
     `errno.h' (Linux???: Wrong medium type):  *note Error Codes::.

`int EMFILE'
     `errno.h' (POSIX.1: Too many open files):  *note Error Codes::.

`int EMLINK'
     `errno.h' (POSIX.1: Too many links):  *note Error Codes::.

`EMPTY'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`EMPTY'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int EMSGSIZE'
     `errno.h' (BSD: Message too long):  *note Error Codes::.

`int EMULTIHOP'
     `errno.h' (XOPEN: Multihop attempted):  *note Error Codes::.

`int ENAMETOOLONG'
     `errno.h' (POSIX.1: File name too long):  *note Error Codes::.

`int ENAVAIL'
     `errno.h' (Linux???: No XENIX semaphores available):  *note Error
     Codes::.

`void encrypt (char *BLOCK, int EDFLAG)'
     `crypt.h' (BSD, SVID):  *note DES Encryption::.

`void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data * DATA)'
     `crypt.h' (GNU):  *note DES Encryption::.

`void endfsent (void)'
     `fstab.h' (BSD):  *note fstab::.

`void endgrent (void)'
     `grp.h' (SVID, BSD):  *note Scanning All Groups::.

`void endhostent (void)'
     `netdb.h' (BSD):  *note Host Names::.

`int endmntent (FILE *STREAM)'
     `mntent.h' (BSD):  *note mtab::.

`void endnetent (void)'
     `netdb.h' (BSD):  *note Networks Database::.

`void endnetgrent (void)'
     `netdb.h' (BSD):  *note Lookup Netgroup::.

`void endprotoent (void)'
     `netdb.h' (BSD):  *note Protocols Database::.

`void endpwent (void)'
     `pwd.h' (SVID, BSD):  *note Scanning All Users::.

`void endservent (void)'
     `netdb.h' (BSD):  *note Services Database::.

`void endutent (void)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`void endutxent (void)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int ENEEDAUTH'
     `errno.h' (BSD: Need authenticator):  *note Error Codes::.

`int ENETDOWN'
     `errno.h' (BSD: Network is down):  *note Error Codes::.

`int ENETRESET'
     `errno.h' (BSD: Network dropped connection on reset):  *note Error
     Codes::.

`int ENETUNREACH'
     `errno.h' (BSD: Network is unreachable):  *note Error Codes::.

`int ENFILE'
     `errno.h' (POSIX.1: Too many open files in system):  *note Error
     Codes::.

`int ENOANO'
     `errno.h' (Linux???: No anode):  *note Error Codes::.

`int ENOBUFS'
     `errno.h' (BSD: No buffer space available):  *note Error Codes::.

`int ENOCSI'
     `errno.h' (Linux???: No CSI structure available):  *note Error
     Codes::.

`int ENODATA'
     `errno.h' (XOPEN: No data available):  *note Error Codes::.

`int ENODEV'
     `errno.h' (POSIX.1: No such device):  *note Error Codes::.

`int ENOENT'
     `errno.h' (POSIX.1: No such file or directory):  *note Error
     Codes::.

`int ENOEXEC'
     `errno.h' (POSIX.1: Exec format error):  *note Error Codes::.

`int ENOKEY'
     `errno.h' (Linux: Required key not available):  *note Error
     Codes::.

`int ENOLCK'
     `errno.h' (POSIX.1: No locks available):  *note Error Codes::.

`int ENOLINK'
     `errno.h' (XOPEN: Link has been severed):  *note Error Codes::.

`int ENOMEDIUM'
     `errno.h' (Linux???: No medium found):  *note Error Codes::.

`int ENOMEM'
     `errno.h' (POSIX.1: Cannot allocate memory):  *note Error Codes::.

`int ENOMSG'
     `errno.h' (XOPEN: No message of desired type):  *note Error
     Codes::.

`int ENONET'
     `errno.h' (Linux???: Machine is not on the network):  *note Error
     Codes::.

`int ENOPKG'
     `errno.h' (Linux???: Package not installed):  *note Error Codes::.

`int ENOPROTOOPT'
     `errno.h' (BSD: Protocol not available):  *note Error Codes::.

`int ENOSPC'
     `errno.h' (POSIX.1: No space left on device):  *note Error Codes::.

`int ENOSR'
     `errno.h' (XOPEN: Out of streams resources):  *note Error Codes::.

`int ENOSTR'
     `errno.h' (XOPEN: Device not a stream):  *note Error Codes::.

`int ENOSYS'
     `errno.h' (POSIX.1: Function not implemented):  *note Error
     Codes::.

`int ENOTBLK'
     `errno.h' (BSD: Block device required):  *note Error Codes::.

`int ENOTCONN'
     `errno.h' (BSD: Transport endpoint is not connected):  *note Error
     Codes::.

`int ENOTDIR'
     `errno.h' (POSIX.1: Not a directory):  *note Error Codes::.

`int ENOTEMPTY'
     `errno.h' (POSIX.1: Directory not empty):  *note Error Codes::.

`int ENOTNAM'
     `errno.h' (Linux???: Not a XENIX named type file):  *note Error
     Codes::.

`int ENOTRECOVERABLE'
     `errno.h' (Linux: State not recoverable):  *note Error Codes::.

`int ENOTSOCK'
     `errno.h' (BSD: Socket operation on non-socket):  *note Error
     Codes::.

`int ENOTSUP'
     `errno.h' (POSIX.1: Not supported):  *note Error Codes::.

`int ENOTTY'
     `errno.h' (POSIX.1: Inappropriate ioctl for device):  *note Error
     Codes::.

`int ENOTUNIQ'
     `errno.h' (Linux???: Name not unique on network):  *note Error
     Codes::.

`char ** environ'
     `unistd.h' (POSIX.1):  *note Environment Access::.

`error_t envz_add (char **ENVZ, size_t *ENVZ_LEN, const char *NAME, const char *VALUE)'
     `envz.h' (GNU):  *note Envz Functions::.

`char * envz_entry (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)'
     `envz.h' (GNU):  *note Envz Functions::.

`char * envz_get (const char *ENVZ, size_t ENVZ_LEN, const char *NAME)'
     `envz.h' (GNU):  *note Envz Functions::.

`error_t envz_merge (char **ENVZ, size_t *ENVZ_LEN, const char *ENVZ2, size_t ENVZ2_LEN, int OVERRIDE)'
     `envz.h' (GNU):  *note Envz Functions::.

`void envz_strip (char **ENVZ, size_t *ENVZ_LEN)'
     `envz.h' (GNU):  *note Envz Functions::.

`int ENXIO'
     `errno.h' (POSIX.1: No such device or address):  *note Error
     Codes::.

`int EOF'
     `stdio.h' (ISO):  *note EOF and Errors::.

`int EOPNOTSUPP'
     `errno.h' (BSD: Operation not supported):  *note Error Codes::.

`int EOVERFLOW'
     `errno.h' (XOPEN: Value too large for defined data type):  *note
     Error Codes::.

`int EOWNERDEAD'
     `errno.h' (Linux: Owner died):  *note Error Codes::.

`int EPERM'
     `errno.h' (POSIX.1: Operation not permitted):  *note Error Codes::.

`int EPFNOSUPPORT'
     `errno.h' (BSD: Protocol family not supported):  *note Error
     Codes::.

`int EPIPE'
     `errno.h' (POSIX.1: Broken pipe):  *note Error Codes::.

`int EPROCLIM'
     `errno.h' (BSD: Too many processes):  *note Error Codes::.

`int EPROCUNAVAIL'
     `errno.h' (BSD: RPC bad procedure for program):  *note Error
     Codes::.

`int EPROGMISMATCH'
     `errno.h' (BSD: RPC program version wrong):  *note Error Codes::.

`int EPROGUNAVAIL'
     `errno.h' (BSD: RPC program not available):  *note Error Codes::.

`int EPROTO'
     `errno.h' (XOPEN: Protocol error):  *note Error Codes::.

`int EPROTONOSUPPORT'
     `errno.h' (BSD: Protocol not supported):  *note Error Codes::.

`int EPROTOTYPE'
     `errno.h' (BSD: Protocol wrong type for socket):  *note Error
     Codes::.

`int EQUIV_CLASS_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`double erand48 (unsigned short int XSUBI[3])'
     `stdlib.h' (SVID):  *note SVID Random::.

`int erand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, double *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`int ERANGE'
     `errno.h' (ISO: Numerical result out of range):  *note Error
     Codes::.

`int EREMCHG'
     `errno.h' (Linux???: Remote address changed):  *note Error Codes::.

`int EREMOTE'
     `errno.h' (BSD: Object is remote):  *note Error Codes::.

`int EREMOTEIO'
     `errno.h' (Linux???: Remote I/O error):  *note Error Codes::.

`int ERESTART'
     `errno.h' (Linux???: Interrupted system call should be restarted):
     *note Error Codes::.

`double erf (double X)'
     `math.h' (SVID):  *note Special Functions::.

`double erfc (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float erfcf (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double erfcl (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`float erff (float X)'
     `math.h' (SVID):  *note Special Functions::.

`int ERFKILL'
     `errno.h' (Linux: Operation not possible due to RF-kill):  *note
     Error Codes::.

`long double erfl (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`int EROFS'
     `errno.h' (POSIX.1: Read-only file system):  *note Error Codes::.

`int ERPCMISMATCH'
     `errno.h' (BSD: RPC version wrong):  *note Error Codes::.

`void err (int STATUS, const char *FORMAT, ...)'
     `err.h' (BSD):  *note Error Messages::.

`volatile int errno'
     `errno.h' (ISO):  *note Checking for Errors::.

`void error (int STATUS, int ERRNUM, const char *FORMAT, ...)'
     `error.h' (GNU):  *note Error Messages::.

`void error_at_line (int STATUS, int ERRNUM, const char *FNAME, unsigned int LINENO, const char *FORMAT, ...)'
     `error.h' (GNU):  *note Error Messages::.

`unsigned int error_message_count'
     `error.h' (GNU):  *note Error Messages::.

`int error_one_per_line'
     `error.h' (GNU):  *note Error Messages::.

`void errx (int STATUS, const char *FORMAT, ...)'
     `err.h' (BSD):  *note Error Messages::.

`int ESHUTDOWN'
     `errno.h' (BSD: Cannot send after transport endpoint shutdown):
     *note Error Codes::.

`int ESOCKTNOSUPPORT'
     `errno.h' (BSD: Socket type not supported):  *note Error Codes::.

`int ESPIPE'
     `errno.h' (POSIX.1: Illegal seek):  *note Error Codes::.

`int ESRCH'
     `errno.h' (POSIX.1: No such process):  *note Error Codes::.

`int ESRMNT'
     `errno.h' (Linux???: Srmount error):  *note Error Codes::.

`int ESTALE'
     `errno.h' (BSD: Stale NFS file handle):  *note Error Codes::.

`int ESTRPIPE'
     `errno.h' (Linux???: Streams pipe error):  *note Error Codes::.

`int ETIME'
     `errno.h' (XOPEN: Timer expired):  *note Error Codes::.

`int ETIMEDOUT'
     `errno.h' (BSD: Connection timed out):  *note Error Codes::.

`int ETOOMANYREFS'
     `errno.h' (BSD: Too many references: cannot splice):  *note Error
     Codes::.

`int ETXTBSY'
     `errno.h' (BSD: Text file busy):  *note Error Codes::.

`int EUCLEAN'
     `errno.h' (Linux???: Structure needs cleaning):  *note Error
     Codes::.

`int EUNATCH'
     `errno.h' (Linux???: Protocol driver not attached):  *note Error
     Codes::.

`int EUSERS'
     `errno.h' (BSD: Too many users):  *note Error Codes::.

`int EWOULDBLOCK'
     `errno.h' (BSD: Operation would block):  *note Error Codes::.

`int EXDEV'
     `errno.h' (POSIX.1: Invalid cross-device link):  *note Error
     Codes::.

`int execl (const char *FILENAME, const char *ARG0, ...)'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int execle (const char *FILENAME, const char *ARG0, char *const ENV[], ...)'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int execlp (const char *FILENAME, const char *ARG0, ...)'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int execv (const char *FILENAME, char *const ARGV[])'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int execve (const char *FILENAME, char *const ARGV[], char *const ENV[])'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int execvp (const char *FILENAME, char *const ARGV[])'
     `unistd.h' (POSIX.1):  *note Executing a File::.

`int EXFULL'
     `errno.h' (Linux???: Exchange full):  *note Error Codes::.

`void _Exit (int STATUS)'
     `stdlib.h' (ISO):  *note Termination Internals::.

`void _exit (int STATUS)'
     `unistd.h' (POSIX.1):  *note Termination Internals::.

`void exit (int STATUS)'
     `stdlib.h' (ISO):  *note Normal Termination::.

`int EXIT_FAILURE'
     `stdlib.h' (ISO):  *note Exit Status::.

`int EXIT_SUCCESS'
     `stdlib.h' (ISO):  *note Exit Status::.

`double exp (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double exp10 (double X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`float exp10f (float X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`long double exp10l (long double X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`double exp2 (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float exp2f (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double exp2l (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float expf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double expl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double expm1 (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float expm1f (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double expm1l (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`int EXPR_NEST_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`double fabs (double NUMBER)'
     `math.h' (ISO):  *note Absolute Value::.

`float fabsf (float NUMBER)'
     `math.h' (ISO):  *note Absolute Value::.

`long double fabsl (long double NUMBER)'
     `math.h' (ISO):  *note Absolute Value::.

`size_t __fbufsize (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Controlling Buffering::.

`int fchdir (int FILEDES)'
     `unistd.h' (XPG):  *note Working Directory::.

`int fchmod (int FILEDES, int MODE)'
     `sys/stat.h' (BSD):  *note Setting Permissions::.

`int fchown (int FILEDES, int OWNER, int GROUP)'
     `unistd.h' (BSD):  *note File Owner::.

`int fclean (FILE *STREAM)'
     `stdio.h' (GNU):  *note Cleaning Streams::.

`int fclose (FILE *STREAM)'
     `stdio.h' (ISO):  *note Closing Streams::.

`int fcloseall (void)'
     `stdio.h' (GNU):  *note Closing Streams::.

`int fcntl (int FILEDES, int COMMAND, ...)'
     `fcntl.h' (POSIX.1):  *note Control Operations::.

`char * fcvt (double VALUE, int NDIGIT, int *DECPT, int *NEG)'
     `stdlib.h' (SVID, Unix98):  *note System V Number Conversion::.

`int fcvt_r (double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
     `stdlib.h' (SVID, Unix98):  *note System V Number Conversion::.

`int fdatasync (int FILDES)'
     `unistd.h' (POSIX):  *note Synchronizing I/O::.

`int FD_CLOEXEC'
     `fcntl.h' (POSIX.1):  *note Descriptor Flags::.

`void FD_CLR (int FILEDES, fd_set *SET)'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`double fdim (double X, double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`float fdimf (float X, float Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`long double fdiml (long double X, long double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`int FD_ISSET (int FILEDES, const fd_set *SET)'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`FILE * fdopen (int FILEDES, const char *OPENTYPE)'
     `stdio.h' (POSIX.1):  *note Descriptors and Streams::.

`DIR * fdopendir (int FD)'
     `dirent.h' (GNU):  *note Opening a Directory::.

`void FD_SET (int FILEDES, fd_set *SET)'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`fd_set'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`int FD_SETSIZE'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`int F_DUPFD'
     `fcntl.h' (POSIX.1):  *note Duplicating Descriptors::.

`void FD_ZERO (fd_set *SET)'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`int feclearexcept (int EXCEPTS)'
     `fenv.h' (ISO):  *note Status bit operations::.

`int fedisableexcept (int EXCEPTS)'
     `fenv.h' (GNU):  *note Control Functions::.

`FE_DIVBYZERO'
     `fenv.h' (ISO):  *note Status bit operations::.

`FE_DOWNWARD'
     `fenv.h' (ISO):  *note Rounding::.

`int feenableexcept (int EXCEPTS)'
     `fenv.h' (GNU):  *note Control Functions::.

`int fegetenv (fenv_t *ENVP)'
     `fenv.h' (ISO):  *note Control Functions::.

`int fegetexcept (int EXCEPTS)'
     `fenv.h' (GNU):  *note Control Functions::.

`int fegetexceptflag (fexcept_t *FLAGP, int EXCEPTS)'
     `fenv.h' (ISO):  *note Status bit operations::.

`int fegetround (void)'
     `fenv.h' (ISO):  *note Rounding::.

`int feholdexcept (fenv_t *ENVP)'
     `fenv.h' (ISO):  *note Control Functions::.

`FE_INEXACT'
     `fenv.h' (ISO):  *note Status bit operations::.

`FE_INVALID'
     `fenv.h' (ISO):  *note Status bit operations::.

`int feof (FILE *STREAM)'
     `stdio.h' (ISO):  *note EOF and Errors::.

`int feof_unlocked (FILE *STREAM)'
     `stdio.h' (GNU):  *note EOF and Errors::.

`FE_OVERFLOW'
     `fenv.h' (ISO):  *note Status bit operations::.

`int feraiseexcept (int EXCEPTS)'
     `fenv.h' (ISO):  *note Status bit operations::.

`int ferror (FILE *STREAM)'
     `stdio.h' (ISO):  *note EOF and Errors::.

`int ferror_unlocked (FILE *STREAM)'
     `stdio.h' (GNU):  *note EOF and Errors::.

`int fesetenv (const fenv_t *ENVP)'
     `fenv.h' (ISO):  *note Control Functions::.

`int fesetexceptflag (const fexcept_t *FLAGP, int EXCEPTS)'
     `fenv.h' (ISO):  *note Status bit operations::.

`int fesetround (int ROUND)'
     `fenv.h' (ISO):  *note Rounding::.

`int fetestexcept (int EXCEPTS)'
     `fenv.h' (ISO):  *note Status bit operations::.

`FE_TONEAREST'
     `fenv.h' (ISO):  *note Rounding::.

`FE_TOWARDZERO'
     `fenv.h' (ISO):  *note Rounding::.

`FE_UNDERFLOW'
     `fenv.h' (ISO):  *note Status bit operations::.

`int feupdateenv (const fenv_t *ENVP)'
     `fenv.h' (ISO):  *note Control Functions::.

`FE_UPWARD'
     `fenv.h' (ISO):  *note Rounding::.

`int fflush (FILE *STREAM)'
     `stdio.h' (ISO):  *note Flushing Buffers::.

`int fflush_unlocked (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Flushing Buffers::.

`int fgetc (FILE *STREAM)'
     `stdio.h' (ISO):  *note Character Input::.

`int fgetc_unlocked (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Character Input::.

`int F_GETFD'
     `fcntl.h' (POSIX.1):  *note Descriptor Flags::.

`int F_GETFL'
     `fcntl.h' (POSIX.1):  *note Getting File Status Flags::.

`struct group * fgetgrent (FILE *STREAM)'
     `grp.h' (SVID):  *note Scanning All Groups::.

`int fgetgrent_r (FILE *STREAM, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
     `grp.h' (GNU):  *note Scanning All Groups::.

`int F_GETLK'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`int F_GETOWN'
     `fcntl.h' (BSD):  *note Interrupt Input::.

`int fgetpos (FILE *STREAM, fpos_t *POSITION)'
     `stdio.h' (ISO):  *note Portable Positioning::.

`int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)'
     `stdio.h' (Unix98):  *note Portable Positioning::.

`struct passwd * fgetpwent (FILE *STREAM)'
     `pwd.h' (SVID):  *note Scanning All Users::.

`int fgetpwent_r (FILE *STREAM, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
     `pwd.h' (GNU):  *note Scanning All Users::.

`char * fgets (char *S, int COUNT, FILE *STREAM)'
     `stdio.h' (ISO):  *note Line Input::.

`char * fgets_unlocked (char *S, int COUNT, FILE *STREAM)'
     `stdio.h' (GNU):  *note Line Input::.

`wint_t fgetwc (FILE *STREAM)'
     `wchar.h' (ISO):  *note Character Input::.

`wint_t fgetwc_unlocked (FILE *STREAM)'
     `wchar.h' (GNU):  *note Character Input::.

`wchar_t * fgetws (wchar_t *WS, int COUNT, FILE *STREAM)'
     `wchar.h' (ISO):  *note Line Input::.

`wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM)'
     `wchar.h' (GNU):  *note Line Input::.

`FILE'
     `stdio.h' (ISO):  *note Streams::.

`int FILENAME_MAX'
     `stdio.h' (ISO):  *note Limits for Files::.

`int fileno (FILE *STREAM)'
     `stdio.h' (POSIX.1):  *note Descriptors and Streams::.

`int fileno_unlocked (FILE *STREAM)'
     `stdio.h' (GNU):  *note Descriptors and Streams::.

`int finite (double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int finitef (float X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int finitel (long double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int __flbf (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Controlling Buffering::.

`void flockfile (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Streams and Threads::.

`double floor (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`float floorf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double floorl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`FLT_DIG'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_EPSILON'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MANT_DIG'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MAX'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MAX_10_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MAX_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MIN'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MIN_10_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_MIN_EXP'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_RADIX'
     `float.h' (ISO):  *note Floating Point Parameters::.

`FLT_ROUNDS'
     `float.h' (ISO):  *note Floating Point Parameters::.

`void _flushlbf (void)'
     `stdio_ext.h' (GNU):  *note Flushing Buffers::.

`tcflag_t FLUSHO'
     `termios.h' (BSD):  *note Local Modes::.

`double fma (double X, double Y, double Z)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`float fmaf (float X, float Y, float Z)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`long double fmal (long double X, long double Y, long double Z)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`double fmax (double X, double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`float fmaxf (float X, float Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`long double fmaxl (long double X, long double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`FILE * fmemopen (void *BUF, size_t SIZE, const char *OPENTYPE)'
     `stdio.h' (GNU):  *note String Streams::.

`double fmin (double X, double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`float fminf (float X, float Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`long double fminl (long double X, long double Y)'
     `math.h' (ISO):  *note Misc FP Arithmetic::.

`double fmod (double NUMERATOR, double DENOMINATOR)'
     `math.h' (ISO):  *note Remainder Functions::.

`float fmodf (float NUMERATOR, float DENOMINATOR)'
     `math.h' (ISO):  *note Remainder Functions::.

`long double fmodl (long double NUMERATOR, long double DENOMINATOR)'
     `math.h' (ISO):  *note Remainder Functions::.

`int fmtmsg (long int CLASSIFICATION, const char *LABEL, int SEVERITY, const char *TEXT, const char *ACTION, const char *TAG)'
     `fmtmsg.h' (XPG):  *note Printing Formatted Messages::.

`int fnmatch (const char *PATTERN, const char *STRING, int FLAGS)'
     `fnmatch.h' (POSIX.2):  *note Wildcard Matching::.

`FNM_CASEFOLD'
     `fnmatch.h' (GNU):  *note Wildcard Matching::.

`FNM_EXTMATCH'
     `fnmatch.h' (GNU):  *note Wildcard Matching::.

`FNM_FILE_NAME'
     `fnmatch.h' (GNU):  *note Wildcard Matching::.

`FNM_LEADING_DIR'
     `fnmatch.h' (GNU):  *note Wildcard Matching::.

`FNM_NOESCAPE'
     `fnmatch.h' (POSIX.2):  *note Wildcard Matching::.

`FNM_PATHNAME'
     `fnmatch.h' (POSIX.2):  *note Wildcard Matching::.

`FNM_PERIOD'
     `fnmatch.h' (POSIX.2):  *note Wildcard Matching::.

`int F_OK'
     `unistd.h' (POSIX.1):  *note Testing File Access::.

`FILE * fopen (const char *FILENAME, const char *OPENTYPE)'
     `stdio.h' (ISO):  *note Opening Streams::.

`FILE * fopen64 (const char *FILENAME, const char *OPENTYPE)'
     `stdio.h' (Unix98):  *note Opening Streams::.

`FILE * fopencookie (void *COOKIE, const char *OPENTYPE, cookie_io_functions_t IO-FUNCTIONS)'
     `stdio.h' (GNU):  *note Streams and Cookies::.

`int FOPEN_MAX'
     `stdio.h' (ISO):  *note Opening Streams::.

`pid_t fork (void)'
     `unistd.h' (POSIX.1):  *note Creating a Process::.

`int forkpty (int *AMASTER, char *NAME, const struct termios *TERMP, const struct winsize *WINP)'
     `pty.h' (BSD):  *note Pseudo-Terminal Pairs::.

`long int fpathconf (int FILEDES, int PARAMETER)'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`int fpclassify (_float-type_ X)'
     `math.h' (ISO):  *note Floating Point Classes::.

`FPE_DECOVF_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTDIV_FAULT'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTDIV_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTOVF_FAULT'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTOVF_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTUND_FAULT'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_FLTUND_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_INTDIV_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`FPE_INTOVF_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`size_t __fpending (FILE *STREAM) The `__fpending''
     `stdio_ext.h' (GNU):  *note Controlling Buffering::.

`FPE_SUBRNG_TRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`int FP_ILOGB0'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`int FP_ILOGBNAN'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`fpos64_t'
     `stdio.h' (Unix98):  *note Portable Positioning::.

`fpos_t'
     `stdio.h' (ISO):  *note Portable Positioning::.

`int fprintf (FILE *STREAM, const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Output Functions::.

`void __fpurge (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Flushing Buffers::.

`int fputc (int C, FILE *STREAM)'
     `stdio.h' (ISO):  *note Simple Output::.

`int fputc_unlocked (int C, FILE *STREAM)'
     `stdio.h' (POSIX):  *note Simple Output::.

`int fputs (const char *S, FILE *STREAM)'
     `stdio.h' (ISO):  *note Simple Output::.

`int fputs_unlocked (const char *S, FILE *STREAM)'
     `stdio.h' (GNU):  *note Simple Output::.

`wint_t fputwc (wchar_t WC, FILE *STREAM)'
     `wchar.h' (ISO):  *note Simple Output::.

`wint_t fputwc_unlocked (wint_t WC, FILE *STREAM)'
     `wchar.h' (POSIX):  *note Simple Output::.

`int fputws (const wchar_t *WS, FILE *STREAM)'
     `wchar.h' (ISO):  *note Simple Output::.

`int fputws_unlocked (const wchar_t *WS, FILE *STREAM)'
     `wchar.h' (GNU):  *note Simple Output::.

`F_RDLCK'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`size_t fread (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
     `stdio.h' (ISO):  *note Block Input/Output::.

`int __freadable (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Opening Streams::.

`int __freading (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Opening Streams::.

`size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
     `stdio.h' (GNU):  *note Block Input/Output::.

`void free (void *PTR)'
     `malloc.h', `stdlib.h' (ISO):  *note Freeing after Malloc::.

`__free_hook'
     `malloc.h' (GNU):  *note Hooks for Malloc::.

`FILE * freopen (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)'
     `stdio.h' (ISO):  *note Opening Streams::.

`FILE * freopen64 (const char *FILENAME, const char *OPENTYPE, FILE *STREAM)'
     `stdio.h' (Unix98):  *note Opening Streams::.

`double frexp (double VALUE, int *EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`float frexpf (float VALUE, int *EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`long double frexpl (long double VALUE, int *EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`int fscanf (FILE *STREAM, const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Input Functions::.

`int fseek (FILE *STREAM, long int OFFSET, int WHENCE)'
     `stdio.h' (ISO):  *note File Positioning::.

`int fseeko (FILE *STREAM, off_t OFFSET, int WHENCE)'
     `stdio.h' (Unix98):  *note File Positioning::.

`int fseeko64 (FILE *STREAM, off64_t OFFSET, int WHENCE)'
     `stdio.h' (Unix98):  *note File Positioning::.

`int F_SETFD'
     `fcntl.h' (POSIX.1):  *note Descriptor Flags::.

`int F_SETFL'
     `fcntl.h' (POSIX.1):  *note Getting File Status Flags::.

`int F_SETLK'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`int F_SETLKW'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`int __fsetlocking (FILE *STREAM, int TYPE)'
     `stdio_ext.h' (GNU):  *note Streams and Threads::.

`int F_SETOWN'
     `fcntl.h' (BSD):  *note Interrupt Input::.

`int fsetpos (FILE *STREAM, const fpos_t *POSITION)'
     `stdio.h' (ISO):  *note Portable Positioning::.

`int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)'
     `stdio.h' (Unix98):  *note Portable Positioning::.

`int fstat (int FILEDES, struct stat *BUF)'
     `sys/stat.h' (POSIX.1):  *note Reading Attributes::.

`int fstat64 (int FILEDES, struct stat64 *BUF)'
     `sys/stat.h' (Unix98):  *note Reading Attributes::.

`int fsync (int FILDES)'
     `unistd.h' (POSIX):  *note Synchronizing I/O::.

`long int ftell (FILE *STREAM)'
     `stdio.h' (ISO):  *note File Positioning::.

`off_t ftello (FILE *STREAM)'
     `stdio.h' (Unix98):  *note File Positioning::.

`off64_t ftello64 (FILE *STREAM)'
     `stdio.h' (Unix98):  *note File Positioning::.

`int ftruncate (int FD, off_t LENGTH)'
     `unistd.h' (POSIX):  *note File Size::.

`int ftruncate64 (int ID, off64_t LENGTH)'
     `unistd.h' (Unix98):  *note File Size::.

`int ftrylockfile (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Streams and Threads::.

`int ftw (const char *FILENAME, __ftw_func_t FUNC, int DESCRIPTORS)'
     `ftw.h' (SVID):  *note Working with Directory Trees::.

`int ftw64 (const char *FILENAME, __ftw64_func_t FUNC, int DESCRIPTORS)'
     `ftw.h' (Unix98):  *note Working with Directory Trees::.

`__ftw64_func_t'
     `ftw.h' (GNU):  *note Working with Directory Trees::.

`__ftw_func_t'
     `ftw.h' (GNU):  *note Working with Directory Trees::.

`F_UNLCK'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`void funlockfile (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Streams and Threads::.

`int futimes (int FD, struct timeval TVP[2])'
     `sys/time.h' (BSD):  *note File Times::.

`int fwide (FILE *STREAM, int MODE)'
     `wchar.h' (ISO):  *note Streams and I18N::.

`int fwprintf (FILE *STREAM, const wchar_t *TEMPLATE, ...)'
     `wchar.h' (ISO):  *note Formatted Output Functions::.

`int __fwritable (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Opening Streams::.

`size_t fwrite (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
     `stdio.h' (ISO):  *note Block Input/Output::.

`size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM)'
     `stdio.h' (GNU):  *note Block Input/Output::.

`int __fwriting (FILE *STREAM)'
     `stdio_ext.h' (GNU):  *note Opening Streams::.

`F_WRLCK'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`int fwscanf (FILE *STREAM, const wchar_t *TEMPLATE, ...)'
     `wchar.h' (ISO):  *note Formatted Input Functions::.

`double gamma (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float gammaf (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double gammal (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`void (*__gconv_end_fct) (struct gconv_step *)'
     `gconv.h' (GNU):  *note glibc iconv Implementation::.

`int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, const char **, const char *, size_t *, int)'
     `gconv.h' (GNU):  *note glibc iconv Implementation::.

`int (*__gconv_init_fct) (struct __gconv_step *)'
     `gconv.h' (GNU):  *note glibc iconv Implementation::.

`char * gcvt (double VALUE, int NDIGIT, char *BUF)'
     `stdlib.h' (SVID, Unix98):  *note System V Number Conversion::.

`long int get_avphys_pages (void)'
     `sys/sysinfo.h' (GNU):  *note Query Memory Parameters::.

`int getc (FILE *STREAM)'
     `stdio.h' (ISO):  *note Character Input::.

`int getchar (void)'
     `stdio.h' (ISO):  *note Character Input::.

`int getchar_unlocked (void)'
     `stdio.h' (POSIX):  *note Character Input::.

`int getcontext (ucontext_t *UCP)'
     `ucontext.h' (SVID):  *note System V contexts::.

`int getc_unlocked (FILE *STREAM)'
     `stdio.h' (POSIX):  *note Character Input::.

`char * get_current_dir_name (void)'
     `unistd.h' (GNU):  *note Working Directory::.

`char * getcwd (char *BUFFER, size_t SIZE)'
     `unistd.h' (POSIX.1):  *note Working Directory::.

`struct tm * getdate (const char *STRING)'
     `time.h' (Unix98):  *note General Time String Parsing::.

`getdate_err'
     `time.h' (Unix98):  *note General Time String Parsing::.

`int getdate_r (const char *STRING, struct tm *TP)'
     `time.h' (GNU):  *note General Time String Parsing::.

`ssize_t getdelim (char **LINEPTR, size_t *N, int DELIMITER, FILE *STREAM)'
     `stdio.h' (GNU):  *note Line Input::.

`int getdomainnname (char *NAME, size_t LENGTH)'
     `unistd.h' (???):  *note Host Identification::.

`gid_t getegid (void)'
     `unistd.h' (POSIX.1):  *note Reading Persona::.

`char * getenv (const char *NAME)'
     `stdlib.h' (ISO):  *note Environment Access::.

`uid_t geteuid (void)'
     `unistd.h' (POSIX.1):  *note Reading Persona::.

`struct fstab * getfsent (void)'
     `fstab.h' (BSD):  *note fstab::.

`struct fstab * getfsfile (const char *NAME)'
     `fstab.h' (BSD):  *note fstab::.

`struct fstab * getfsspec (const char *NAME)'
     `fstab.h' (BSD):  *note fstab::.

`gid_t getgid (void)'
     `unistd.h' (POSIX.1):  *note Reading Persona::.

`struct group * getgrent (void)'
     `grp.h' (SVID, BSD):  *note Scanning All Groups::.

`int getgrent_r (struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
     `grp.h' (GNU):  *note Scanning All Groups::.

`struct group * getgrgid (gid_t GID)'
     `grp.h' (POSIX.1):  *note Lookup Group::.

`int getgrgid_r (gid_t GID, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
     `grp.h' (POSIX.1c):  *note Lookup Group::.

`struct group * getgrnam (const char *NAME)'
     `grp.h' (SVID, BSD):  *note Lookup Group::.

`int getgrnam_r (const char *NAME, struct group *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct group **RESULT)'
     `grp.h' (POSIX.1c):  *note Lookup Group::.

`int getgrouplist (const char *USER, gid_t GROUP, gid_t *GROUPS, int *NGROUPS)'
     `grp.h' (BSD):  *note Setting Groups::.

`int getgroups (int COUNT, gid_t *GROUPS)'
     `unistd.h' (POSIX.1):  *note Reading Persona::.

`struct hostent * gethostbyaddr (const char *ADDR, size_t LENGTH, int FORMAT)'
     `netdb.h' (BSD):  *note Host Names::.

`int gethostbyaddr_r (const char *ADDR, size_t LENGTH, int FORMAT, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
     `netdb.h' (GNU):  *note Host Names::.

`struct hostent * gethostbyname (const char *NAME)'
     `netdb.h' (BSD):  *note Host Names::.

`struct hostent * gethostbyname2 (const char *NAME, int AF)'
     `netdb.h' (IPv6 Basic API):  *note Host Names::.

`int gethostbyname2_r (const char *NAME, int AF, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
     `netdb.h' (GNU):  *note Host Names::.

`int gethostbyname_r (const char *restrict NAME, struct hostent *restrict RESULT_BUF, char *restrict BUF, size_t BUFLEN, struct hostent **restrict RESULT, int *restrict H_ERRNOP)'
     `netdb.h' (GNU):  *note Host Names::.

`struct hostent * gethostent (void)'
     `netdb.h' (BSD):  *note Host Names::.

`long int gethostid (void)'
     `unistd.h' (BSD):  *note Host Identification::.

`int gethostname (char *NAME, size_t SIZE)'
     `unistd.h' (BSD):  *note Host Identification::.

`int getitimer (int WHICH, struct itimerval *OLD)'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`ssize_t getline (char **LINEPTR, size_t *N, FILE *STREAM)'
     `stdio.h' (GNU):  *note Line Input::.

`int getloadavg (double LOADAVG[], int NELEM)'
     `stdlib.h' (BSD):  *note Processor Resources::.

`char * getlogin (void)'
     `unistd.h' (POSIX.1):  *note Who Logged In::.

`struct mntent * getmntent (FILE *STREAM)'
     `mntent.h' (BSD):  *note mtab::.

`struct mntent * getmntent_r (FILE *STREAM, struct mentent *RESULT, char *BUFFER, int BUFSIZE)'
     `mntent.h' (BSD):  *note mtab::.

`struct netent * getnetbyaddr (unsigned long int NET, int TYPE)'
     `netdb.h' (BSD):  *note Networks Database::.

`struct netent * getnetbyname (const char *NAME)'
     `netdb.h' (BSD):  *note Networks Database::.

`struct netent * getnetent (void)'
     `netdb.h' (BSD):  *note Networks Database::.

`int getnetgrent (char **HOSTP, char **USERP, char **DOMAINP)'
     `netdb.h' (BSD):  *note Lookup Netgroup::.

`int getnetgrent_r (char **HOSTP, char **USERP, char **DOMAINP, char *BUFFER, int BUFLEN)'
     `netdb.h' (GNU):  *note Lookup Netgroup::.

`int get_nprocs (void)'
     `sys/sysinfo.h' (GNU):  *note Processor Resources::.

`int get_nprocs_conf (void)'
     `sys/sysinfo.h' (GNU):  *note Processor Resources::.

`int getopt (int ARGC, char **ARGV, const char *OPTIONS)'
     `unistd.h' (POSIX.2):  *note Using Getopt::.

`int getopt_long (int ARGC, char *const *ARGV, const char *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)'
     `getopt.h' (GNU):  *note Getopt Long Options::.

`int getopt_long_only (int ARGC, char *const *ARGV, const char *SHORTOPTS, const struct option *LONGOPTS, int *INDEXPTR)'
     `getopt.h' (GNU):  *note Getopt Long Options::.

`int getpagesize (void)'
     `unistd.h' (BSD):  *note Query Memory Parameters::.

`char * getpass (const char *PROMPT)'
     `unistd.h' (BSD):  *note getpass::.

`int getpeername (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
     `sys/socket.h' (BSD):  *note Who is Connected::.

`int getpgid (pid_t PID)'
     `unistd.h' (SVID):  *note Process Group Functions::.

`pid_t getpgrp (pid_t PID)'
     `unistd.h' (BSD):  *note Process Group Functions::.

`pid_t getpgrp (void)'
     `unistd.h' (POSIX.1):  *note Process Group Functions::.

`long int get_phys_pages (void)'
     `sys/sysinfo.h' (GNU):  *note Query Memory Parameters::.

`pid_t getpid (void)'
     `unistd.h' (POSIX.1):  *note Process Identification::.

`pid_t getppid (void)'
     `unistd.h' (POSIX.1):  *note Process Identification::.

`int getpriority (int CLASS, int ID)'
     `sys/resource.h' (BSD,POSIX):  *note Traditional Scheduling
     Functions::.

`struct protoent * getprotobyname (const char *NAME)'
     `netdb.h' (BSD):  *note Protocols Database::.

`struct protoent * getprotobynumber (int PROTOCOL)'
     `netdb.h' (BSD):  *note Protocols Database::.

`struct protoent * getprotoent (void)'
     `netdb.h' (BSD):  *note Protocols Database::.

`int getpt (void)'
     `stdlib.h' (GNU):  *note Allocation::.

`struct passwd * getpwent (void)'
     `pwd.h' (POSIX.1):  *note Scanning All Users::.

`int getpwent_r (struct passwd *RESULT_BUF, char *BUFFER, int BUFLEN, struct passwd **RESULT)'
     `pwd.h' (GNU):  *note Scanning All Users::.

`struct passwd * getpwnam (const char *NAME)'
     `pwd.h' (POSIX.1):  *note Lookup User::.

`int getpwnam_r (const char *NAME, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
     `pwd.h' (POSIX.1c):  *note Lookup User::.

`struct passwd * getpwuid (uid_t UID)'
     `pwd.h' (POSIX.1):  *note Lookup User::.

`int getpwuid_r (uid_t UID, struct passwd *RESULT_BUF, char *BUFFER, size_t BUFLEN, struct passwd **RESULT)'
     `pwd.h' (POSIX.1c):  *note Lookup User::.

`int getrlimit (int RESOURCE, struct rlimit *RLP)'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`int getrlimit64 (int RESOURCE, struct rlimit64 *RLP)'
     `sys/resource.h' (Unix98):  *note Limits on Resources::.

`int getrusage (int PROCESSES, struct rusage *RUSAGE)'
     `sys/resource.h' (BSD):  *note Resource Usage::.

`char * gets (char *S)'
     `stdio.h' (ISO):  *note Line Input::.

`struct servent * getservbyname (const char *NAME, const char *PROTO)'
     `netdb.h' (BSD):  *note Services Database::.

`struct servent * getservbyport (int PORT, const char *PROTO)'
     `netdb.h' (BSD):  *note Services Database::.

`struct servent * getservent (void)'
     `netdb.h' (BSD):  *note Services Database::.

`pid_t getsid (pid_t PID)'
     `unistd.h' (SVID):  *note Process Group Functions::.

`int getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
     `sys/socket.h' (BSD):  *note Reading Address::.

`int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t *OPTLEN-PTR)'
     `sys/socket.h' (BSD):  *note Socket Option Functions::.

`int getsubopt (char **OPTIONP, const char* const *TOKENS, char **VALUEP)'
     `stdlib.h' (stdlib.h):  *note Suboptions Example: Suboptions.

`char * gettext (const char *MSGID)'
     `libintl.h' (GNU):  *note Translation with gettext::.

`int gettimeofday (struct timeval *TP, struct timezone *TZP)'
     `sys/time.h' (BSD):  *note High-Resolution Calendar::.

`uid_t getuid (void)'
     `unistd.h' (POSIX.1):  *note Reading Persona::.

`mode_t getumask (void)'
     `sys/stat.h' (GNU):  *note Setting Permissions::.

`struct utmp * getutent (void)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`int getutent_r (struct utmp *BUFFER, struct utmp **RESULT)'
     `utmp.h' (GNU):  *note Manipulating the Database::.

`struct utmp * getutid (const struct utmp *ID)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`int getutid_r (const struct utmp *ID, struct utmp *BUFFER, struct utmp **RESULT)'
     `utmp.h' (GNU):  *note Manipulating the Database::.

`struct utmp * getutline (const struct utmp *LINE)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`int getutline_r (const struct utmp *LINE, struct utmp *BUFFER, struct utmp **RESULT)'
     `utmp.h' (GNU):  *note Manipulating the Database::.

`int getutmp (const struct utmpx *utmpx, struct utmp *utmp)'
     `utmp.h' (GNU):  *note XPG Functions::.

`int getutmpx (const struct utmp *utmp, struct utmpx *utmpx)'
     `utmp.h' (GNU):  *note XPG Functions::.

`struct utmpx * getutxent (void)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`struct utmpx * getutxid (const struct utmpx *ID)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`struct utmpx * getutxline (const struct utmpx *LINE)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int getw (FILE *STREAM)'
     `stdio.h' (SVID):  *note Character Input::.

`wint_t getwc (FILE *STREAM)'
     `wchar.h' (ISO):  *note Character Input::.

`wint_t getwchar (void)'
     `wchar.h' (ISO):  *note Character Input::.

`wint_t getwchar_unlocked (void)'
     `wchar.h' (GNU):  *note Character Input::.

`wint_t getwc_unlocked (FILE *STREAM)'
     `wchar.h' (GNU):  *note Character Input::.

`char * getwd (char *BUFFER)'
     `unistd.h' (BSD):  *note Working Directory::.

`gid_t'
     `sys/types.h' (POSIX.1):  *note Reading Persona::.

`int glob (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob_t *VECTOR-PTR)'
     `glob.h' (POSIX.2):  *note Calling Glob::.

`int glob64 (const char *PATTERN, int FLAGS, int (*ERRFUNC) (const char *FILENAME, int ERROR-CODE), glob64_t *VECTOR-PTR)'
     `glob.h' (GNU):  *note Calling Glob::.

`glob64_t'
     `glob.h' (GNU):  *note Calling Glob::.

`GLOB_ABORTED'
     `glob.h' (POSIX.2):  *note Calling Glob::.

`GLOB_ALTDIRFUNC'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_APPEND'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_BRACE'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_DOOFFS'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_ERR'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`void globfree (glob_t *PGLOB)'
     `glob.h' (POSIX.2):  *note More Flags for Globbing::.

`void globfree64 (glob64_t *PGLOB)'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_MAGCHAR'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_MARK'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_NOCHECK'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_NOESCAPE'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_NOMAGIC'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_NOMATCH'
     `glob.h' (POSIX.2):  *note Calling Glob::.

`GLOB_NOSORT'
     `glob.h' (POSIX.2):  *note Flags for Globbing::.

`GLOB_NOSPACE'
     `glob.h' (POSIX.2):  *note Calling Glob::.

`GLOB_ONLYDIR'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_PERIOD'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`glob_t'
     `glob.h' (POSIX.2):  *note Calling Glob::.

`GLOB_TILDE'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`GLOB_TILDE_CHECK'
     `glob.h' (GNU):  *note More Flags for Globbing::.

`struct tm * gmtime (const time_t *TIME)'
     `time.h' (ISO):  *note Broken-down Time::.

`struct tm * gmtime_r (const time_t *TIME, struct tm *RESULTP)'
     `time.h' (POSIX.1c):  *note Broken-down Time::.

`_GNU_SOURCE'
     (GNU):  *note Feature Test Macros::.

`int grantpt (int FILEDES)'
     `stdlib.h' (SVID, XPG4.2):  *note Allocation::.

`int gsignal (int SIGNUM)'
     `signal.h' (SVID):  *note Signaling Yourself::.

`int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)'
     `sgtty.h' (BSD):  *note BSD Terminal Modes::.

`char * hasmntopt (const struct mntent *MNT, const char *OPT)'
     `mntent.h' (BSD):  *note mtab::.

`int hcreate (size_t NEL)'
     `search.h' (SVID):  *note Hash Search Function::.

`int hcreate_r (size_t NEL, struct hsearch_data *HTAB)'
     `search.h' (GNU):  *note Hash Search Function::.

`void hdestroy (void)'
     `search.h' (SVID):  *note Hash Search Function::.

`void hdestroy_r (struct hsearch_data *HTAB)'
     `search.h' (GNU):  *note Hash Search Function::.

`HOST_NOT_FOUND'
     `netdb.h' (BSD):  *note Host Names::.

`ENTRY * hsearch (ENTRY ITEM, ACTION ACTION)'
     `search.h' (SVID):  *note Hash Search Function::.

`int hsearch_r (ENTRY ITEM, ACTION ACTION, ENTRY **RETVAL, struct hsearch_data *HTAB)'
     `search.h' (GNU):  *note Hash Search Function::.

`uint32_t htonl (uint32_t HOSTLONG)'
     `netinet/in.h' (BSD):  *note Byte Order::.

`uint16_t htons (uint16_t HOSTSHORT)'
     `netinet/in.h' (BSD):  *note Byte Order::.

`double HUGE_VAL'
     `math.h' (ISO):  *note Math Error Reporting::.

`float HUGE_VALF'
     `math.h' (ISO):  *note Math Error Reporting::.

`long double HUGE_VALL'
     `math.h' (ISO):  *note Math Error Reporting::.

`tcflag_t HUPCL'
     `termios.h' (POSIX.1):  *note Control Modes::.

`double hypot (double X, double Y)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float hypotf (float X, float Y)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double hypotl (long double X, long double Y)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`tcflag_t ICANON'
     `termios.h' (POSIX.1):  *note Local Modes::.

`size_t iconv (iconv_t CD, char **INBUF, size_t *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT)'
     `iconv.h' (XPG2):  *note Generic Conversion Interface::.

`int iconv_close (iconv_t CD)'
     `iconv.h' (XPG2):  *note Generic Conversion Interface::.

`iconv_t iconv_open (const char *TOCODE, const char *FROMCODE)'
     `iconv.h' (XPG2):  *note Generic Conversion Interface::.

`iconv_t'
     `iconv.h' (XPG2):  *note Generic Conversion Interface::.

`tcflag_t ICRNL'
     `termios.h' (POSIX.1):  *note Input Modes::.

`tcflag_t IEXTEN'
     `termios.h' (POSIX.1):  *note Local Modes::.

`void if_freenameindex (struct if_nameindex *ptr)'
     `net/if.h' (IPv6 basic API):  *note Interface Naming::.

`char * if_indextoname (unsigned int ifindex, char *ifname)'
     `net/if.h' (IPv6 basic API):  *note Interface Naming::.

`struct if_nameindex * if_nameindex (void)'
     `net/if.h' (IPv6 basic API):  *note Interface Naming::.

`unsigned int if_nametoindex (const char *ifname)'
     `net/if.h' (IPv6 basic API):  *note Interface Naming::.

`size_t IFNAMSIZ'
     `net/if.h' (net/if.h):  *note Interface Naming::.

`int IFTODT (mode_t MODE)'
     `dirent.h' (BSD):  *note Directory Entries::.

`tcflag_t IGNBRK'
     `termios.h' (POSIX.1):  *note Input Modes::.

`tcflag_t IGNCR'
     `termios.h' (POSIX.1):  *note Input Modes::.

`tcflag_t IGNPAR'
     `termios.h' (POSIX.1):  *note Input Modes::.

`int ilogb (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`int ilogbf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`int ilogbl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`intmax_t imaxabs (intmax_t NUMBER)'
     `inttypes.h' (ISO):  *note Absolute Value::.

`tcflag_t IMAXBEL'
     `termios.h' (BSD):  *note Input Modes::.

`imaxdiv_t imaxdiv (intmax_t NUMERATOR, intmax_t DENOMINATOR)'
     `inttypes.h' (ISO):  *note Integer Division::.

`imaxdiv_t'
     `inttypes.h' (ISO):  *note Integer Division::.

`struct in6_addr in6addr_any'
     `netinet/in.h' (IPv6 basic API):  *note Host Address Data Type::.

`struct in6_addr in6addr_loopback'
     `netinet/in.h' (IPv6 basic API):  *note Host Address Data Type::.

`uint32_t INADDR_ANY'
     `netinet/in.h' (BSD):  *note Host Address Data Type::.

`uint32_t INADDR_BROADCAST'
     `netinet/in.h' (BSD):  *note Host Address Data Type::.

`uint32_t INADDR_LOOPBACK'
     `netinet/in.h' (BSD):  *note Host Address Data Type::.

`uint32_t INADDR_NONE'
     `netinet/in.h' (BSD):  *note Host Address Data Type::.

`char * index (const char *STRING, int C)'
     `string.h' (BSD):  *note Search Functions::.

`uint32_t inet_addr (const char *NAME)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`int inet_aton (const char *NAME, struct in_addr *ADDR)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`uint32_t inet_lnaof (struct in_addr ADDR)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`struct in_addr inet_makeaddr (uint32_t NET, uint32_t LOCAL)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`uint32_t inet_netof (struct in_addr ADDR)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`uint32_t inet_network (const char *NAME)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`char * inet_ntoa (struct in_addr ADDR)'
     `arpa/inet.h' (BSD):  *note Host Address Functions::.

`const char * inet_ntop (int AF, const void *CP, char *BUF, size_t LEN)'
     `arpa/inet.h' (IPv6 basic API):  *note Host Address Functions::.

`int inet_pton (int AF, const char *CP, void *BUF)'
     `arpa/inet.h' (IPv6 basic API):  *note Host Address Functions::.

`float INFINITY'
     `math.h' (ISO):  *note Infinity and NaN::.

`int initgroups (const char *USER, gid_t GROUP)'
     `grp.h' (BSD):  *note Setting Groups::.

`INIT_PROCESS'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`INIT_PROCESS'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`void * initstate (unsigned int SEED, void *STATE, size_t SIZE)'
     `stdlib.h' (BSD):  *note BSD Random::.

`int initstate_r (unsigned int SEED, char *restrict STATEBUF, size_t STATELEN, struct random_data *restrict BUF)'
     `stdlib.h' (GNU):  *note BSD Random::.

`tcflag_t INLCR'
     `termios.h' (POSIX.1):  *note Input Modes::.

`int innetgr (const char *NETGROUP, const char *HOST, const char *USER, const char *DOMAIN)'
     `netdb.h' (BSD):  *note Netgroup Membership::.

`ino64_t'
     `sys/types.h' (Unix98):  *note Attribute Meanings::.

`ino_t'
     `sys/types.h' (POSIX.1):  *note Attribute Meanings::.

`tcflag_t INPCK'
     `termios.h' (POSIX.1):  *note Input Modes::.

`long int telldir (DIR *DIRSTREAM)'
     `dirent.h' (BSD):  *note Random Access Directory::.

`INT_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`INT_MIN'
     `limits.h' (ISO):  *note Range of Type::.

`int ioctl (int FILEDES, int COMMAND, ...)'
     `sys/ioctl.h' (BSD):  *note IOCTLs::.

`int _IOFBF'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`int _IOLBF'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`int _IONBF'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`int IPPORT_RESERVED'
     `netinet/in.h' (BSD):  *note Ports::.

`int IPPORT_USERRESERVED'
     `netinet/in.h' (BSD):  *note Ports::.

`int isalnum (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isalpha (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isascii (int C)'
     `ctype.h' (SVID, BSD):  *note Classification of Characters::.

`int isatty (int FILEDES)'
     `unistd.h' (POSIX.1):  *note Is It a Terminal::.

`int isblank (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int iscntrl (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isdigit (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isfinite (_float-type_ X)'
     `math.h' (ISO):  *note Floating Point Classes::.

`int isgraph (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isgreater (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`int isgreaterequal (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`tcflag_t ISIG'
     `termios.h' (POSIX.1):  *note Local Modes::.

`int isinf (double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isinff (float X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isinfl (long double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isless (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`int islessequal (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`int islessgreater (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`int islower (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isnan (_float-type_ X)'
     `math.h' (ISO):  *note Floating Point Classes::.

`int isnan (double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isnanf (float X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isnanl (long double X)'
     `math.h' (BSD):  *note Floating Point Classes::.

`int isnormal (_float-type_ X)'
     `math.h' (ISO):  *note Floating Point Classes::.

`_ISOC99_SOURCE'
     (GNU):  *note Feature Test Macros::.

`int isprint (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int ispunct (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int isspace (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`tcflag_t ISTRIP'
     `termios.h' (POSIX.1):  *note Input Modes::.

`int isunordered (_real-floating_ X, _real-floating_ Y)'
     `math.h' (ISO):  *note FP Comparison Functions::.

`int isupper (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`int iswalnum (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswalpha (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswblank (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswcntrl (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswctype (wint_t WC, wctype_t DESC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswdigit (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswgraph (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswlower (wint_t WC)'
     `ctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswprint (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswpunct (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswspace (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswupper (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int iswxdigit (wint_t WC)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int isxdigit (int C)'
     `ctype.h' (ISO):  *note Classification of Characters::.

`ITIMER_PROF'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`ITIMER_REAL'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`ITIMER_VIRTUAL'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`tcflag_t IXANY'
     `termios.h' (BSD):  *note Input Modes::.

`tcflag_t IXOFF'
     `termios.h' (POSIX.1):  *note Input Modes::.

`tcflag_t IXON'
     `termios.h' (POSIX.1):  *note Input Modes::.

`double j0 (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float j0f (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double j0l (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`double j1 (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float j1f (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double j1l (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`jmp_buf'
     `setjmp.h' (ISO):  *note Non-Local Details::.

`double jn (int n, double X)'
     `math.h' (SVID):  *note Special Functions::.

`float jnf (int n, float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double jnl (int n, long double X)'
     `math.h' (SVID):  *note Special Functions::.

`long int jrand48 (unsigned short int XSUBI[3])'
     `stdlib.h' (SVID):  *note SVID Random::.

`int jrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`int kill (pid_t PID, int SIGNUM)'
     `signal.h' (POSIX.1):  *note Signaling Another Process::.

`int killpg (int PGID, int SIGNUM)'
     `signal.h' (BSD):  *note Signaling Another Process::.

`char * l64a (long int N)'
     `stdlib.h' (XPG):  *note Encode Binary Data::.

`long int labs (long int NUMBER)'
     `stdlib.h' (ISO):  *note Absolute Value::.

`LANG'
     `locale.h' (ISO):  *note Locale Categories::.

`LC_ALL'
     `locale.h' (ISO):  *note Locale Categories::.

`LC_COLLATE'
     `locale.h' (ISO):  *note Locale Categories::.

`LC_CTYPE'
     `locale.h' (ISO):  *note Locale Categories::.

`LC_MESSAGES'
     `locale.h' (XOPEN):  *note Locale Categories::.

`LC_MONETARY'
     `locale.h' (ISO):  *note Locale Categories::.

`LC_NUMERIC'
     `locale.h' (ISO):  *note Locale Categories::.

`void lcong48 (unsigned short int PARAM[7])'
     `stdlib.h' (SVID):  *note SVID Random::.

`int lcong48_r (unsigned short int PARAM[7], struct drand48_data *BUFFER)'
     `stdlib.h' (GNU):  *note SVID Random::.

`int L_ctermid'
     `stdio.h' (POSIX.1):  *note Identifying the Terminal::.

`LC_TIME'
     `locale.h' (ISO):  *note Locale Categories::.

`int L_cuserid'
     `stdio.h' (POSIX.1):  *note Who Logged In::.

`double ldexp (double VALUE, int EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`float ldexpf (float VALUE, int EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`long double ldexpl (long double VALUE, int EXPONENT)'
     `math.h' (ISO):  *note Normalization Functions::.

`ldiv_t ldiv (long int NUMERATOR, long int DENOMINATOR)'
     `stdlib.h' (ISO):  *note Integer Division::.

`ldiv_t'
     `stdlib.h' (ISO):  *note Integer Division::.

`void * lfind (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)'
     `search.h' (SVID):  *note Array Search Function::.

`double lgamma (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float lgammaf (float X)'
     `math.h' (SVID):  *note Special Functions::.

`float lgammaf_r (float X, int *SIGNP)'
     `math.h' (XPG):  *note Special Functions::.

`long double lgammal (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`long double lgammal_r (long double X, int *SIGNP)'
     `math.h' (XPG):  *note Special Functions::.

`double lgamma_r (double X, int *SIGNP)'
     `math.h' (XPG):  *note Special Functions::.

`L_INCR'
     `sys/file.h' (BSD):  *note File Positioning::.

`int LINE_MAX'
     `limits.h' (POSIX.2):  *note Utility Limits::.

`int link (const char *OLDNAME, const char *NEWNAME)'
     `unistd.h' (POSIX.1):  *note Hard Links::.

`int LINK_MAX'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`int lio_listio (int MODE, struct aiocb *const LIST[], int NENT, struct sigevent *SIG)'
     `aio.h' (POSIX.1b):  *note Asynchronous Reads/Writes::.

`int lio_listio64 (int MODE, struct aiocb *const LIST, int NENT, struct sigevent *SIG)'
     `aio.h' (Unix98):  *note Asynchronous Reads/Writes::.

`int listen (int SOCKET, int N)'
     `sys/socket.h' (BSD):  *note Listening::.

`long long int llabs (long long int NUMBER)'
     `stdlib.h' (ISO):  *note Absolute Value::.

`lldiv_t lldiv (long long int NUMERATOR, long long int DENOMINATOR)'
     `stdlib.h' (ISO):  *note Integer Division::.

`lldiv_t'
     `stdlib.h' (ISO):  *note Integer Division::.

`long long int llrint (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long long int llrintf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long long int llrintl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long long int llround (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long long int llroundf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long long int llroundl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`struct lconv * localeconv (void)'
     `locale.h' (ISO):  *note The Lame Way to Locale Data::.

`struct tm * localtime (const time_t *TIME)'
     `time.h' (ISO):  *note Broken-down Time::.

`struct tm * localtime_r (const time_t *TIME, struct tm *RESULTP)'
     `time.h' (POSIX.1c):  *note Broken-down Time::.

`double log (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double log10 (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float log10f (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double log10l (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double log1p (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float log1pf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double log1pl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double log2 (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float log2f (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double log2l (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double logb (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float logbf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double logbl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float logf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`void login (const struct utmp *ENTRY)'
     `utmp.h' (BSD):  *note Logging In and Out::.

`LOGIN_PROCESS'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`LOGIN_PROCESS'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int login_tty (int FILEDES)'
     `utmp.h' (BSD):  *note Logging In and Out::.

`long double logl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`int logout (const char *UT_LINE)'
     `utmp.h' (BSD):  *note Logging In and Out::.

`void logwtmp (const char *UT_LINE, const char *UT_NAME, const char *UT_HOST)'
     `utmp.h' (BSD):  *note Logging In and Out::.

`void longjmp (jmp_buf STATE, int VALUE)'
     `setjmp.h' (ISO):  *note Non-Local Details::.

`LONG_LONG_MAX'
     `limits.h' (GNU):  *note Range of Type::.

`LONG_LONG_MIN'
     `limits.h' (GNU):  *note Range of Type::.

`LONG_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`LONG_MIN'
     `limits.h' (ISO):  *note Range of Type::.

`long int lrand48 (void)'
     `stdlib.h' (SVID):  *note SVID Random::.

`int lrand48_r (struct drand48_data *BUFFER, double *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`long int lrint (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long int lrintf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long int lrintl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long int lround (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long int lroundf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long int lroundl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`void * lsearch (const void *KEY, void *BASE, size_t *NMEMB, size_t SIZE, comparison_fn_t COMPAR)'
     `search.h' (SVID):  *note Array Search Function::.

`off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)'
     `unistd.h' (POSIX.1):  *note File Position Primitive::.

`off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)'
     `unistd.h' (Unix98):  *note File Position Primitive::.

`L_SET'
     `sys/file.h' (BSD):  *note File Positioning::.

`int lstat (const char *FILENAME, struct stat *BUF)'
     `sys/stat.h' (BSD):  *note Reading Attributes::.

`int lstat64 (const char *FILENAME, struct stat64 *BUF)'
     `sys/stat.h' (Unix98):  *note Reading Attributes::.

`int L_tmpnam'
     `stdio.h' (ISO):  *note Temporary Files::.

`int lutimes (const char *FILENAME, struct timeval TVP[2])'
     `sys/time.h' (BSD):  *note File Times::.

`L_XTND'
     `sys/file.h' (BSD):  *note File Positioning::.

`int madvise (void *ADDR, size_t LENGTH, int ADVICE)'
     `sys/mman.h' (POSIX):  *note Memory-mapped I/O::.

`void makecontext (ucontext_t *UCP, void (*FUNC) (void), int ARGC, ...)'
     `ucontext.h' (SVID):  *note System V contexts::.

`struct mallinfo mallinfo (void)'
     `malloc.h' (SVID):  *note Statistics of Malloc::.

`void * malloc (size_t SIZE)'
     `malloc.h', `stdlib.h' (ISO):  *note Basic Allocation::.

`__malloc_hook'
     `malloc.h' (GNU):  *note Hooks for Malloc::.

`__malloc_initialize_hook'
     `malloc.h' (GNU):  *note Hooks for Malloc::.

`int MAX_CANON'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`int MAX_INPUT'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`int MAXNAMLEN'
     `dirent.h' (BSD):  *note Limits for Files::.

`int MAXSYMLINKS'
     `sys/param.h' (BSD):  *note Symbolic Links::.

`int MB_CUR_MAX'
     `stdlib.h' (ISO):  *note Selecting the Conversion::.

`int mblen (const char *STRING, size_t SIZE)'
     `stdlib.h' (ISO):  *note Non-reentrant Character Conversion::.

`int MB_LEN_MAX'
     `limits.h' (ISO):  *note Selecting the Conversion::.

`size_t mbrlen (const char *restrict S, size_t N, mbstate_t *PS)'
     `wchar.h' (ISO):  *note Converting a Character::.

`size_t mbrtowc (wchar_t *restrict PWC, const char *restrict S, size_t N, mbstate_t *restrict PS)'
     `wchar.h' (ISO):  *note Converting a Character::.

`int mbsinit (const mbstate_t *PS)'
     `wchar.h' (ISO):  *note Keeping the state::.

`size_t mbsnrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t NMC, size_t LEN, mbstate_t *restrict PS)'
     `wchar.h' (GNU):  *note Converting Strings::.

`size_t mbsrtowcs (wchar_t *restrict DST, const char **restrict SRC, size_t LEN, mbstate_t *restrict PS)'
     `wchar.h' (ISO):  *note Converting Strings::.

`mbstate_t'
     `wchar.h' (ISO):  *note Keeping the state::.

`size_t mbstowcs (wchar_t *WSTRING, const char *STRING, size_t SIZE)'
     `stdlib.h' (ISO):  *note Non-reentrant String Conversion::.

`int mbtowc (wchar_t *restrict RESULT, const char *restrict STRING, size_t SIZE)'
     `stdlib.h' (ISO):  *note Non-reentrant Character Conversion::.

`int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))'
     `mcheck.h' (GNU):  *note Heap Consistency Checking::.

`tcflag_t MDMBUF'
     `termios.h' (BSD):  *note Control Modes::.

`void * memalign (size_t BOUNDARY, size_t SIZE)'
     `malloc.h' (BSD):  *note Aligned Memory Blocks::.

`__memalign_hook'
     `malloc.h' (GNU):  *note Hooks for Malloc::.

`void * memccpy (void *restrict TO, const void *restrict FROM, int C, size_t SIZE)'
     `string.h' (SVID):  *note Copying and Concatenation::.

`void * memchr (const void *BLOCK, int C, size_t SIZE)'
     `string.h' (ISO):  *note Search Functions::.

`int memcmp (const void *A1, const void *A2, size_t SIZE)'
     `string.h' (ISO):  *note String/Array Comparison::.

`void * memcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`void * memfrob (void *MEM, size_t LENGTH)'
     `string.h' (GNU):  *note Trivial Encryption::.

`void * memmem (const void *HAYSTACK, size_t HAYSTACK-LEN,
     const void *NEEDLE, size_t NEEDLE-LEN)'
     `string.h' (GNU):  *note Search Functions::.

`void * memmove (void *TO, const void *FROM, size_t SIZE)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`void * mempcpy (void *restrict TO, const void *restrict FROM, size_t SIZE)'
     `string.h' (GNU):  *note Copying and Concatenation::.

`void * memrchr (const void *BLOCK, int C, size_t SIZE)'
     `string.h' (GNU):  *note Search Functions::.

`void * memset (void *BLOCK, int C, size_t SIZE)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`int mkdir (const char *FILENAME, mode_t MODE)'
     `sys/stat.h' (POSIX.1):  *note Creating Directories::.

`char * mkdtemp (char *TEMPLATE)'
     `stdlib.h' (BSD):  *note Temporary Files::.

`int mkfifo (const char *FILENAME, mode_t MODE)'
     `sys/stat.h' (POSIX.1):  *note FIFO Special Files::.

`int mknod (const char *FILENAME, int MODE, int DEV)'
     `sys/stat.h' (BSD):  *note Making Special Files::.

`int mkstemp (char *TEMPLATE)'
     `stdlib.h' (BSD):  *note Temporary Files::.

`char * mktemp (char *TEMPLATE)'
     `stdlib.h' (Unix):  *note Temporary Files::.

`time_t mktime (struct tm *BROKENTIME)'
     `time.h' (ISO):  *note Broken-down Time::.

`int mlock (const void *ADDR, size_t LEN)'
     `sys/mman.h' (POSIX.1b):  *note Page Lock Functions::.

`int mlockall (int FLAGS)'
     `sys/mman.h' (POSIX.1b):  *note Page Lock Functions::.

`void * mmap (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off_t OFFSET)'
     `sys/mman.h' (POSIX):  *note Memory-mapped I/O::.

`void * mmap64 (void *ADDRESS, size_t LENGTH,int PROTECT, int FLAGS, int FILEDES, off64_t OFFSET)'
     `sys/mman.h' (LFS):  *note Memory-mapped I/O::.

`mode_t'
     `sys/types.h' (POSIX.1):  *note Attribute Meanings::.

`double modf (double VALUE, double *INTEGER-PART)'
     `math.h' (ISO):  *note Rounding Functions::.

`float modff (float VALUE, float *INTEGER-PART)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double modfl (long double VALUE, long double *INTEGER-PART)'
     `math.h' (ISO):  *note Rounding Functions::.

`int mount (const char *SPECIAL_FILE, const char *DIR, const char *FSTYPE, unsigned long int OPTIONS, const void *DATA)'
     `sys/mount.h' (SVID, BSD):  *note Mount-Unmount-Remount::.

`long int mrand48 (void)'
     `stdlib.h' (SVID):  *note SVID Random::.

`int mrand48_r (struct drand48_data *BUFFER, double *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`void * mremap (void *ADDRESS, size_t LENGTH, size_t NEW_LENGTH, int FLAG)'
     `sys/mman.h' (GNU):  *note Memory-mapped I/O::.

`int MSG_DONTROUTE'
     `sys/socket.h' (BSD):  *note Socket Data Options::.

`int MSG_OOB'
     `sys/socket.h' (BSD):  *note Socket Data Options::.

`int MSG_PEEK'
     `sys/socket.h' (BSD):  *note Socket Data Options::.

`int msync (void *ADDRESS, size_t LENGTH, int FLAGS)'
     `sys/mman.h' (POSIX):  *note Memory-mapped I/O::.

`void mtrace (void)'
     `mcheck.h' (GNU):  *note Tracing malloc::.

`int munlock (const void *ADDR, size_t LEN)'
     `sys/mman.h' (POSIX.1b):  *note Page Lock Functions::.

`int munlockall (void)'
     `sys/mman.h' (POSIX.1b):  *note Page Lock Functions::.

`int munmap (void *ADDR, size_t LENGTH)'
     `sys/mman.h' (POSIX):  *note Memory-mapped I/O::.

`void muntrace (void)'
     `mcheck.h' (GNU):  *note Tracing malloc::.

`int NAME_MAX'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`float NAN'
     `math.h' (GNU):  *note Infinity and NaN::.

`double nan (const char *TAGP)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`float nanf (const char *TAGP)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`long double nanl (const char *TAGP)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`int nanosleep (const struct timespec *REQUESTED_TIME, struct timespec *REMAINING)'
     `time.h' (POSIX.1):  *note Sleeping::.

`int NCCS'
     `termios.h' (POSIX.1):  *note Mode Data Types::.

`double nearbyint (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`float nearbyintf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double nearbyintl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`NEW_TIME'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`NEW_TIME'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`double nextafter (double X, double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`float nextafterf (float X, float Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`long double nextafterl (long double X, long double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`double nexttoward (double X, long double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`float nexttowardf (float X, long double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`long double nexttowardl (long double X, long double Y)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`int nftw (const char *FILENAME, __nftw_func_t FUNC, int DESCRIPTORS, int FLAG)'
     `ftw.h' (XPG4.2):  *note Working with Directory Trees::.

`int nftw64 (const char *FILENAME, __nftw64_func_t FUNC, int DESCRIPTORS, int FLAG)'
     `ftw.h' (Unix98):  *note Working with Directory Trees::.

`__nftw64_func_t'
     `ftw.h' (GNU):  *note Working with Directory Trees::.

`__nftw_func_t'
     `ftw.h' (GNU):  *note Working with Directory Trees::.

`char * ngettext (const char *MSGID1, const char *MSGID2, unsigned long int N)'
     `libintl.h' (GNU):  *note Advanced gettext functions::.

`int NGROUPS_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`int nice (int INCREMENT)'
     `unistd.h' (BSD):  *note Traditional Scheduling Functions::.

`nlink_t'
     `sys/types.h' (POSIX.1):  *note Attribute Meanings::.

`char * nl_langinfo (nl_item ITEM)'
     `langinfo.h' (XOPEN):  *note The Elegant and Fast Way::.

`NO_ADDRESS'
     `netdb.h' (BSD):  *note Host Names::.

`tcflag_t NOFLSH'
     `termios.h' (POSIX.1):  *note Local Modes::.

`tcflag_t NOKERNINFO'
     `termios.h' (BSD):  *note Local Modes::.

`NO_RECOVERY'
     `netdb.h' (BSD):  *note Host Names::.

`long int nrand48 (unsigned short int XSUBI[3])'
     `stdlib.h' (SVID):  *note SVID Random::.

`int nrand48_r (unsigned short int XSUBI[3], struct drand48_data *BUFFER, long int *RESULT)'
     `stdlib.h' (GNU):  *note SVID Random::.

`int NSIG'
     `signal.h' (BSD):  *note Standard Signals::.

`uint32_t ntohl (uint32_t NETLONG)'
     `netinet/in.h' (BSD):  *note Byte Order::.

`uint16_t ntohs (uint16_t NETSHORT)'
     `netinet/in.h' (BSD):  *note Byte Order::.

`int ntp_adjtime (struct timex *TPTR)'
     `sys/timex.h' (GNU):  *note High Accuracy Clock::.

`int ntp_gettime (struct ntptimeval *TPTR)'
     `sys/timex.h' (GNU):  *note High Accuracy Clock::.

`void * NULL'
     `stddef.h' (ISO):  *note Null Pointer Constant::.

`int O_ACCMODE'
     `fcntl.h' (POSIX.1):  *note Access Modes::.

`int O_APPEND'
     `fcntl.h' (POSIX.1):  *note Operating Modes::.

`int O_ASYNC'
     `fcntl.h' (BSD):  *note Operating Modes::.

`void obstack_1grow (struct obstack *OBSTACK-PTR, char C)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_1grow_fast (struct obstack *OBSTACK-PTR, char C)'
     `obstack.h' (GNU):  *note Extra Fast Growing::.

`int obstack_alignment_mask (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Obstacks Data Alignment::.

`void * obstack_alloc (struct obstack *OBSTACK-PTR, int SIZE)'
     `obstack.h' (GNU):  *note Allocation in an Obstack::.

`obstack_alloc_failed_handler'
     `obstack.h' (GNU):  *note Preparing for Obstacks::.

`void * obstack_base (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Status of an Obstack::.

`void obstack_blank (struct obstack *OBSTACK-PTR, int SIZE)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_blank_fast (struct obstack *OBSTACK-PTR, int SIZE)'
     `obstack.h' (GNU):  *note Extra Fast Growing::.

`int obstack_chunk_size (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Obstack Chunks::.

`void * obstack_copy (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
     `obstack.h' (GNU):  *note Allocation in an Obstack::.

`void * obstack_copy0 (struct obstack *OBSTACK-PTR, void *ADDRESS, int SIZE)'
     `obstack.h' (GNU):  *note Allocation in an Obstack::.

`void * obstack_finish (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_free (struct obstack *OBSTACK-PTR, void *OBJECT)'
     `obstack.h' (GNU):  *note Freeing Obstack Objects::.

`void obstack_grow (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_grow0 (struct obstack *OBSTACK-PTR, void *DATA, int SIZE)'
     `obstack.h' (GNU):  *note Growing Objects::.

`int obstack_init (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Preparing for Obstacks::.

`void obstack_int_grow (struct obstack *OBSTACK-PTR, int DATA)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_int_grow_fast (struct obstack *OBSTACK-PTR, int DATA)'
     `obstack.h' (GNU):  *note Extra Fast Growing::.

`void * obstack_next_free (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Status of an Obstack::.

`int obstack_object_size (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Growing Objects::.

`int obstack_object_size (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Status of an Obstack::.

`int obstack_printf (struct obstack *OBSTACK, const char *TEMPLATE, ...)'
     `stdio.h' (GNU):  *note Dynamic Output::.

`void obstack_ptr_grow (struct obstack *OBSTACK-PTR, void *DATA)'
     `obstack.h' (GNU):  *note Growing Objects::.

`void obstack_ptr_grow_fast (struct obstack *OBSTACK-PTR, void *DATA)'
     `obstack.h' (GNU):  *note Extra Fast Growing::.

`int obstack_room (struct obstack *OBSTACK-PTR)'
     `obstack.h' (GNU):  *note Extra Fast Growing::.

`int obstack_vprintf (struct obstack *OBSTACK, const char *TEMPLATE, va_list AP)'
     `stdio.h' (GNU):  *note Variable Arguments Output::.

`int O_CREAT'
     `fcntl.h' (POSIX.1):  *note Open-time Flags::.

`int O_EXCL'
     `fcntl.h' (POSIX.1):  *note Open-time Flags::.

`int O_EXEC'
     `fcntl.h' (GNU):  *note Access Modes::.

`int O_EXLOCK'
     `fcntl.h' (BSD):  *note Open-time Flags::.

`off64_t'
     `sys/types.h' (Unix98):  *note File Position Primitive::.

`size_t offsetof (TYPE, MEMBER)'
     `stddef.h' (ISO):  *note Structure Measurement::.

`off_t'
     `sys/types.h' (POSIX.1):  *note File Position Primitive::.

`int O_FSYNC'
     `fcntl.h' (BSD):  *note Operating Modes::.

`int O_IGNORE_CTTY'
     `fcntl.h' (GNU):  *note Open-time Flags::.

`OLD_TIME'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`OLD_TIME'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int O_NDELAY'
     `fcntl.h' (BSD):  *note Operating Modes::.

`int on_exit (void (*FUNCTION)(int STATUS, void *ARG), void *ARG)'
     `stdlib.h' (SunOS):  *note Cleanups on Exit::.

`tcflag_t ONLCR'
     `termios.h' (BSD):  *note Output Modes::.

`int O_NOATIME'
     `fcntl.h' (GNU):  *note Operating Modes::.

`int O_NOCTTY'
     `fcntl.h' (POSIX.1):  *note Open-time Flags::.

`tcflag_t ONOEOT'
     `termios.h' (BSD):  *note Output Modes::.

`int O_NOLINK'
     `fcntl.h' (GNU):  *note Open-time Flags::.

`int O_NONBLOCK'
     `fcntl.h' (POSIX.1):  *note Open-time Flags::.

`int O_NONBLOCK'
     `fcntl.h' (POSIX.1):  *note Operating Modes::.

`int O_NOTRANS'
     `fcntl.h' (GNU):  *note Open-time Flags::.

`int open (const char *FILENAME, int FLAGS[, mode_t MODE])'
     `fcntl.h' (POSIX.1):  *note Opening and Closing Files::.

`int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])'
     `fcntl.h' (Unix98):  *note Opening and Closing Files::.

`DIR * opendir (const char *DIRNAME)'
     `dirent.h' (POSIX.1):  *note Opening a Directory::.

`void openlog (const char *IDENT, int OPTION, int FACILITY)'
     `syslog.h' (BSD):  *note openlog::.

`int OPEN_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`FILE * open_memstream (char **PTR, size_t *SIZELOC)'
     `stdio.h' (GNU):  *note String Streams::.

`FILE * open_obstack_stream (struct obstack *OBSTACK)'
     `stdio.h' (GNU):  *note Obstack Streams::.

`int openpty (int *AMASTER, int *ASLAVE, char *NAME, const struct termios *TERMP, const struct winsize *WINP)'
     `pty.h' (BSD):  *note Pseudo-Terminal Pairs::.

`tcflag_t OPOST'
     `termios.h' (POSIX.1):  *note Output Modes::.

`char * optarg'
     `unistd.h' (POSIX.2):  *note Using Getopt::.

`int opterr'
     `unistd.h' (POSIX.2):  *note Using Getopt::.

`int optind'
     `unistd.h' (POSIX.2):  *note Using Getopt::.

`OPTION_ALIAS'
     `argp.h' (GNU):  *note Argp Option Flags::.

`OPTION_ARG_OPTIONAL'
     `argp.h' (GNU):  *note Argp Option Flags::.

`OPTION_DOC'
     `argp.h' (GNU):  *note Argp Option Flags::.

`OPTION_HIDDEN'
     `argp.h' (GNU):  *note Argp Option Flags::.

`OPTION_NO_USAGE'
     `argp.h' (GNU):  *note Argp Option Flags::.

`int optopt'
     `unistd.h' (POSIX.2):  *note Using Getopt::.

`int O_RDONLY'
     `fcntl.h' (POSIX.1):  *note Access Modes::.

`int O_RDWR'
     `fcntl.h' (POSIX.1):  *note Access Modes::.

`int O_READ'
     `fcntl.h' (GNU):  *note Access Modes::.

`int O_SHLOCK'
     `fcntl.h' (BSD):  *note Open-time Flags::.

`int O_SYNC'
     `fcntl.h' (BSD):  *note Operating Modes::.

`int O_TRUNC'
     `fcntl.h' (POSIX.1):  *note Open-time Flags::.

`int O_WRITE'
     `fcntl.h' (GNU):  *note Access Modes::.

`int O_WRONLY'
     `fcntl.h' (POSIX.1):  *note Access Modes::.

`tcflag_t OXTABS'
     `termios.h' (BSD):  *note Output Modes::.

`PA_CHAR'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_DOUBLE'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLAG_LONG'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLAG_LONG_DOUBLE'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLAG_LONG_LONG'
     `printf.h' (GNU):  *note Parsing a Template String::.

`int PA_FLAG_MASK'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLAG_PTR'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLAG_SHORT'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_FLOAT'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_INT'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_LAST'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_POINTER'
     `printf.h' (GNU):  *note Parsing a Template String::.

`tcflag_t PARENB'
     `termios.h' (POSIX.1):  *note Control Modes::.

`tcflag_t PARMRK'
     `termios.h' (POSIX.1):  *note Input Modes::.

`tcflag_t PARODD'
     `termios.h' (POSIX.1):  *note Control Modes::.

`size_t parse_printf_format (const char *TEMPLATE, size_t N, int *ARGTYPES)'
     `printf.h' (GNU):  *note Parsing a Template String::.

`PA_STRING'
     `printf.h' (GNU):  *note Parsing a Template String::.

`long int pathconf (const char *FILENAME, int PARAMETER)'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`int PATH_MAX'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`int pause ()'
     `unistd.h' (POSIX.1):  *note Using Pause::.

`_PC_ASYNC_IO'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_CHOWN_RESTRICTED'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_FILESIZEBITS'
     `unistd.h' (LFS):  *note Pathconf::.

`_PC_LINK_MAX'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`int pclose (FILE *STREAM)'
     `stdio.h' (POSIX.2, SVID, BSD):  *note Pipe to a Subprocess::.

`_PC_MAX_CANON'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_MAX_INPUT'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_NAME_MAX'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_NO_TRUNC'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_PATH_MAX'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_PIPE_BUF'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_PRIO_IO'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_REC_INCR_XFER_SIZE'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_REC_MAX_XFER_SIZE'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_REC_MIN_XFER_SIZE'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_REC_XFER_ALIGN'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_SYNC_IO'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`_PC_VDISABLE'
     `unistd.h' (POSIX.1):  *note Pathconf::.

`tcflag_t PENDIN'
     `termios.h' (BSD):  *note Local Modes::.

`void perror (const char *MESSAGE)'
     `stdio.h' (ISO):  *note Error Messages::.

`int PF_FILE'
     `sys/socket.h' (GNU):  *note Local Namespace Details::.

`int PF_INET'
     `sys/socket.h' (BSD):  *note Internet Namespace::.

`int PF_INET6'
     `sys/socket.h' (X/Open):  *note Internet Namespace::.

`int PF_LOCAL'
     `sys/socket.h' (POSIX):  *note Local Namespace Details::.

`int PF_UNIX'
     `sys/socket.h' (BSD):  *note Local Namespace Details::.

`pid_t'
     `sys/types.h' (POSIX.1):  *note Process Identification::.

`int pipe (int FILEDES[2])'
     `unistd.h' (POSIX.1):  *note Creating a Pipe::.

`int PIPE_BUF'
     `limits.h' (POSIX.1):  *note Limits for Files::.

`FILE * popen (const char *COMMAND, const char *MODE)'
     `stdio.h' (POSIX.2, SVID, BSD):  *note Pipe to a Subprocess::.

`_POSIX2_BC_BASE_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`_POSIX2_BC_DIM_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`_POSIX2_BC_SCALE_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`_POSIX2_BC_STRING_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`int _POSIX2_C_DEV'
     `unistd.h' (POSIX.2):  *note System Options::.

`_POSIX2_COLL_WEIGHTS_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`long int _POSIX2_C_VERSION'
     `unistd.h' (POSIX.2):  *note Version Supported::.

`_POSIX2_EQUIV_CLASS_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`_POSIX2_EXPR_NEST_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`int _POSIX2_FORT_DEV'
     `unistd.h' (POSIX.2):  *note System Options::.

`int _POSIX2_FORT_RUN'
     `unistd.h' (POSIX.2):  *note System Options::.

`_POSIX2_LINE_MAX'
     `limits.h' (POSIX.2):  *note Utility Minimums::.

`int _POSIX2_LOCALEDEF'
     `unistd.h' (POSIX.2):  *note System Options::.

`_POSIX2_RE_DUP_MAX'
     `limits.h' (POSIX.2):  *note Minimums::.

`int _POSIX2_SW_DEV'
     `unistd.h' (POSIX.2):  *note System Options::.

`_POSIX_AIO_LISTIO_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_AIO_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_ARG_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_CHILD_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`int _POSIX_CHOWN_RESTRICTED'
     `unistd.h' (POSIX.1):  *note Options for Files::.

`_POSIX_C_SOURCE'
     (POSIX.2):  *note Feature Test Macros::.

`int _POSIX_JOB_CONTROL'
     `unistd.h' (POSIX.1):  *note System Options::.

`_POSIX_LINK_MAX'
     `limits.h' (POSIX.1):  *note File Minimums::.

`_POSIX_MAX_CANON'
     `limits.h' (POSIX.1):  *note File Minimums::.

`_POSIX_MAX_INPUT'
     `limits.h' (POSIX.1):  *note File Minimums::.

`int posix_memalign (void **MEMPTR, size_t ALIGNMENT, size_t SIZE)'
     `stdlib.h' (POSIX):  *note Aligned Memory Blocks::.

`_POSIX_NAME_MAX'
     `limits.h' (POSIX.1):  *note File Minimums::.

`_POSIX_NGROUPS_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`int _POSIX_NO_TRUNC'
     `unistd.h' (POSIX.1):  *note Options for Files::.

`_POSIX_OPEN_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_PATH_MAX'
     `limits.h' (POSIX.1):  *note File Minimums::.

`_POSIX_PIPE_BUF'
     `limits.h' (POSIX.1):  *note File Minimums::.

`POSIX_REC_INCR_XFER_SIZE'
     `limits.h' (POSIX.1):  *note File Minimums::.

`POSIX_REC_MAX_XFER_SIZE'
     `limits.h' (POSIX.1):  *note File Minimums::.

`POSIX_REC_MIN_XFER_SIZE'
     `limits.h' (POSIX.1):  *note File Minimums::.

`POSIX_REC_XFER_ALIGN'
     `limits.h' (POSIX.1):  *note File Minimums::.

`int _POSIX_SAVED_IDS'
     `unistd.h' (POSIX.1):  *note System Options::.

`_POSIX_SOURCE'
     (POSIX.1):  *note Feature Test Macros::.

`_POSIX_SSIZE_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_STREAM_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`_POSIX_TZNAME_MAX'
     `limits.h' (POSIX.1):  *note Minimums::.

`unsigned char _POSIX_VDISABLE'
     `unistd.h' (POSIX.1):  *note Options for Files::.

`long int _POSIX_VERSION'
     `unistd.h' (POSIX.1):  *note Version Supported::.

`double pow (double BASE, double POWER)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`double pow10 (double X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`float pow10f (float X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`long double pow10l (long double X)'
     `math.h' (GNU):  *note Exponents and Logarithms::.

`float powf (float BASE, float POWER)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double powl (long double BASE, long double POWER)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)'
     `unistd.h' (Unix98):  *note I/O Primitives::.

`ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t OFFSET)'
     `unistd.h' (Unix98):  *note I/O Primitives::.

`int printf (const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Output Functions::.

`printf_arginfo_function'
     `printf.h' (GNU):  *note Defining the Output Handler::.

`printf_function'
     `printf.h' (GNU):  *note Defining the Output Handler::.

`int printf_size (FILE *FP, const struct printf_info *INFO, const void *const *ARGS)'
     `printf.h' (GNU):  *note Predefined Printf Handlers::.

`int printf_size_info (const struct printf_info *INFO, size_t N, int *ARGTYPES)'
     `printf.h' (GNU):  *note Predefined Printf Handlers::.

`PRIO_MAX'
     `sys/resource.h' (BSD):  *note Traditional Scheduling Functions::.

`PRIO_MIN'
     `sys/resource.h' (BSD):  *note Traditional Scheduling Functions::.

`PRIO_PGRP'
     `sys/resource.h' (BSD):  *note Traditional Scheduling Functions::.

`PRIO_PROCESS'
     `sys/resource.h' (BSD):  *note Traditional Scheduling Functions::.

`PRIO_USER'
     `sys/resource.h' (BSD):  *note Traditional Scheduling Functions::.

`char * program_invocation_name'
     `errno.h' (GNU):  *note Error Messages::.

`char * program_invocation_short_name'
     `errno.h' (GNU):  *note Error Messages::.

`void psignal (int SIGNUM, const char *MESSAGE)'
     `signal.h' (BSD):  *note Signal Messages::.

`char * P_tmpdir'
     `stdio.h' (SVID):  *note Temporary Files::.

`ptrdiff_t'
     `stddef.h' (ISO):  *note Important Data Types::.

`char * ptsname (int FILEDES)'
     `stdlib.h' (SVID, XPG4.2):  *note Allocation::.

`int ptsname_r (int FILEDES, char *BUF, size_t LEN)'
     `stdlib.h' (GNU):  *note Allocation::.

`int putc (int C, FILE *STREAM)'
     `stdio.h' (ISO):  *note Simple Output::.

`int putchar (int C)'
     `stdio.h' (ISO):  *note Simple Output::.

`int putchar_unlocked (int C)'
     `stdio.h' (POSIX):  *note Simple Output::.

`int putc_unlocked (int C, FILE *STREAM)'
     `stdio.h' (POSIX):  *note Simple Output::.

`int putenv (char *STRING)'
     `stdlib.h' (SVID):  *note Environment Access::.

`int putpwent (const struct passwd *P, FILE *STREAM)'
     `pwd.h' (SVID):  *note Writing a User Entry::.

`int puts (const char *S)'
     `stdio.h' (ISO):  *note Simple Output::.

`struct utmp * pututline (const struct utmp *UTMP)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`struct utmpx * pututxline (const struct utmpx *UTMP)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int putw (int W, FILE *STREAM)'
     `stdio.h' (SVID):  *note Simple Output::.

`wint_t putwc (wchar_t WC, FILE *STREAM)'
     `wchar.h' (ISO):  *note Simple Output::.

`wint_t putwchar (wchar_t WC)'
     `wchar.h' (ISO):  *note Simple Output::.

`wint_t putwchar_unlocked (wchar_t WC)'
     `wchar.h' (GNU):  *note Simple Output::.

`wint_t putwc_unlocked (wchar_t WC, FILE *STREAM)'
     `wchar.h' (GNU):  *note Simple Output::.

`ssize_t pwrite (int FILEDES, const void *BUFFER, size_t SIZE, off_t OFFSET)'
     `unistd.h' (Unix98):  *note I/O Primitives::.

`ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t SIZE, off64_t OFFSET)'
     `unistd.h' (Unix98):  *note I/O Primitives::.

`char * qecvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`int qecvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`char * qfcvt (long double VALUE, int NDIGIT, int *DECPT, int *NEG)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`int qfcvt_r (long double VALUE, int NDIGIT, int *DECPT, int *NEG, char *BUF, size_t LEN)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`char * qgcvt (long double VALUE, int NDIGIT, char *BUF)'
     `stdlib.h' (GNU):  *note System V Number Conversion::.

`void qsort (void *ARRAY, size_t COUNT, size_t SIZE, comparison_fn_t COMPARE)'
     `stdlib.h' (ISO):  *note Array Sort Function::.

`int raise (int SIGNUM)'
     `signal.h' (ISO):  *note Signaling Yourself::.

`int rand (void)'
     `stdlib.h' (ISO):  *note ISO Random::.

`int RAND_MAX'
     `stdlib.h' (ISO):  *note ISO Random::.

`long int random (void)'
     `stdlib.h' (BSD):  *note BSD Random::.

`int random_r (struct random_data *restrict BUF, int32_t *restrict RESULT)'
     `stdlib.h' (GNU):  *note BSD Random::.

`int rand_r (unsigned int *SEED)'
     `stdlib.h' (POSIX.1):  *note ISO Random::.

`void * rawmemchr (const void *BLOCK, int C)'
     `string.h' (GNU):  *note Search Functions::.

`ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)'
     `unistd.h' (POSIX.1):  *note I/O Primitives::.

`struct dirent * readdir (DIR *DIRSTREAM)'
     `dirent.h' (POSIX.1):  *note Reading/Closing Directory::.

`struct dirent64 * readdir64 (DIR *DIRSTREAM)'
     `dirent.h' (LFS):  *note Reading/Closing Directory::.

`int readdir64_r (DIR *DIRSTREAM, struct dirent64 *ENTRY, struct dirent64 **RESULT)'
     `dirent.h' (LFS):  *note Reading/Closing Directory::.

`int readdir_r (DIR *DIRSTREAM, struct dirent *ENTRY, struct dirent **RESULT)'
     `dirent.h' (GNU):  *note Reading/Closing Directory::.

`int readlink (const char *FILENAME, char *BUFFER, size_t SIZE)'
     `unistd.h' (BSD):  *note Symbolic Links::.

`ssize_t readv (int FILEDES, const struct iovec *VECTOR, int COUNT)'
     `sys/uio.h' (BSD):  *note Scatter-Gather::.

`void * realloc (void *PTR, size_t NEWSIZE)'
     `malloc.h', `stdlib.h' (ISO):  *note Changing Block Size::.

`__realloc_hook'
     `malloc.h' (GNU):  *note Hooks for Malloc::.

`char * realpath (const char *restrict NAME, char *restrict RESOLVED)'
     `stdlib.h' (XPG):  *note Symbolic Links::.

`int recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)'
     `sys/socket.h' (BSD):  *note Receiving Data::.

`int recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'
     `sys/socket.h' (BSD):  *note Receiving Datagrams::.

`int recvmsg (int SOCKET, struct msghdr *MESSAGE, int FLAGS)'
     `sys/socket.h' (BSD):  *note Receiving Datagrams::.

`int RE_DUP_MAX'
     `limits.h' (POSIX.2):  *note General Limits::.

`_REENTRANT'
     (GNU):  *note Feature Test Macros::.

`REG_BADBR'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_BADPAT'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_BADRPT'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`int regcomp (regex_t *restrict COMPILED, const char *restrict PATTERN, int CFLAGS)'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_EBRACE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_EBRACK'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_ECOLLATE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_ECTYPE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_EESCAPE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_EPAREN'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_ERANGE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`size_t regerror (int ERRCODE, const regex_t *restrict COMPILED, char *restrict BUFFER, size_t LENGTH)'
     `regex.h' (POSIX.2):  *note Regexp Cleanup::.

`REG_ESPACE'
     `regex.h' (POSIX.2):  *note Matching POSIX Regexps::.

`REG_ESPACE'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_ESUBREG'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`int regexec (const regex_t *restrict COMPILED, const char *restrict STRING, size_t NMATCH, regmatch_t MATCHPTR[restrict], int EFLAGS)'
     `regex.h' (POSIX.2):  *note Matching POSIX Regexps::.

`regex_t'
     `regex.h' (POSIX.2):  *note POSIX Regexp Compilation::.

`REG_EXTENDED'
     `regex.h' (POSIX.2):  *note Flags for POSIX Regexps::.

`void regfree (regex_t *COMPILED)'
     `regex.h' (POSIX.2):  *note Regexp Cleanup::.

`REG_ICASE'
     `regex.h' (POSIX.2):  *note Flags for POSIX Regexps::.

`int register_printf_function (int SPEC, printf_function HANDLER-FUNCTION, printf_arginfo_function ARGINFO-FUNCTION)'
     `printf.h' (GNU):  *note Registering New Conversions::.

`regmatch_t'
     `regex.h' (POSIX.2):  *note Regexp Subexpressions::.

`REG_NEWLINE'
     `regex.h' (POSIX.2):  *note Flags for POSIX Regexps::.

`REG_NOMATCH'
     `regex.h' (POSIX.2):  *note Matching POSIX Regexps::.

`REG_NOSUB'
     `regex.h' (POSIX.2):  *note Flags for POSIX Regexps::.

`REG_NOTBOL'
     `regex.h' (POSIX.2):  *note Matching POSIX Regexps::.

`REG_NOTEOL'
     `regex.h' (POSIX.2):  *note Matching POSIX Regexps::.

`regoff_t'
     `regex.h' (POSIX.2):  *note Regexp Subexpressions::.

`double remainder (double NUMERATOR, double DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`float remainderf (float NUMERATOR, float DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`long double remainderl (long double NUMERATOR, long double DENOMINATOR)'
     `math.h' (BSD):  *note Remainder Functions::.

`int remove (const char *FILENAME)'
     `stdio.h' (ISO):  *note Deleting Files::.

`int rename (const char *OLDNAME, const char *NEWNAME)'
     `stdio.h' (ISO):  *note Renaming Files::.

`void rewind (FILE *STREAM)'
     `stdio.h' (ISO):  *note File Positioning::.

`void rewinddir (DIR *DIRSTREAM)'
     `dirent.h' (POSIX.1):  *note Random Access Directory::.

`char * rindex (const char *STRING, int C)'
     `string.h' (BSD):  *note Search Functions::.

`double rint (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`float rintf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double rintl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`int RLIM_INFINITY'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_AS'
     `sys/resource.h' (Unix98):  *note Limits on Resources::.

`RLIMIT_CORE'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_CPU'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_DATA'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_FSIZE'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_MEMLOCK'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_NOFILE'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_NPROC'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_RSS'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIMIT_STACK'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`RLIM_NLIMITS'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`int rmdir (const char *FILENAME)'
     `unistd.h' (POSIX.1):  *note Deleting Files::.

`int R_OK'
     `unistd.h' (POSIX.1):  *note Testing File Access::.

`double round (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`float roundf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double roundl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`int rpmatch (const char *RESPONSE)'
     `stdlib.h' (stdlib.h):  *note Yes-or-No Questions::.

`RUN_LVL'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`RUN_LVL'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`RUSAGE_CHILDREN'
     `sys/resource.h' (BSD):  *note Resource Usage::.

`RUSAGE_SELF'
     `sys/resource.h' (BSD):  *note Resource Usage::.

`int SA_NOCLDSTOP'
     `signal.h' (POSIX.1):  *note Flags for Sigaction::.

`int SA_ONSTACK'
     `signal.h' (BSD):  *note Flags for Sigaction::.

`int SA_RESTART'
     `signal.h' (BSD):  *note Flags for Sigaction::.

`void *sbrk (ptrdiff_t DELTA)'
     `unistd.h' (BSD):  *note Resizing the Data Segment::.

`_SC_2_C_DEV'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_2_FORT_DEV'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_2_FORT_RUN'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_2_LOCALEDEF'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_2_SW_DEV'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_2_VERSION'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_AIO_LISTIO_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_AIO_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_AIO_PRIO_DELTA_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`double scalb (double VALUE, int EXPONENT)'
     `math.h' (BSD):  *note Normalization Functions::.

`float scalbf (float VALUE, int EXPONENT)'
     `math.h' (BSD):  *note Normalization Functions::.

`long double scalbl (long double VALUE, int EXPONENT)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalbln (double X, long int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalblnf (float X, long int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalblnl (long double X, long int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalbn (double X, int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalbnf (float X, int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int scalbnl (long double X, int n)'
     `math.h' (BSD):  *note Normalization Functions::.

`int scandir (const char *DIR, struct dirent ***NAMELIST, int (*SELECTOR) (const struct dirent *), int (*CMP) (const void *, const void *))'
     `dirent.h' (BSD/SVID):  *note Scanning Directory Content::.

`int scandir64 (const char *DIR, struct dirent64 ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int (*CMP) (const void *, const void *))'
     `dirent.h' (GNU):  *note Scanning Directory Content::.

`int scanf (const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Input Functions::.

`_SC_ARG_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_ASYNCHRONOUS_IO'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_ATEXIT_MAX'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_AVPHYS_PAGES'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_BC_BASE_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_BC_DIM_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_BC_SCALE_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_BC_STRING_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_CHAR_BIT'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_CHARCLASS_NAME_MAX'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_CHAR_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_CHAR_MIN'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_CHILD_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_CLK_TCK'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_COLL_WEIGHTS_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_DELAYTIMER_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_EQUIV_CLASS_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_EXPR_NEST_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_FSYNC'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_GETGR_R_SIZE_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_GETPW_R_SIZE_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`SCHAR_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`SCHAR_MIN'
     `limits.h' (ISO):  *note Range of Type::.

`int sched_getaffinity (pid_t PID, size_t CPUSETSIZE, cpu_set_t *CPUSET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`int sched_getparam (pid_t PID, const struct sched_param *PARAM)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_get_priority_max (int *POLICY);'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_get_priority_min (int *POLICY);'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_getscheduler (pid_t PID)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_rr_get_interval (pid_t PID, struct timespec *INTERVAL)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_setaffinity (pid_t PID, size_t CPUSETSIZE, const cpu_set_t *CPUSET)'
     `sched.h' (GNU):  *note CPU Affinity::.

`int sched_setparam (pid_t PID, const struct sched_param *PARAM)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_setscheduler (pid_t PID, int POLICY, const struct sched_param *PARAM)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`int sched_yield (void)'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`_SC_INT_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_INT_MIN'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_JOB_CONTROL'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_LINE_MAX'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_LOGIN_NAME_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_LONG_BIT'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_MAPPED_FILES'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MB_LEN_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_MEMLOCK'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MEMLOCK_RANGE'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MEMORY_PROTECTION'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MESSAGE_PASSING'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MQ_OPEN_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_MQ_PRIO_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_NGROUPS_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_NL_ARGMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NL_LANGMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NL_MSGMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NL_NMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NL_SETMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NL_TEXTMAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_NPROCESSORS_CONF'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_NPROCESSORS_ONLN'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_NZERO'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_OPEN_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_PAGESIZE'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_PHYS_PAGES'
     `unistd.h' (GNU):  *note Constants for Sysconf::.

`_SC_PII'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_INTERNET'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_INTERNET_DGRAM'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_INTERNET_STREAM'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_OSI'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_OSI_CLTS'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_OSI_COTS'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_OSI_M'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_SOCKET'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PII_XTI'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_PRIORITIZED_IO'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_PRIORITY_SCHEDULING'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_REALTIME_SIGNALS'
     `unistdh.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_RTSIG_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SAVED_IDS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SCHAR_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_SCHAR_MIN'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_SELECT'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_SEMAPHORES'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SEM_NSEMS_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SEM_VALUE_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SHARED_MEMORY_OBJECTS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SHRT_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_SHRT_MIN'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_SIGQUEUE_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`SC_SSIZE_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_STREAM_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_SYNCHRONIZED_IO'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_ATTR_STACKADDR'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_ATTR_STACKSIZE'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_DESTRUCTOR_ITERATIONS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_KEYS_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_PRIO_INHERIT'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_PRIO_PROTECT'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_PRIORITY_SCHEDULING'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_PROCESS_SHARED'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREADS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_SAFE_FUNCTIONS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_STACK_MIN'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_THREAD_THREADS_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_TIMER_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_TIMERS'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_T_IOV_MAX'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_TTY_NAME_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_TZNAME_MAX'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_UCHAR_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_UINT_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_UIO_MAXIOV'
     `unistd.h' (POSIX.1g):  *note Constants for Sysconf::.

`_SC_ULONG_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_USHRT_MAX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_VERSION'
     `unistd.h' (POSIX.1):  *note Constants for Sysconf::.

`_SC_VERSION'
     `unistd.h' (POSIX.2):  *note Constants for Sysconf::.

`_SC_WORD_BIT'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_CRYPT'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_ENH_I18N'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_LEGACY'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_REALTIME'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_REALTIME_THREADS'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_SHM'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_UNIX'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_VERSION'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_XCU_VERSION'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_XPG2'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_XPG3'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`_SC_XOPEN_XPG4'
     `unistd.h' (X/Open):  *note Constants for Sysconf::.

`unsigned short int * seed48 (unsigned short int SEED16V[3])'
     `stdlib.h' (SVID):  *note SVID Random::.

`int seed48_r (unsigned short int SEED16V[3], struct drand48_data *BUFFER)'
     `stdlib.h' (GNU):  *note SVID Random::.

`int SEEK_CUR'
     `stdio.h' (ISO):  *note File Positioning::.

`void seekdir (DIR *DIRSTREAM, long int POS)'
     `dirent.h' (BSD):  *note Random Access Directory::.

`int SEEK_END'
     `stdio.h' (ISO):  *note File Positioning::.

`int SEEK_SET'
     `stdio.h' (ISO):  *note File Positioning::.

`int select (int NFDS, fd_set *READ-FDS, fd_set *WRITE-FDS, fd_set *EXCEPT-FDS, struct timeval *TIMEOUT)'
     `sys/types.h' (BSD):  *note Waiting for I/O::.

`int send (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)'
     `sys/socket.h' (BSD):  *note Sending Data::.

`int sendmsg (int SOCKET, const struct msghdr *MESSAGE, int FLAGS)'
     `sys/socket.h' (BSD):  *note Receiving Datagrams::.

`int sendto (int SOCKET, void *BUFFER. size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)'
     `sys/socket.h' (BSD):  *note Sending Datagrams::.

`void setbuf (FILE *STREAM, char *BUF)'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)'
     `stdio.h' (BSD):  *note Controlling Buffering::.

`int setcontext (const ucontext_t *UCP)'
     `ucontext.h' (SVID):  *note System V contexts::.

`int setdomainname (const char *NAME, size_t LENGTH)'
     `unistd.h' (???):  *note Host Identification::.

`int setegid (gid_t NEWGID)'
     `unistd.h' (POSIX.1):  *note Setting Groups::.

`int setenv (const char *NAME, const char *VALUE, int REPLACE)'
     `stdlib.h' (BSD):  *note Environment Access::.

`int seteuid (uid_t NEWEUID)'
     `unistd.h' (POSIX.1):  *note Setting User ID::.

`int setfsent (void)'
     `fstab.h' (BSD):  *note fstab::.

`int setgid (gid_t NEWGID)'
     `unistd.h' (POSIX.1):  *note Setting Groups::.

`void setgrent (void)'
     `grp.h' (SVID, BSD):  *note Scanning All Groups::.

`int setgroups (size_t COUNT, gid_t *GROUPS)'
     `grp.h' (BSD):  *note Setting Groups::.

`void sethostent (int STAYOPEN)'
     `netdb.h' (BSD):  *note Host Names::.

`int sethostid (long int ID)'
     `unistd.h' (BSD):  *note Host Identification::.

`int sethostname (const char *NAME, size_t LENGTH)'
     `unistd.h' (BSD):  *note Host Identification::.

`int setitimer (int WHICH, struct itimerval *NEW, struct itimerval *OLD)'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`int setjmp (jmp_buf STATE)'
     `setjmp.h' (ISO):  *note Non-Local Details::.

`void setkey (const char *KEY)'
     `crypt.h' (BSD, SVID):  *note DES Encryption::.

`void setkey_r (const char *KEY, struct crypt_data * DATA)'
     `crypt.h' (GNU):  *note DES Encryption::.

`void setlinebuf (FILE *STREAM)'
     `stdio.h' (BSD):  *note Controlling Buffering::.

`char * setlocale (int CATEGORY, const char *LOCALE)'
     `locale.h' (ISO):  *note Setting the Locale::.

`int setlogmask (int MASK)'
     `syslog.h' (BSD):  *note setlogmask::.

`FILE * setmntent (const char *FILE, const char *MODE)'
     `mntent.h' (BSD):  *note mtab::.

`void setnetent (int STAYOPEN)'
     `netdb.h' (BSD):  *note Networks Database::.

`int setnetgrent (const char *NETGROUP)'
     `netdb.h' (BSD):  *note Lookup Netgroup::.

`int setpgid (pid_t PID, pid_t PGID)'
     `unistd.h' (POSIX.1):  *note Process Group Functions::.

`int setpgrp (pid_t PID, pid_t PGID)'
     `unistd.h' (BSD):  *note Process Group Functions::.

`int setpriority (int CLASS, int ID, int NICEVAL)'
     `sys/resource.h' (BSD,POSIX):  *note Traditional Scheduling
     Functions::.

`void setprotoent (int STAYOPEN)'
     `netdb.h' (BSD):  *note Protocols Database::.

`void setpwent (void)'
     `pwd.h' (SVID, BSD):  *note Scanning All Users::.

`int setregid (gid_t RGID, gid_t EGID)'
     `unistd.h' (BSD):  *note Setting Groups::.

`int setreuid (uid_t RUID, uid_t EUID)'
     `unistd.h' (BSD):  *note Setting User ID::.

`int setrlimit (int RESOURCE, const struct rlimit *RLP)'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`int setrlimit64 (int RESOURCE, const struct rlimit64 *RLP)'
     `sys/resource.h' (Unix98):  *note Limits on Resources::.

`void setservent (int STAYOPEN)'
     `netdb.h' (BSD):  *note Services Database::.

`pid_t setsid (void)'
     `unistd.h' (POSIX.1):  *note Process Group Functions::.

`int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void *OPTVAL, socklen_t OPTLEN)'
     `sys/socket.h' (BSD):  *note Socket Option Functions::.

`void * setstate (void *STATE)'
     `stdlib.h' (BSD):  *note BSD Random::.

`int setstate_r (char *restrict STATEBUF, struct random_data *restrict BUF)'
     `stdlib.h' (GNU):  *note BSD Random::.

`int settimeofday (const struct timeval *TP, const struct timezone *TZP)'
     `sys/time.h' (BSD):  *note High-Resolution Calendar::.

`int setuid (uid_t NEWUID)'
     `unistd.h' (POSIX.1):  *note Setting User ID::.

`void setutent (void)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`void setutxent (void)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t SIZE)'
     `stdio.h' (ISO):  *note Controlling Buffering::.

`SHRT_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`SHRT_MIN'
     `limits.h' (ISO):  *note Range of Type::.

`int shutdown (int SOCKET, int HOW)'
     `sys/socket.h' (BSD):  *note Closing a Socket::.

`S_IEXEC'
     `sys/stat.h' (BSD):  *note Permission Bits::.

`S_IFBLK'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFCHR'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFDIR'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFIFO'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFLNK'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`int S_IFMT'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFREG'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`S_IFSOCK'
     `sys/stat.h' (BSD):  *note Testing File Type::.

`int SIGABRT'
     `signal.h' (ISO):  *note Program Error Signals::.

`int sigaction (int SIGNUM, const struct sigaction *restrict ACTION, struct sigaction *restrict OLD-ACTION)'
     `signal.h' (POSIX.1):  *note Advanced Signal Handling::.

`int sigaddset (sigset_t *SET, int SIGNUM)'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`int SIGALRM'
     `signal.h' (POSIX.1):  *note Alarm Signals::.

`int sigaltstack (const stack_t *restrict STACK, stack_t *restrict OLDSTACK)'
     `signal.h' (XPG):  *note Signal Stack::.

`sig_atomic_t'
     `signal.h' (ISO):  *note Atomic Types::.

`SIG_BLOCK'
     `signal.h' (POSIX.1):  *note Process Signal Mask::.

`int sigblock (int MASK)'
     `signal.h' (BSD):  *note Blocking in BSD::.

`int SIGBUS'
     `signal.h' (BSD):  *note Program Error Signals::.

`int SIGCHLD'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`int SIGCLD'
     `signal.h' (SVID):  *note Job Control Signals::.

`int SIGCONT'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`int sigdelset (sigset_t *SET, int SIGNUM)'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`int sigemptyset (sigset_t *SET)'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`int SIGEMT'
     `signal.h' (BSD):  *note Program Error Signals::.

`sighandler_t SIG_ERR'
     `signal.h' (ISO):  *note Basic Signal Handling::.

`int sigfillset (sigset_t *SET)'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`int SIGFPE'
     `signal.h' (ISO):  *note Program Error Signals::.

`sighandler_t'
     `signal.h' (GNU):  *note Basic Signal Handling::.

`int SIGHUP'
     `signal.h' (POSIX.1):  *note Termination Signals::.

`int SIGILL'
     `signal.h' (ISO):  *note Program Error Signals::.

`int SIGINFO'
     `signal.h' (BSD):  *note Miscellaneous Signals::.

`int SIGINT'
     `signal.h' (ISO):  *note Termination Signals::.

`int siginterrupt (int SIGNUM, int FAILFLAG)'
     `signal.h' (BSD):  *note BSD Handler::.

`int SIGIO'
     `signal.h' (BSD):  *note Asynchronous I/O Signals::.

`int SIGIOT'
     `signal.h' (Unix):  *note Program Error Signals::.

`int sigismember (const sigset_t *SET, int SIGNUM)'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`sigjmp_buf'
     `setjmp.h' (POSIX.1):  *note Non-Local Exits and Signals::.

`int SIGKILL'
     `signal.h' (POSIX.1):  *note Termination Signals::.

`void siglongjmp (sigjmp_buf STATE, int VALUE)'
     `setjmp.h' (POSIX.1):  *note Non-Local Exits and Signals::.

`int SIGLOST'
     `signal.h' (GNU):  *note Operation Error Signals::.

`int sigmask (int SIGNUM)'
     `signal.h' (BSD):  *note Blocking in BSD::.

`sighandler_t signal (int SIGNUM, sighandler_t ACTION)'
     `signal.h' (ISO):  *note Basic Signal Handling::.

`int signbit (_float-type_ X)'
     `math.h' (ISO):  *note FP Bit Twiddling::.

`long long int significand (double X)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int significandf (float X)'
     `math.h' (BSD):  *note Normalization Functions::.

`long long int significandl (long double X)'
     `math.h' (BSD):  *note Normalization Functions::.

`int sigpause (int MASK)'
     `signal.h' (BSD):  *note Blocking in BSD::.

`int sigpending (sigset_t *SET)'
     `signal.h' (POSIX.1):  *note Checking for Pending Signals::.

`int SIGPIPE'
     `signal.h' (POSIX.1):  *note Operation Error Signals::.

`int SIGPOLL'
     `signal.h' (SVID):  *note Asynchronous I/O Signals::.

`int sigprocmask (int HOW, const sigset_t *restrict SET, sigset_t *restrict OLDSET)'
     `signal.h' (POSIX.1):  *note Process Signal Mask::.

`int SIGPROF'
     `signal.h' (BSD):  *note Alarm Signals::.

`int SIGQUIT'
     `signal.h' (POSIX.1):  *note Termination Signals::.

`int SIGSEGV'
     `signal.h' (ISO):  *note Program Error Signals::.

`int sigsetjmp (sigjmp_buf STATE, int SAVESIGS)'
     `setjmp.h' (POSIX.1):  *note Non-Local Exits and Signals::.

`SIG_SETMASK'
     `signal.h' (POSIX.1):  *note Process Signal Mask::.

`int sigsetmask (int MASK)'
     `signal.h' (BSD):  *note Blocking in BSD::.

`sigset_t'
     `signal.h' (POSIX.1):  *note Signal Sets::.

`int sigstack (const struct sigstack *STACK, struct sigstack *OLDSTACK)'
     `signal.h' (BSD):  *note Signal Stack::.

`int SIGSTOP'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`int sigsuspend (const sigset_t *SET)'
     `signal.h' (POSIX.1):  *note Sigsuspend::.

`int SIGSYS'
     `signal.h' (Unix):  *note Program Error Signals::.

`int SIGTERM'
     `signal.h' (ISO):  *note Termination Signals::.

`int SIGTRAP'
     `signal.h' (BSD):  *note Program Error Signals::.

`int SIGTSTP'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`int SIGTTIN'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`int SIGTTOU'
     `signal.h' (POSIX.1):  *note Job Control Signals::.

`SIG_UNBLOCK'
     `signal.h' (POSIX.1):  *note Process Signal Mask::.

`int SIGURG'
     `signal.h' (BSD):  *note Asynchronous I/O Signals::.

`int SIGUSR1'
     `signal.h' (POSIX.1):  *note Miscellaneous Signals::.

`int SIGUSR2'
     `signal.h' (POSIX.1):  *note Miscellaneous Signals::.

`int sigvec (int SIGNUM, const struct sigvec *ACTION,struct sigvec *OLD-ACTION)'
     `signal.h' (BSD):  *note BSD Handler::.

`int SIGVTALRM'
     `signal.h' (BSD):  *note Alarm Signals::.

`int SIGWINCH'
     `signal.h' (BSD):  *note Miscellaneous Signals::.

`int SIGXCPU'
     `signal.h' (BSD):  *note Operation Error Signals::.

`int SIGXFSZ'
     `signal.h' (BSD):  *note Operation Error Signals::.

`double sin (double X)'
     `math.h' (ISO):  *note Trig Functions::.

`void sincos (double X, double *SINX, double *COSX)'
     `math.h' (GNU):  *note Trig Functions::.

`void sincosf (float X, float *SINX, float *COSX)'
     `math.h' (GNU):  *note Trig Functions::.

`void sincosl (long double X, long double *SINX, long double *COSX)'
     `math.h' (GNU):  *note Trig Functions::.

`float sinf (float X)'
     `math.h' (ISO):  *note Trig Functions::.

`double sinh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float sinhf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double sinhl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double sinl (long double X)'
     `math.h' (ISO):  *note Trig Functions::.

`S_IREAD'
     `sys/stat.h' (BSD):  *note Permission Bits::.

`S_IRGRP'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IROTH'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IRUSR'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IRWXG'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IRWXO'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IRWXU'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`int S_ISBLK (mode_t M)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_ISCHR (mode_t M)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_ISDIR (mode_t M)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_ISFIFO (mode_t M)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`S_ISGID'
     `sys/stat.h' (POSIX):  *note Permission Bits::.

`int S_ISLNK (mode_t M)'
     `sys/stat.h' (GNU):  *note Testing File Type::.

`int S_ISREG (mode_t M)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_ISSOCK (mode_t M)'
     `sys/stat.h' (GNU):  *note Testing File Type::.

`S_ISUID'
     `sys/stat.h' (POSIX):  *note Permission Bits::.

`S_ISVTX'
     `sys/stat.h' (BSD):  *note Permission Bits::.

`S_IWGRP'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IWOTH'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IWRITE'
     `sys/stat.h' (BSD):  *note Permission Bits::.

`S_IWUSR'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IXGRP'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IXOTH'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`S_IXUSR'
     `sys/stat.h' (POSIX.1):  *note Permission Bits::.

`size_t'
     `stddef.h' (ISO):  *note Important Data Types::.

`unsigned int sleep (unsigned int SECONDS)'
     `unistd.h' (POSIX.1):  *note Sleeping::.

`int snprintf (char *S, size_t SIZE, const char *TEMPLATE, ...)'
     `stdio.h' (GNU):  *note Formatted Output Functions::.

`SO_BROADCAST'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`int SOCK_DGRAM'
     `sys/socket.h' (BSD):  *note Communication Styles::.

`int socket (int NAMESPACE, int STYLE, int PROTOCOL)'
     `sys/socket.h' (BSD):  *note Creating a Socket::.

`int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, int FILEDES[2])'
     `sys/socket.h' (BSD):  *note Socket Pairs::.

`int SOCK_RAW'
     `sys/socket.h' (BSD):  *note Communication Styles::.

`int SOCK_RDM'
     `sys/socket.h' (BSD):  *note Communication Styles::.

`int SOCK_SEQPACKET'
     `sys/socket.h' (BSD):  *note Communication Styles::.

`int SOCK_STREAM'
     `sys/socket.h' (BSD):  *note Communication Styles::.

`SO_DEBUG'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_DONTROUTE'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_ERROR'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_KEEPALIVE'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_LINGER'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`int SOL_SOCKET'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_OOBINLINE'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_RCVBUF'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_REUSEADDR'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_SNDBUF'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`SO_STYLE'
     `sys/socket.h' (GNU):  *note Socket-Level Options::.

`SO_TYPE'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`speed_t'
     `termios.h' (POSIX.1):  *note Line Speed::.

`int sprintf (char *S, const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Output Functions::.

`double sqrt (double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`float sqrtf (float X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`long double sqrtl (long double X)'
     `math.h' (ISO):  *note Exponents and Logarithms::.

`void srand (unsigned int SEED)'
     `stdlib.h' (ISO):  *note ISO Random::.

`void srand48 (long int SEEDVAL)'
     `stdlib.h' (SVID):  *note SVID Random::.

`int srand48_r (long int SEEDVAL, struct drand48_data *BUFFER)'
     `stdlib.h' (GNU):  *note SVID Random::.

`void srandom (unsigned int SEED)'
     `stdlib.h' (BSD):  *note BSD Random::.

`int srandom_r (unsigned int SEED, struct random_data *BUF)'
     `stdlib.h' (GNU):  *note BSD Random::.

`int sscanf (const char *S, const char *TEMPLATE, ...)'
     `stdio.h' (ISO):  *note Formatted Input Functions::.

`sighandler_t ssignal (int SIGNUM, sighandler_t ACTION)'
     `signal.h' (SVID):  *note Basic Signal Handling::.

`int SSIZE_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`ssize_t'
     `unistd.h' (POSIX.1):  *note I/O Primitives::.

`stack_t'
     `signal.h' (XPG):  *note Signal Stack::.

`int stat (const char *FILENAME, struct stat *BUF)'
     `sys/stat.h' (POSIX.1):  *note Reading Attributes::.

`int stat64 (const char *FILENAME, struct stat64 *BUF)'
     `sys/stat.h' (Unix98):  *note Reading Attributes::.

`FILE * stderr'
     `stdio.h' (ISO):  *note Standard Streams::.

`STDERR_FILENO'
     `unistd.h' (POSIX.1):  *note Descriptors and Streams::.

`FILE * stdin'
     `stdio.h' (ISO):  *note Standard Streams::.

`STDIN_FILENO'
     `unistd.h' (POSIX.1):  *note Descriptors and Streams::.

`FILE * stdout'
     `stdio.h' (ISO):  *note Standard Streams::.

`STDOUT_FILENO'
     `unistd.h' (POSIX.1):  *note Descriptors and Streams::.

`int stime (time_t *NEWTIME)'
     `time.h' (SVID, XPG):  *note Simple Calendar Time::.

`char * stpcpy (char *restrict TO, const char *restrict FROM)'
     `string.h' (Unknown origin):  *note Copying and Concatenation::.

`char * stpncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)'
     `string.h' (GNU):  *note Copying and Concatenation::.

`int strcasecmp (const char *S1, const char *S2)'
     `string.h' (BSD):  *note String/Array Comparison::.

`char * strcasestr (const char *HAYSTACK, const char *NEEDLE)'
     `string.h' (GNU):  *note Search Functions::.

`char * strcat (char *restrict TO, const char *restrict FROM)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`char * strchr (const char *STRING, int C)'
     `string.h' (ISO):  *note Search Functions::.

`char * strchrnul (const char *STRING, int C)'
     `string.h' (GNU):  *note Search Functions::.

`int strcmp (const char *S1, const char *S2)'
     `string.h' (ISO):  *note String/Array Comparison::.

`int strcoll (const char *S1, const char *S2)'
     `string.h' (ISO):  *note Collation Functions::.

`char * strcpy (char *restrict TO, const char *restrict FROM)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`size_t strcspn (const char *STRING, const char *STOPSET)'
     `string.h' (ISO):  *note Search Functions::.

`char * strdup (const char *S)'
     `string.h' (SVID):  *note Copying and Concatenation::.

`char * strdupa (const char *S)'
     `string.h' (GNU):  *note Copying and Concatenation::.

`int STREAM_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`char * strerror (int ERRNUM)'
     `string.h' (ISO):  *note Error Messages::.

`char * strerror_r (int ERRNUM, char *BUF, size_t N)'
     `string.h' (GNU):  *note Error Messages::.

`char * strfry (char *STRING)'
     `string.h' (GNU):  *note strfry::.

`size_t strftime (char *S, size_t SIZE, const char *TEMPLATE, const struct tm *BROKENTIME)'
     `time.h' (ISO):  *note Formatting Calendar Time::.

`size_t strlen (const char *S)'
     `string.h' (ISO):  *note String Length::.

`int strncasecmp (const char *S1, const char *S2, size_t N)'
     `string.h' (BSD):  *note String/Array Comparison::.

`char * strncat (char *restrict TO, const char *restrict FROM, size_t SIZE)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`int strncmp (const char *S1, const char *S2, size_t SIZE)'
     `string.h' (ISO):  *note String/Array Comparison::.

`char * strncpy (char *restrict TO, const char *restrict FROM, size_t SIZE)'
     `string.h' (ISO):  *note Copying and Concatenation::.

`char * strndup (const char *S, size_t SIZE)'
     `string.h' (GNU):  *note Copying and Concatenation::.

`char * strndupa (const char *S, size_t SIZE)'
     `string.h' (GNU):  *note Copying and Concatenation::.

`size_t strnlen (const char *S, size_t MAXLEN)'
     `string.h' (GNU):  *note String Length::.

`char * strpbrk (const char *STRING, const char *STOPSET)'
     `string.h' (ISO):  *note Search Functions::.

`char * strptime (const char *S, const char *FMT, struct tm *TP)'
     `time.h' (XPG4):  *note Low-Level Time String Parsing::.

`char * strrchr (const char *STRING, int C)'
     `string.h' (ISO):  *note Search Functions::.

`char * strsep (char **STRING_PTR, const char *DELIMITER)'
     `string.h' (BSD):  *note Finding Tokens in a String::.

`char * strsignal (int SIGNUM)'
     `string.h' (GNU):  *note Signal Messages::.

`size_t strspn (const char *STRING, const char *SKIPSET)'
     `string.h' (ISO):  *note Search Functions::.

`char * strstr (const char *HAYSTACK, const char *NEEDLE)'
     `string.h' (ISO):  *note Search Functions::.

`double strtod (const char *restrict STRING, char **restrict TAILPTR)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`float strtof (const char *STRING, char **TAILPTR)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`intmax_t strtoimax (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `inttypes.h' (ISO):  *note Parsing of Integers::.

`char * strtok (char *restrict NEWSTRING, const char *restrict DELIMITERS)'
     `string.h' (ISO):  *note Finding Tokens in a String::.

`char * strtok_r (char *NEWSTRING, const char *DELIMITERS, char **SAVE_PTR)'
     `string.h' (POSIX):  *note Finding Tokens in a String::.

`long int strtol (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`long double strtold (const char *STRING, char **TAILPTR)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`long long int strtoll (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`long long int strtoq (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (BSD):  *note Parsing of Integers::.

`unsigned long int strtoul (const char *retrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`unsigned long long int strtoull (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (ISO):  *note Parsing of Integers::.

`uintmax_t strtoumax (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `inttypes.h' (ISO):  *note Parsing of Integers::.

`unsigned long long int strtouq (const char *restrict STRING, char **restrict TAILPTR, int BASE)'
     `stdlib.h' (BSD):  *note Parsing of Integers::.

`struct aiocb'
     `aio.h' (POSIX.1b):  *note Asynchronous I/O::.

`struct aiocb64'
     `aio.h' (POSIX.1b):  *note Asynchronous I/O::.

`struct aioinit'
     `aio.h' (GNU):  *note Configuration of AIO::.

`struct argp'
     `argp.h' (GNU):  *note Argp Parsers::.

`struct argp_child'
     `argp.h' (GNU):  *note Argp Children::.

`struct argp_option'
     `argp.h' (GNU):  *note Argp Option Vectors::.

`struct argp_state'
     `argp.h' (GNU):  *note Argp Parsing State::.

`struct dirent'
     `dirent.h' (POSIX.1):  *note Directory Entries::.

`struct exit_status'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`struct flock'
     `fcntl.h' (POSIX.1):  *note File Locks::.

`struct fstab'
     `fstab.h' (BSD):  *note fstab::.

`struct FTW'
     `ftw.h' (XPG4.2):  *note Working with Directory Trees::.

`struct __gconv_step'
     `gconv.h' (GNU):  *note glibc iconv Implementation::.

`struct __gconv_step_data'
     `gconv.h' (GNU):  *note glibc iconv Implementation::.

`struct group'
     `grp.h' (POSIX.1):  *note Group Data Structure::.

`struct hostent'
     `netdb.h' (BSD):  *note Host Names::.

`struct if_nameindex'
     `net/if.h' (IPv6 basic API):  *note Interface Naming::.

`struct in6_addr'
     `netinet/in.h' (IPv6 basic API):  *note Host Address Data Type::.

`struct in_addr'
     `netinet/in.h' (BSD):  *note Host Address Data Type::.

`struct iovec'
     `sys/uio.h' (BSD):  *note Scatter-Gather::.

`struct itimerval'
     `sys/time.h' (BSD):  *note Setting an Alarm::.

`struct lconv'
     `locale.h' (ISO):  *note The Lame Way to Locale Data::.

`struct linger'
     `sys/socket.h' (BSD):  *note Socket-Level Options::.

`struct mallinfo'
     `malloc.h' (GNU):  *note Statistics of Malloc::.

`struct mntent'
     `mntent.h' (BSD):  *note mtab::.

`struct msghdr'
     `sys/socket.h' (BSD):  *note Receiving Datagrams::.

`struct netent'
     `netdb.h' (BSD):  *note Networks Database::.

`struct obstack'
     `obstack.h' (GNU):  *note Creating Obstacks::.

`struct option'
     `getopt.h' (GNU):  *note Getopt Long Options::.

`struct passwd'
     `pwd.h' (POSIX.1):  *note User Data Structure::.

`struct printf_info'
     `printf.h' (GNU):  *note Conversion Specifier Options::.

`struct protoent'
     `netdb.h' (BSD):  *note Protocols Database::.

`struct random_data'
     `stdlib.h' (GNU):  *note BSD Random::.

`struct rlimit'
     `sys/resource.h' (BSD):  *note Limits on Resources::.

`struct rlimit64'
     `sys/resource.h' (Unix98):  *note Limits on Resources::.

`struct rusage'
     `sys/resource.h' (BSD):  *note Resource Usage::.

`struct sched_param'
     `sched.h' (POSIX):  *note Basic Scheduling Functions::.

`struct servent'
     `netdb.h' (BSD):  *note Services Database::.

`struct sgttyb'
     `termios.h' (BSD):  *note BSD Terminal Modes::.

`struct sigaction'
     `signal.h' (POSIX.1):  *note Advanced Signal Handling::.

`struct sigstack'
     `signal.h' (BSD):  *note Signal Stack::.

`struct sigvec'
     `signal.h' (BSD):  *note BSD Handler::.

`struct sockaddr'
     `sys/socket.h' (BSD):  *note Address Formats::.

`struct sockaddr_in'
     `netinet/in.h' (BSD):  *note Internet Address Formats::.

`struct sockaddr_un'
     `sys/un.h' (BSD):  *note Local Namespace Details::.

`struct stat'
     `sys/stat.h' (POSIX.1):  *note Attribute Meanings::.

`struct stat64'
     `sys/stat.h' (LFS):  *note Attribute Meanings::.

`struct termios'
     `termios.h' (POSIX.1):  *note Mode Data Types::.

`struct timespec'
     `sys/time.h' (POSIX.1):  *note Elapsed Time::.

`struct timeval'
     `sys/time.h' (BSD):  *note Elapsed Time::.

`struct timezone'
     `sys/time.h' (BSD):  *note High-Resolution Calendar::.

`struct tm'
     `time.h' (ISO):  *note Broken-down Time::.

`struct tms'
     `sys/times.h' (POSIX.1):  *note Processor Time::.

`struct utimbuf'
     `time.h' (POSIX.1):  *note File Times::.

`struct utsname'
     `sys/utsname.h' (POSIX.1):  *note Platform Type::.

`int strverscmp (const char *S1, const char *S2)'
     `string.h' (GNU):  *note String/Array Comparison::.

`size_t strxfrm (char *restrict TO, const char *restrict FROM, size_t SIZE)'
     `string.h' (ISO):  *note Collation Functions::.

`int stty (int FILEDES, struct sgttyb * attributes)'
     `sgtty.h' (BSD):  *note BSD Terminal Modes::.

`int S_TYPEISMQ (struct stat *S)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_TYPEISSEM (struct stat *S)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int S_TYPEISSHM (struct stat *S)'
     `sys/stat.h' (POSIX):  *note Testing File Type::.

`int SUN_LEN (_struct sockaddr_un *_ PTR)'
     `sys/un.h' (BSD):  *note Local Namespace Details::.

`_SVID_SOURCE'
     (GNU):  *note Feature Test Macros::.

`int SV_INTERRUPT'
     `signal.h' (BSD):  *note BSD Handler::.

`int SV_ONSTACK'
     `signal.h' (BSD):  *note BSD Handler::.

`int SV_RESETHAND'
     `signal.h' (Sun):  *note BSD Handler::.

`int swapcontext (ucontext_t *restrict OUCP, const ucontext_t *restrict UCP)'
     `ucontext.h' (SVID):  *note System V contexts::.

`int swprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, ...)'
     `wchar.h' (GNU):  *note Formatted Output Functions::.

`int swscanf (const wchar_t *WS, const char *TEMPLATE, ...)'
     `wchar.h' (ISO):  *note Formatted Input Functions::.

`int symlink (const char *OLDNAME, const char *NEWNAME)'
     `unistd.h' (BSD):  *note Symbolic Links::.

`SYMLINK_MAX'
     `limits.h' (POSIX.1):  *note File Minimums::.

`int sync (void)'
     `unistd.h' (X/Open):  *note Synchronizing I/O::.

`long int syscall (long int SYSNO, ...)'
     `unistd.h' (???):  *note System Calls::.

`long int sysconf (int PARAMETER)'
     `unistd.h' (POSIX.1):  *note Sysconf Definition::.

`int sysctl (int *NAMES, int NLEN, void *OLDVAL, size_t *OLDLENP, void *NEWVAL, size_t NEWLEN)'
     `sysctl.h' (BSD):  *note System Parameters::.

`void syslog (int FACILITY_PRIORITY, char *FORMAT, ...)'
     `syslog.h' (BSD):  *note syslog; vsyslog::.

`int system (const char *COMMAND)'
     `stdlib.h' (ISO):  *note Running a Command::.

`sighandler_t sysv_signal (int SIGNUM, sighandler_t ACTION)'
     `signal.h' (GNU):  *note Basic Signal Handling::.

`double tan (double X)'
     `math.h' (ISO):  *note Trig Functions::.

`float tanf (float X)'
     `math.h' (ISO):  *note Trig Functions::.

`double tanh (double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`float tanhf (float X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double tanhl (long double X)'
     `math.h' (ISO):  *note Hyperbolic Functions::.

`long double tanl (long double X)'
     `math.h' (ISO):  *note Trig Functions::.

`int tcdrain (int FILEDES)'
     `termios.h' (POSIX.1):  *note Line Control::.

`tcflag_t'
     `termios.h' (POSIX.1):  *note Mode Data Types::.

`int tcflow (int FILEDES, int ACTION)'
     `termios.h' (POSIX.1):  *note Line Control::.

`int tcflush (int FILEDES, int QUEUE)'
     `termios.h' (POSIX.1):  *note Line Control::.

`int tcgetattr (int FILEDES, struct termios *TERMIOS-P)'
     `termios.h' (POSIX.1):  *note Mode Functions::.

`pid_t tcgetpgrp (int FILEDES)'
     `unistd.h' (POSIX.1):  *note Terminal Access Functions::.

`pid_t tcgetsid (int FILDES)'
     `termios.h' (Unix98):  *note Terminal Access Functions::.

`TCSADRAIN'
     `termios.h' (POSIX.1):  *note Mode Functions::.

`TCSAFLUSH'
     `termios.h' (POSIX.1):  *note Mode Functions::.

`TCSANOW'
     `termios.h' (POSIX.1):  *note Mode Functions::.

`TCSASOFT'
     `termios.h' (BSD):  *note Mode Functions::.

`int tcsendbreak (int FILEDES, int DURATION)'
     `termios.h' (POSIX.1):  *note Line Control::.

`int tcsetattr (int FILEDES, int WHEN, const struct termios *TERMIOS-P)'
     `termios.h' (POSIX.1):  *note Mode Functions::.

`int tcsetpgrp (int FILEDES, pid_t PGID)'
     `unistd.h' (POSIX.1):  *note Terminal Access Functions::.

`void * tdelete (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)'
     `search.h' (SVID):  *note Tree Search Function::.

`void tdestroy (void *VROOT, __free_fn_t FREEFCT)'
     `search.h' (GNU):  *note Tree Search Function::.

`TEMP_FAILURE_RETRY (EXPRESSION)'
     `unistd.h' (GNU):  *note Interrupted Primitives::.

`char * tempnam (const char *DIR, const char *PREFIX)'
     `stdio.h' (SVID):  *note Temporary Files::.

`char * textdomain (const char *DOMAINNAME)'
     `libintl.h' (GNU):  *note Locating gettext catalog::.

`void * tfind (const void *KEY, void *const *ROOTP, comparison_fn_t COMPAR)'
     `search.h' (SVID):  *note Tree Search Function::.

`double tgamma (double X)'
     `math.h' (XPG, ISO):  *note Special Functions::.

`float tgammaf (float X)'
     `math.h' (XPG, ISO):  *note Special Functions::.

`long double tgammal (long double X)'
     `math.h' (XPG, ISO):  *note Special Functions::.

`time_t time (time_t *RESULT)'
     `time.h' (ISO):  *note Simple Calendar Time::.

`time_t timegm (struct tm *BROKENTIME)'
     `time.h' (???):  *note Broken-down Time::.

`time_t timelocal (struct tm *BROKENTIME)'
     `time.h' (???):  *note Broken-down Time::.

`clock_t times (struct tms *BUFFER)'
     `sys/times.h' (POSIX.1):  *note Processor Time::.

`time_t'
     `time.h' (ISO):  *note Simple Calendar Time::.

`long int timezone'
     `time.h' (SVID):  *note Time Zone Functions::.

`FILE * tmpfile (void)'
     `stdio.h' (ISO):  *note Temporary Files::.

`FILE * tmpfile64 (void)'
     `stdio.h' (Unix98):  *note Temporary Files::.

`int TMP_MAX'
     `stdio.h' (ISO):  *note Temporary Files::.

`char * tmpnam (char *RESULT)'
     `stdio.h' (ISO):  *note Temporary Files::.

`char * tmpnam_r (char *RESULT)'
     `stdio.h' (GNU):  *note Temporary Files::.

`int toascii (int C)'
     `ctype.h' (SVID, BSD):  *note Case Conversion::.

`int _tolower (int C)'
     `ctype.h' (SVID):  *note Case Conversion::.

`int tolower (int C)'
     `ctype.h' (ISO):  *note Case Conversion::.

`tcflag_t TOSTOP'
     `termios.h' (POSIX.1):  *note Local Modes::.

`int _toupper (int C)'
     `ctype.h' (SVID):  *note Case Conversion::.

`int toupper (int C)'
     `ctype.h' (ISO):  *note Case Conversion::.

`wint_t towctrans (wint_t WC, wctrans_t DESC)'
     `wctype.h' (ISO):  *note Wide Character Case Conversion::.

`wint_t towlower (wint_t WC)'
     `wctype.h' (ISO):  *note Wide Character Case Conversion::.

`wint_t towupper (wint_t WC)'
     `wctype.h' (ISO):  *note Wide Character Case Conversion::.

`double trunc (double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`int truncate (const char *FILENAME, off_t LENGTH)'
     `unistd.h' (X/Open):  *note File Size::.

`int truncate64 (const char *NAME, off64_t LENGTH)'
     `unistd.h' (Unix98):  *note File Size::.

`float truncf (float X)'
     `math.h' (ISO):  *note Rounding Functions::.

`long double truncl (long double X)'
     `math.h' (ISO):  *note Rounding Functions::.

`TRY_AGAIN'
     `netdb.h' (BSD):  *note Host Names::.

`void * tsearch (const void *KEY, void **ROOTP, comparison_fn_t COMPAR)'
     `search.h' (SVID):  *note Tree Search Function::.

`char * ttyname (int FILEDES)'
     `unistd.h' (POSIX.1):  *note Is It a Terminal::.

`int ttyname_r (int FILEDES, char *BUF, size_t LEN)'
     `unistd.h' (POSIX.1):  *note Is It a Terminal::.

`void twalk (const void *ROOT, __action_fn_t ACTION)'
     `search.h' (SVID):  *note Tree Search Function::.

`char * tzname [2]'
     `time.h' (POSIX.1):  *note Time Zone Functions::.

`int TZNAME_MAX'
     `limits.h' (POSIX.1):  *note General Limits::.

`void tzset (void)'
     `time.h' (POSIX.1):  *note Time Zone Functions::.

`UCHAR_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`ucontext_t'
     `ucontext.h' (SVID):  *note System V contexts::.

`uid_t'
     `sys/types.h' (POSIX.1):  *note Reading Persona::.

`UINT_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`int ulimit (int CMD, ...)'
     `ulimit.h' (BSD):  *note Limits on Resources::.

`ULONG_LONG_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`ULONG_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`mode_t umask (mode_t MASK)'
     `sys/stat.h' (POSIX.1):  *note Setting Permissions::.

`int umount (const char *FILE)'
     `sys/mount.h' (SVID, GNU):  *note Mount-Unmount-Remount::.

`int umount2 (const char *FILE, int FLAGS)'
     `sys/mount.h' (GNU):  *note Mount-Unmount-Remount::.

`int uname (struct utsname *INFO)'
     `sys/utsname.h' (POSIX.1):  *note Platform Type::.

`int ungetc (int C, FILE *STREAM)'
     `stdio.h' (ISO):  *note How Unread::.

`wint_t ungetwc (wint_t WC, FILE *STREAM)'
     `wchar.h' (ISO):  *note How Unread::.

`union wait'
     `sys/wait.h' (BSD):  *note BSD Wait Functions::.

`int unlink (const char *FILENAME)'
     `unistd.h' (POSIX.1):  *note Deleting Files::.

`int unlockpt (int FILEDES)'
     `stdlib.h' (SVID, XPG4.2):  *note Allocation::.

`int unsetenv (const char *NAME)'
     `stdlib.h' (BSD):  *note Environment Access::.

`void updwtmp (const char *WTMP_FILE, const struct utmp *UTMP)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`USER_PROCESS'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`USER_PROCESS'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`USHRT_MAX'
     `limits.h' (ISO):  *note Range of Type::.

`int utime (const char *FILENAME, const struct utimbuf *TIMES)'
     `time.h' (POSIX.1):  *note File Times::.

`int utimes (const char *FILENAME, struct timeval TVP[2])'
     `sys/time.h' (BSD):  *note File Times::.

`int utmpname (const char *FILE)'
     `utmp.h' (SVID):  *note Manipulating the Database::.

`int utmpxname (const char *FILE)'
     `utmpx.h' (XPG4.2):  *note XPG Functions::.

`va_alist'
     `varargs.h' (Unix):  *note Old Varargs::.

`TYPE va_arg (va_list AP, TYPE)'
     `stdarg.h' (ISO):  *note Argument Macros::.

`void __va_copy (va_list DEST, va_list SRC)'
     `stdarg.h' (GNU):  *note Argument Macros::.

`va_dcl'
     `varargs.h' (Unix):  *note Old Varargs::.

`void va_end (va_list AP)'
     `stdarg.h' (ISO):  *note Argument Macros::.

`va_list'
     `stdarg.h' (ISO):  *note Argument Macros::.

`void * valloc (size_t SIZE)'
     `malloc.h', `stdlib.h' (BSD):  *note Aligned Memory Blocks::.

`int vasprintf (char **PTR, const char *TEMPLATE, va_list AP)'
     `stdio.h' (GNU):  *note Variable Arguments Output::.

`void va_start (va_list AP)'
     `varargs.h' (Unix):  *note Old Varargs::.

`void va_start (va_list AP, LAST-REQUIRED)'
     `stdarg.h' (ISO):  *note Argument Macros::.

`int VDISCARD'
     `termios.h' (BSD):  *note Other Special::.

`int VDSUSP'
     `termios.h' (BSD):  *note Signal Characters::.

`int VEOF'
     `termios.h' (POSIX.1):  *note Editing Characters::.

`int VEOL'
     `termios.h' (POSIX.1):  *note Editing Characters::.

`int VEOL2'
     `termios.h' (BSD):  *note Editing Characters::.

`int VERASE'
     `termios.h' (POSIX.1):  *note Editing Characters::.

`void verr (int STATUS, const char *FORMAT, va_list)'
     `err.h' (BSD):  *note Error Messages::.

`void verrx (int STATUS, const char *FORMAT, va_list)'
     `err.h' (BSD):  *note Error Messages::.

`int versionsort (const void *A, const void *B)'
     `dirent.h' (GNU):  *note Scanning Directory Content::.

`int versionsort64 (const void *A, const void *B)'
     `dirent.h' (GNU):  *note Scanning Directory Content::.

`pid_t vfork (void)'
     `unistd.h' (BSD):  *note Creating a Process::.

`int vfprintf (FILE *STREAM, const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Output::.

`int vfscanf (FILE *STREAM, const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Input::.

`int vfwprintf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (ISO):  *note Variable Arguments Output::.

`int vfwscanf (FILE *STREAM, const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (ISO):  *note Variable Arguments Input::.

`int VINTR'
     `termios.h' (POSIX.1):  *note Signal Characters::.

`int VKILL'
     `termios.h' (POSIX.1):  *note Editing Characters::.

`int vlimit (int RESOURCE, int LIMIT)'
     `sys/vlimit.h' (BSD):  *note Limits on Resources::.

`int VLNEXT'
     `termios.h' (BSD):  *note Other Special::.

`int VMIN'
     `termios.h' (POSIX.1):  *note Noncanonical Input::.

`void (*) error_print_progname  (void)'
     `error.h' (GNU):  *note Error Messages::.

`int vprintf (const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Output::.

`int VQUIT'
     `termios.h' (POSIX.1):  *note Signal Characters::.

`int VREPRINT'
     `termios.h' (BSD):  *note Editing Characters::.

`int vscanf (const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Input::.

`int vsnprintf (char *S, size_t SIZE, const char *TEMPLATE, va_list AP)'
     `stdio.h' (GNU):  *note Variable Arguments Output::.

`int vsprintf (char *S, const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Output::.

`int vsscanf (const char *S, const char *TEMPLATE, va_list AP)'
     `stdio.h' (ISO):  *note Variable Arguments Input::.

`int VSTART'
     `termios.h' (POSIX.1):  *note Start/Stop Characters::.

`int VSTATUS'
     `termios.h' (BSD):  *note Other Special::.

`int VSTOP'
     `termios.h' (POSIX.1):  *note Start/Stop Characters::.

`int VSUSP'
     `termios.h' (POSIX.1):  *note Signal Characters::.

`int vswprintf (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (GNU):  *note Variable Arguments Output::.

`int vswscanf (const wchar_t *S, const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (ISO):  *note Variable Arguments Input::.

`void vsyslog (int FACILITY_PRIORITY, char *FORMAT, va_list arglist)'
     `syslog.h' (BSD):  *note syslog; vsyslog::.

`int VTIME'
     `termios.h' (POSIX.1):  *note Noncanonical Input::.

`int vtimes (struct vtimes CURRENT, struct vtimes CHILD)'
     `vtimes.h' (vtimes.h):  *note Resource Usage::.

`void vwarn (const char *FORMAT, va_list)'
     `err.h' (BSD):  *note Error Messages::.

`void vwarnx (const char *FORMAT, va_list)'
     `err.h' (BSD):  *note Error Messages::.

`int VWERASE'
     `termios.h' (BSD):  *note Editing Characters::.

`int vwprintf (const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (ISO):  *note Variable Arguments Output::.

`int vwscanf (const wchar_t *TEMPLATE, va_list AP)'
     `wchar.h' (ISO):  *note Variable Arguments Input::.

`pid_t wait (int *STATUS-PTR)'
     `sys/wait.h' (POSIX.1):  *note Process Completion::.

`pid_t wait3 (union wait *STATUS-PTR, int OPTIONS, struct rusage *USAGE)'
     `sys/wait.h' (BSD):  *note BSD Wait Functions::.

`pid_t wait4 (pid_t PID, int *STATUS-PTR, int OPTIONS, struct rusage *USAGE)'
     `sys/wait.h' (BSD):  *note Process Completion::.

`pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion::.

`void warn (const char *FORMAT, ...)'
     `err.h' (BSD):  *note Error Messages::.

`void warnx (const char *FORMAT, ...)'
     `err.h' (BSD):  *note Error Messages::.

`WCHAR_MAX'
     `limits.h' (GNU):  *note Range of Type::.

`wint_t WCHAR_MAX'
     `wchar.h' (ISO):  *note Extended Char Intro::.

`wint_t WCHAR_MIN'
     `wchar.h' (ISO):  *note Extended Char Intro::.

`wchar_t'
     `stddef.h' (ISO):  *note Extended Char Intro::.

`int WCOREDUMP (int STATUS)'
     `sys/wait.h' (BSD):  *note Process Completion Status::.

`wchar_t * wcpcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
     `wchar.h' (GNU):  *note Copying and Concatenation::.

`wchar_t * wcpncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
     `wchar.h' (GNU):  *note Copying and Concatenation::.

`size_t wcrtomb (char *restrict S, wchar_t WC, mbstate_t *restrict PS)'
     `wchar.h' (ISO):  *note Converting a Character::.

`int wcscasecmp (const wchar_t *WS1, const wchar_T *WS2)'
     `wchar.h' (GNU):  *note String/Array Comparison::.

`wchar_t * wcscat (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`wchar_t * wcschr (const wchar_t *WSTRING, int WC)'
     `wchar.h' (ISO):  *note Search Functions::.

`wchar_t * wcschrnul (const wchar_t *WSTRING, wchar_t WC)'
     `wchar.h' (GNU):  *note Search Functions::.

`int wcscmp (const wchar_t *WS1, const wchar_t *WS2)'
     `wchar.h' (ISO):  *note String/Array Comparison::.

`int wcscoll (const wchar_t *WS1, const wchar_t *WS2)'
     `wchar.h' (ISO):  *note Collation Functions::.

`wchar_t * wcscpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`size_t wcscspn (const wchar_t *WSTRING, const wchar_t *STOPSET)'
     `wchar.h' (ISO):  *note Search Functions::.

`wchar_t * wcsdup (const wchar_t *WS)'
     `wchar.h' (GNU):  *note Copying and Concatenation::.

`size_t wcsftime (wchar_t *S, size_t SIZE, const wchar_t *TEMPLATE, const struct tm *BROKENTIME)'
     `time.h' (ISO/Amend1):  *note Formatting Calendar Time::.

`size_t wcslen (const wchar_t *WS)'
     `wchar.h' (ISO):  *note String Length::.

`int wcsncasecmp (const wchar_t *WS1, const wchar_t *S2, size_t N)'
     `wchar.h' (GNU):  *note String/Array Comparison::.

`wchar_t * wcsncat (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`int wcsncmp (const wchar_t *WS1, const wchar_t *WS2, size_t SIZE)'
     `wchar.h' (ISO):  *note String/Array Comparison::.

`wchar_t * wcsncpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`size_t wcsnlen (const wchar_t *WS, size_t MAXLEN)'
     `wchar.h' (GNU):  *note String Length::.

`size_t wcsnrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t NWC, size_t LEN, mbstate_t *restrict PS)'
     `wchar.h' (GNU):  *note Converting Strings::.

`wchar_t * wcspbrk (const wchar_t *WSTRING, const wchar_t *STOPSET)'
     `wchar.h' (ISO):  *note Search Functions::.

`wchar_t * wcsrchr (const wchar_t *WSTRING, wchar_t C)'
     `wchar.h' (ISO):  *note Search Functions::.

`size_t wcsrtombs (char *restrict DST, const wchar_t **restrict SRC, size_t LEN, mbstate_t *restrict PS)'
     `wchar.h' (ISO):  *note Converting Strings::.

`size_t wcsspn (const wchar_t *WSTRING, const wchar_t *SKIPSET)'
     `wchar.h' (ISO):  *note Search Functions::.

`wchar_t * wcsstr (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)'
     `wchar.h' (ISO):  *note Search Functions::.

`double wcstod (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR)'
     `wchar.h' (ISO):  *note Parsing of Floats::.

`float wcstof (const wchar_t *STRING, wchar_t **TAILPTR)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`intmax_t wcstoimax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`wchar_t * wcstok (wchar_t *NEWSTRING, const char *DELIMITERS)'
     `wchar.h' (ISO):  *note Finding Tokens in a String::.

`long int wcstol (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`long double wcstold (const wchar_t *STRING, wchar_t **TAILPTR)'
     `stdlib.h' (ISO):  *note Parsing of Floats::.

`long long int wcstoll (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`size_t wcstombs (char *STRING, const wchar_t *WSTRING, size_t SIZE)'
     `stdlib.h' (ISO):  *note Non-reentrant String Conversion::.

`long long int wcstoq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (GNU):  *note Parsing of Integers::.

`unsigned long int wcstoul (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`unsigned long long int wcstoull (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`uintmax_t wcstoumax (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (ISO):  *note Parsing of Integers::.

`unsigned long long int wcstouq (const wchar_t *restrict STRING, wchar_t **restrict TAILPTR, int BASE)'
     `wchar.h' (GNU):  *note Parsing of Integers::.

`wchar_t * wcswcs (const wchar_t *HAYSTACK, const wchar_t *NEEDLE)'
     `wchar.h' (XPG):  *note Search Functions::.

`size_t wcsxfrm (wchar_t *restrict WTO, const wchar_t *WFROM, size_t SIZE)'
     `wchar.h' (ISO):  *note Collation Functions::.

`int wctob (wint_t C)'
     `wchar.h' (ISO):  *note Converting a Character::.

`int wctomb (char *STRING, wchar_t WCHAR)'
     `stdlib.h' (ISO):  *note Non-reentrant Character Conversion::.

`wctrans_t wctrans (const char *PROPERTY)'
     `wctype.h' (ISO):  *note Wide Character Case Conversion::.

`wctrans_t'
     `wctype.h' (ISO):  *note Wide Character Case Conversion::.

`wctype_t wctype (const char *PROPERTY)'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`wctype_t'
     `wctype.h' (ISO):  *note Classification of Wide Characters::.

`int WEOF'
     `wchar.h' (ISO):  *note EOF and Errors::.

`wint_t WEOF'
     `wchar.h' (ISO):  *note Extended Char Intro::.

`int WEXITSTATUS (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`int WIFEXITED (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`int WIFSIGNALED (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`int WIFSTOPPED (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`wint_t'
     `wchar.h' (ISO):  *note Extended Char Intro::.

`wchar_t * wmemchr (const wchar_t *BLOCK, wchar_t WC, size_t SIZE)'
     `wchar.h' (ISO):  *note Search Functions::.

`int wmemcmp (const wchar_t *A1, const wchar_t *A2, size_t SIZE)'
     `wcjar.h' (ISO):  *note String/Array Comparison::.

`wchar_t * wmemcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`wchar_t * wmemmove (wchar *WTO, const wchar_t *WFROM, size_t SIZE)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`wchar_t * wmempcpy (wchar_t *restrict WTO, const wchar_t *restrict WFROM, size_t SIZE)'
     `wchar.h' (GNU):  *note Copying and Concatenation::.

`wchar_t * wmemset (wchar_t *BLOCK, wchar_t WC, size_t SIZE)'
     `wchar.h' (ISO):  *note Copying and Concatenation::.

`int W_OK'
     `unistd.h' (POSIX.1):  *note Testing File Access::.

`int wordexp (const char *WORDS, wordexp_t *WORD-VECTOR-PTR, int FLAGS)'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`wordexp_t'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`void wordfree (wordexp_t *WORD-VECTOR-PTR)'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`int wprintf (const wchar_t *TEMPLATE, ...)'
     `wchar.h' (ISO):  *note Formatted Output Functions::.

`WRDE_APPEND'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`WRDE_BADCHAR'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`WRDE_BADVAL'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`WRDE_CMDSUB'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`WRDE_DOOFFS'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`WRDE_NOCMD'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`WRDE_NOSPACE'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`WRDE_REUSE'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`WRDE_SHOWERR'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`WRDE_SYNTAX'
     `wordexp.h' (POSIX.2):  *note Calling Wordexp::.

`WRDE_UNDEF'
     `wordexp.h' (POSIX.2):  *note Flags for Wordexp::.

`ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)'
     `unistd.h' (POSIX.1):  *note I/O Primitives::.

`ssize_t writev (int FILEDES, const struct iovec *VECTOR, int COUNT)'
     `sys/uio.h' (BSD):  *note Scatter-Gather::.

`int wscanf (const wchar_t *TEMPLATE, ...)'
     `wchar.h' (ISO):  *note Formatted Input Functions::.

`int WSTOPSIG (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`int WTERMSIG (int STATUS)'
     `sys/wait.h' (POSIX.1):  *note Process Completion Status::.

`int X_OK'
     `unistd.h' (POSIX.1):  *note Testing File Access::.

`_XOPEN_SOURCE'
     (X/Open):  *note Feature Test Macros::.

`_XOPEN_SOURCE_EXTENDED'
     (X/Open):  *note Feature Test Macros::.

`double y0 (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float y0f (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double y0l (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`double y1 (double X)'
     `math.h' (SVID):  *note Special Functions::.

`float y1f (float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double y1l (long double X)'
     `math.h' (SVID):  *note Special Functions::.

`double yn (int n, double X)'
     `math.h' (SVID):  *note Special Functions::.

`float ynf (int n, float X)'
     `math.h' (SVID):  *note Special Functions::.

`long double ynl (int n, long double X)'
     `math.h' (SVID):  *note Special Functions::.



File: libc.info,  Node: Installation,  Next: Maintenance,  Prev: Library Summary,  Up: Top

Appendix C Installing the GNU C Library
***************************************

Before you do anything else, you should read the file `FAQ' located at
the top level of the source tree.  This file answers common questions
and describes problems you may experience with compilation and
installation.  It is updated more frequently than this manual.

   Features can be added to GNU Libc via "add-on" bundles.  These are
separate tar files, which you unpack into the top level of the source
tree.  Then you give `configure' the `--enable-add-ons' option to
activate them, and they will be compiled into the library.

   You will need recent versions of several GNU tools: definitely GCC
and GNU Make, and possibly others.  *Note Tools for Compilation::,
below.

* Menu:

* Configuring and compiling::   How to compile and test GNU libc.
* Running make install::        How to install it once you've got it
 compiled.
* Tools for Compilation::       You'll need these first.
* Linux::                       Specific advice for GNU/Linux systems.
* Reporting Bugs::              So they'll get fixed.


File: libc.info,  Node: Configuring and compiling,  Next: Running make install,  Up: Installation

C.1 Configuring and compiling GNU Libc
======================================

GNU libc cannot be compiled in the source directory.  You must build it
in a separate build directory.  For example, if you have unpacked the
glibc sources in `/src/gnu/glibc-2.4', create a directory
`/src/gnu/glibc-build' to put the object files in.  This allows
removing the whole build directory in case an error occurs, which is
the safest way to get a fresh start and should always be done.

   From your object directory, run the shell script `configure' located
at the top level of the source tree.  In the scenario above, you'd type

     $ ../glibc-2.4/configure ARGS...

   Please note that even though you're building in a separate build
directory, the compilation needs to modify a few files in the source
directory, especially some files in the manual subdirectory.

`configure' takes many options, but the only one that is usually
mandatory is `--prefix'.  This option tells `configure' where you want
glibc installed.  This defaults to `/usr/local', but the normal setting
to install as the standard system library is `--prefix=/usr' for
GNU/Linux systems and `--prefix=' (an empty prefix) for GNU/Hurd
systems.

   It may also be useful to set the CC and CFLAGS variables in the
environment when running `configure'.  CC selects the C compiler that
will be used, and CFLAGS sets optimization options for the compiler.

   The following list describes all of the available options for
`configure':

`--prefix=DIRECTORY'
     Install machine-independent data files in subdirectories of
     `DIRECTORY'.  The default is to install in `/usr/local'.

`--exec-prefix=DIRECTORY'
     Install the library and other machine-dependent files in
     subdirectories of `DIRECTORY'.  The default is to the `--prefix'
     directory if that option is specified, or `/usr/local' otherwise.

`--with-headers=DIRECTORY'
     Look for kernel header files in DIRECTORY, not `/usr/include'.
     Glibc needs information from the kernel's private header files.
     Glibc will normally look in `/usr/include' for them, but if you
     specify this option, it will look in DIRECTORY instead.

     This option is primarily of use on a system where the headers in
     `/usr/include' come from an older version of glibc.  Conflicts can
     occasionally happen in this case.  Note that Linux libc5 qualifies
     as an older version of glibc.  You can also use this option if you
     want to compile glibc with a newer set of kernel headers than the
     ones found in `/usr/include'.

`--enable-add-ons[=LIST]'
     Specify add-on packages to include in the build.  If this option is
     specified with no list, it enables all the add-on packages it
     finds in the main source directory; this is the default behavior.
     You may specify an explicit list of add-ons to use in LIST,
     separated by spaces or commas (if you use spaces, remember to
     quote them from the shell).  Each add-on in LIST can be an
     absolute directory name or can be a directory name relative to the
     main source directory, or relative to the build directory (that
     is, the current working directory).  For example,
     `--enable-add-ons=nptl,../glibc-libidn-2.4'.

`--enable-kernel=VERSION'
     This option is currently only useful on GNU/Linux systems.  The
     VERSION parameter should have the form X.Y.Z and describes the
     smallest version of the Linux kernel the generated library is
     expected to support.  The higher the VERSION number is, the less
     compatibility code is added, and the faster the code gets.

`--with-binutils=DIRECTORY'
     Use the binutils (assembler and linker) in `DIRECTORY', not the
     ones the C compiler would default to.  You can use this option if
     the default binutils on your system cannot deal with all the
     constructs in the GNU C library.  In that case, `configure' will
     detect the problem and suppress these constructs, so that the
     library will still be usable, but functionality may be lost--for
     example, you can't build a shared libc with old binutils.

`--without-fp'
     Use this option if your computer lacks hardware floating-point
     support and your operating system does not emulate an FPU.

     these

`--disable-shared'
     Don't build shared libraries even if it is possible.  Not all
     systems support shared libraries; you need ELF support and
     (currently) the GNU linker.

`--disable-profile'
     Don't build libraries with profiling information.  You may want to
     use this option if you don't plan to do profiling.

`--enable-omitfp'
     Use maximum optimization for the normal (static and shared)
     libraries, and compile separate static libraries with debugging
     information and no optimization.  We recommend not doing this.
     The extra optimization doesn't gain you much, it may provoke
     compiler bugs, and you won't be able to trace bugs through the C
     library.

`--disable-versioning'
     Don't compile the shared libraries with symbol version information.
     Doing this will make the resulting library incompatible with old
     binaries, so it's not recommended.

`--enable-static-nss'
     Compile static versions of the NSS (Name Service Switch) libraries.
     This is not recommended because it defeats the purpose of NSS; a
     program linked statically with the NSS libraries cannot be
     dynamically reconfigured to use a different name database.

`--without-tls'
     By default the C library is built with support for thread-local
     storage if the used tools support it.  By using `--without-tls'
     this can be prevented though there generally is no reason since it
     creates compatibility problems.

`--build=BUILD-SYSTEM'
`--host=HOST-SYSTEM'
     These options are for cross-compiling.  If you specify both
     options and BUILD-SYSTEM is different from HOST-SYSTEM, `configure'
     will prepare to cross-compile glibc from BUILD-SYSTEM to be used
     on HOST-SYSTEM.  You'll probably need the `--with-headers' option
     too, and you may have to override CONFIGURE's selection of the
     compiler and/or binutils.

     If you only specify `--host', `configure' will prepare for a
     native compile but use what you specify instead of guessing what
     your system is. This is most useful to change the CPU submodel.
     For example, if `configure' guesses your machine as
     `i586-pc-linux-gnu' but you want to compile a library for 386es,
     give `--host=i386-pc-linux-gnu' or just `--host=i386-linux' and add
     the appropriate compiler flags (`-mcpu=i386' will do the trick) to
     CFLAGS.

     If you specify just `--build', `configure' will get confused.

   To build the library and related programs, type `make'.  This will
produce a lot of output, some of which may look like errors from `make'
but isn't.  Look for error messages from `make' containing `***'.
Those indicate that something is seriously wrong.

   The compilation process can take a long time, depending on the
configuration and the speed of your machine.  Some complex modules may
take a very long time to compile, as much as several minutes on slower
machines.  Do not panic if the compiler appears to hang.

   If you want to run a parallel make, simply pass the `-j' option with
an appropriate numeric parameter to `make'.  You need a recent GNU
`make' version, though.

   To build and run test programs which exercise some of the library
facilities, type `make check'.  If it does not complete successfully,
do not use the built library, and report a bug after verifying that the
problem is not already known.  *Note Reporting Bugs::, for instructions
on reporting bugs.  Note that some of the tests assume they are not
being run by `root'.  We recommend you compile and test glibc as an
unprivileged user.

   Before reporting bugs make sure there is no problem with your system.
The tests (and later installation) use some pre-existing files of the
system such as `/etc/passwd', `/etc/nsswitch.conf' and others.  These
files must all contain correct and sensible content.

   To format the `GNU C Library Reference Manual' for printing, type
`make dvi'.  You need a working TeX installation to do this.  The
distribution already includes the on-line formatted version of the
manual, as Info files.  You can regenerate those with `make info', but
it shouldn't be necessary.

   The library has a number of special-purpose configuration parameters
which you can find in `Makeconfig'.  These can be overwritten with the
file `configparms'.  To change them, create a `configparms' in your
build directory and add values as appropriate for your system.  The
file is included and parsed by `make' and has to follow the conventions
for makefiles.

   It is easy to configure the GNU C library for cross-compilation by
setting a few variables in `configparms'.  Set `CC' to the
cross-compiler for the target you configured the library for; it is
important to use this same `CC' value when running `configure', like
this: `CC=TARGET-gcc configure TARGET'.  Set `BUILD_CC' to the compiler
to use for programs run on the build system as part of compiling the
library.  You may need to set `AR' and `RANLIB' to cross-compiling
versions of `ar' and `ranlib' if the native tools are not configured to
work with object files for the target you configured for.


File: libc.info,  Node: Running make install,  Next: Tools for Compilation,  Prev: Configuring and compiling,  Up: Installation

C.2 Installing the C Library
============================

To install the library and its header files, and the Info files of the
manual, type `env LANGUAGE=C LC_ALL=C make install'.  This will build
things, if necessary, before installing them; however, you should still
compile everything first.  If you are installing glibc as your primary
C library, we recommend that you shut the system down to single-user
mode first, and reboot afterward.  This minimizes the risk of breaking
things when the library changes out from underneath.

   If you're upgrading from Linux libc5 or some other C library, you
need to replace the `/usr/include' with a fresh directory before
installing it.  The new `/usr/include' should contain the Linux
headers, but nothing else.

   You must first build the library (`make'), optionally check it
(`make check'), switch the include directories and then install (`make
install').  The steps must be done in this order.  Not moving the
directory before install will result in an unusable mixture of header
files from both libraries, but configuring, building, and checking the
library requires the ability to compile and run programs against the old
library.

   If you are upgrading from a previous installation of glibc 2.0 or
2.1, `make install' will do the entire job.  You do not need to remove
the old includes - if you want to do so anyway you must then follow the
order given above.

   You may also need to reconfigure GCC to work with the new library.
The easiest way to do that is to figure out the compiler switches to
make it work again (`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should
work on GNU/Linux systems) and use them to recompile gcc.  You can also
edit the specs file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that
is a bit of a black art.

   You can install glibc somewhere other than where you configured it
to go by setting the `install_root' variable on the command line for
`make install'.  The value of this variable is prepended to all the
paths for installation.  This is useful when setting up a chroot
environment or preparing a binary distribution.  The directory should be
specified with an absolute file name.

   Glibc 2.2 includes a daemon called `nscd', which you may or may not
want to run.  `nscd' caches name service lookups; it can dramatically
improve performance with NIS+, and may help with DNS as well.

   One auxiliary program, `/usr/libexec/pt_chown', is installed setuid
`root'.  This program is invoked by the `grantpt' function; it sets the
permissions on a pseudoterminal so it can be used by the calling
process.  This means programs like `xterm' and `screen' do not have to
be setuid to get a pty.  (There may be other reasons why they need
privileges.)  If you are using a 2.1 or newer Linux kernel with the
`devptsfs' or `devfs' filesystems providing pty slaves, you don't need
this program; otherwise you do.  The source for `pt_chown' is in
`login/programs/pt_chown.c'.

   After installation you might want to configure the timezone and
locale installation of your system.  The GNU C library comes with a
locale database which gets configured with `localedef'.  For example, to
set up a German locale with name `de_DE', simply issue the command
`localedef -i de_DE -f ISO-8859-1 de_DE'.  To configure all locales
that are supported by glibc, you can issue from your build directory the
command `make localedata/install-locales'.

   To configure the locally used timezone, set the `TZ' environment
variable.  The script `tzselect' helps you to select the right value.
As an example, for Germany, `tzselect' would tell you to use
`TZ='Europe/Berlin''.  For a system wide installation (the given paths
are for an installation with `--prefix=/usr'), link the timezone file
which is in `/usr/share/zoneinfo' to the file `/etc/localtime'.  For
Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin
/etc/localtime'.


File: libc.info,  Node: Tools for Compilation,  Next: Linux,  Prev: Running make install,  Up: Installation

C.3 Recommended Tools for Compilation
=====================================

We recommend installing the following GNU tools before attempting to
build the GNU C library:

   * GNU `make' 3.79 or newer

     You need the latest version of GNU `make'.  Modifying the GNU C
     Library to work with other `make' programs would be so difficult
     that we recommend you port GNU `make' instead.  *Really.*  We
     recommend GNU `make' version 3.79.  All earlier versions have
     severe bugs or lack features.

   * GCC 3.4 or newer, GCC 4.1 recommended

     For the 2.4 release or later, GCC 3.4 or higher is required; as of
     this writing, GCC 4.4 is the compiler we advise to use for current
     versions.  On certain machines including `powerpc64', compilers
     prior to GCC 4.0 have bugs that prevent them compiling the C
     library code in the 2.4 release.  On other machines, GCC 4.1 is
     required to build the C library with support for the correct `long
     double' type format; these include `powerpc' (32 bit), `s390' and
     `s390x'.  For other architectures special compiler-provided
     headers are needed (like `cpuid.h' on x86) which only come with
     later compiler versions.

     You can use whatever compiler you like to compile programs that
     use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in
     their floating-point support that may be triggered by the math
     library.

     Check the FAQ for any special compiler issues on particular
     platforms.

   * GNU `binutils' 2.15 or later

     You must use GNU `binutils' (as and ld) to build the GNU C library.
     No other assembler or linker has the necessary functionality at the
     moment.

   * GNU `texinfo' 3.12f

     To correctly translate and install the Texinfo documentation you
     need this version of the `texinfo' package.  Earlier versions do
     not understand all the tags used in the document, and the
     installation mechanism for the info files is not present or works
     differently.

   * GNU `awk' 3.0, or higher

     `Awk' is used in several places to generate files.  `gawk' 3.0 is
     known to work.

   * Perl 5

     Perl is not required, but it is used if present to test the
     installation.  We may decide to use it elsewhere in the future.

   * GNU `sed' 3.02 or newer

     `Sed' is used in several places to generate files.  Most scripts
     work with any version of `sed'.  The known exception is the script
     `po2test.sed' in the `intl' subdirectory which is used to generate
     `msgs.h' for the test suite.  This script works correctly only
     with GNU `sed' 3.02.  If you like to run the test suite, you
     should definitely upgrade `sed'.


If you change any of the `configure.in' files you will also need

   * GNU `autoconf' 2.53 or higher

and if you change any of the message translation files you will need

   * GNU `gettext' 0.10.36 or later

You may also need these packages if you upgrade your source tree using
patches, although we try to avoid this.


File: libc.info,  Node: Linux,  Next: Reporting Bugs,  Prev: Tools for Compilation,  Up: Installation

C.4 Specific advice for GNU/Linux systems
=========================================

If you are installing GNU libc on a GNU/Linux system, you need to have
the header files from a 2.2 or newer kernel around for reference.  For
some architectures, like ia64, sh and hppa, you need at least headers
from kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64).  You do not need to
use that kernel, just have its headers where glibc can access at them.
The easiest way to do this is to unpack it in a directory such as
`/usr/src/linux-2.2.1'.  In that directory, run `make config' and
accept all the defaults.  Then run `make include/linux/version.h'.
Finally, configure glibc with the option
`--with-headers=/usr/src/linux-2.2.1/include'.  Use the most recent
kernel you can get your hands on.

   An alternate tactic is to unpack the 2.2 kernel and run `make
config' as above; then, rename or delete `/usr/include', create a new
`/usr/include', and make symbolic links of `/usr/include/linux' and
`/usr/include/asm' into the kernel sources.  You can then configure
glibc with no special options.  This tactic is recommended if you are
upgrading from libc5, since you need to get rid of the old header files
anyway.

   After installing GNU libc, you may need to remove or rename
`/usr/include/linux' and `/usr/include/asm', and replace them with
copies of `include/linux' and `include/asm-$ARCHITECTURE' taken from
the Linux source package which supplied kernel headers for building the
library.  ARCHITECTURE will be the machine architecture for which the
library was built, such as `i386' or `alpha'.  You do not need to do
this if you did not specify an alternate kernel header source using
`--with-headers'.  The intent here is that these directories should be
copies of, *not* symlinks to, the kernel headers used to build the
library.

   Note that `/usr/include/net' and `/usr/include/scsi' should *not* be
symlinks into the kernel sources.  GNU libc provides its own versions
of these files.

   GNU/Linux expects some components of the libc installation to be in
`/lib' and some in `/usr/lib'.  This is handled automatically if you
configure glibc with `--prefix=/usr'.  If you set some other prefix or
allow it to default to `/usr/local', then all the components are
installed there.

   If you are upgrading from libc5, you need to recompile every shared
library on your system against the new library for the sake of new code,
but keep the old libraries around for old binaries to use.  This is
complicated and difficult.  Consult the Glibc2 HOWTO at
`http://www.imaxx.net/~thrytis/glibc' for details.

   You cannot use `nscd' with 2.0 kernels, due to bugs in the
kernel-side thread support.  `nscd' happens to hit these bugs
particularly hard, but you might have problems with any threaded
program.


File: libc.info,  Node: Reporting Bugs,  Prev: Linux,  Up: Installation

C.5 Reporting Bugs
==================

There are probably bugs in the GNU C library.  There are certainly
errors and omissions in this manual.  If you report them, they will get
fixed.  If you don't, no one will ever know about them and they will
remain unfixed for all eternity, if not longer.

   It is a good idea to verify that the problem has not already been
reported.  Bugs are documented in two places: The file `BUGS' describes
a number of well known bugs and the upstream GNU C library bug tracking
system has a WWW interface at `http://sources.redhat.com/bugzilla/'.
The WWW interface gives you access to open and closed reports.  A
closed report normally includes a patch or a hint on solving the
problem.

   To report a bug, first you must find it.  With any luck, this will
be the hard part.  Once you've found a bug, make sure it's really a
bug.  A good way to do this is to see if the GNU C library behaves the
same way some other C library does.  If so, probably you are wrong and
the libraries are right (but not necessarily).  If not, one of the
libraries is probably wrong.  It might not be the GNU library.  Many
historical Unix C libraries permit things that we don't, such as
closing a file twice.

   If you think you have found some way in which the GNU C library does
not conform to the ISO and POSIX standards (*note Standards and
Portability::), that is definitely a bug.  Report it!

   Once you're sure you've found a bug, try to narrow it down to the
smallest test case that reproduces the problem.  In the case of a C
library, you really only need to narrow it down to one library function
call, if possible.  This should not be too difficult.

   The final step when you have a simple test case is to report the bug.
Do this at {No value for `REPORT_BUGS_TO'}.

   If you are not sure how a function should behave, and this manual
doesn't tell you, that's a bug in the manual.  Report that too!  If the
function's behavior disagrees with the manual, then either the library
or the manual has a bug, so report the disagreement.  If you find any
errors or omissions in this manual, please report them to the bug
database.  If you refer to specific sections of the manual, please
include the section names for easier identification.

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

Appendix D Library Maintenance
******************************

* Menu:

* Source Layout::         How to add new functions or header files
                             to the GNU C library.
* Porting::               How to port the GNU C library to
                             a new machine or operating system.

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

D.1 Adding New Functions
========================

The process of building the library is driven by the makefiles, which
make heavy use of special features of GNU `make'.  The makefiles are
very complex, and you probably don't want to try to understand them.
But what they do is fairly straightforward, and only requires that you
define a few variables in the right places.

   The library sources are divided into subdirectories, grouped by
topic.

   The `string' subdirectory has all the string-manipulation functions,
`math' has all the mathematical functions, etc.

   Each subdirectory contains a simple makefile, called `Makefile',
which defines a few `make' variables and then includes the global
makefile `Rules' with a line like:

     include ../Rules

The basic variables that a subdirectory makefile defines are:

`subdir'
     The name of the subdirectory, for example `stdio'.  This variable
     *must* be defined.

`headers'
     The names of the header files in this section of the library, such
     as `stdio.h'.

`routines'
`aux'
     The names of the modules (source files) in this section of the
     library.  These should be simple names, such as `strlen' (rather
     than complete file names, such as `strlen.c').  Use `routines' for
     modules that define functions in the library, and `aux' for
     auxiliary modules containing things like data definitions.  But the
     values of `routines' and `aux' are just concatenated, so there
     really is no practical difference.

`tests'
     The names of test programs for this section of the library.  These
     should be simple names, such as `tester' (rather than complete file
     names, such as `tester.c').  `make tests' will build and run all
     the test programs.  If a test program needs input, put the test
     data in a file called `TEST-PROGRAM.input'; it will be given to
     the test program on its standard input.  If a test program wants
     to be run with arguments, put the arguments (all on a single line)
     in a file called `TEST-PROGRAM.args'.  Test programs should exit
     with zero status when the test passes, and nonzero status when the
     test indicates a bug in the library or error in building.

`others'
     The names of "other" programs associated with this section of the
     library.  These are programs which are not tests per se, but are
     other small programs included with the library.  They are built by
     `make others'.

`install-lib'
`install-data'
`install'
     Files to be installed by `make install'.  Files listed in
     `install-lib' are installed in the directory specified by `libdir'
     in `configparms' or `Makeconfig' (*note Installation::).  Files
     listed in `install-data' are installed in the directory specified
     by `datadir' in `configparms' or `Makeconfig'.  Files listed in
     `install' are installed in the directory specified by `bindir' in
     `configparms' or `Makeconfig'.

`distribute'
     Other files from this subdirectory which should be put into a
     distribution tar file.  You need not list here the makefile itself
     or the source and header files listed in the other standard
     variables.  Only define `distribute' if there are files used in an
     unusual way that should go into the distribution.

`generated'
     Files which are generated by `Makefile' in this subdirectory.
     These files will be removed by `make clean', and they will never
     go into a distribution.

`extra-objs'
     Extra object files which are built by `Makefile' in this
     subdirectory.  This should be a list of file names like `foo.o';
     the files will actually be found in whatever directory object
     files are being built in.  These files will be removed by
     `make clean'.  This variable is used for secondary object files
     needed to build `others' or `tests'.


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; also, you must include the file
`<stub-tag.h>' into your file.  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 the GNU operating system).  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).

