This is libc.info, produced by makeinfo version 5.2 from libc.texinfo.

This file documents the GNU C Library.

   This is 'The GNU C Library Reference Manual', for version 2.19
(Buildroot).

   Copyright (C) 1993-2014 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."
INFO-DIR-SECTION Software libraries
START-INFO-DIR-ENTRY
* Libc: (libc).                 C library.
END-INFO-DIR-ENTRY

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


File: libc.info,  Node: Netgroup Database,  Prev: Database Example,  Up: Users and Groups

29.16 Netgroup Database
=======================

* Menu:

* Netgroup Data::                  Data in the Netgroup database and where
                                   it comes from.
* Lookup Netgroup::                How to look for a particular netgroup.
* Netgroup Membership::            How to test for netgroup membership.


File: libc.info,  Node: Netgroup Data,  Next: Lookup Netgroup,  Up: Netgroup Database

29.16.1 Netgroup Data
---------------------

Sometimes it is useful to group users according to other criteria (*note
Group Database::).  E.g., it is useful to associate a certain group of
users with a certain machine.  On the other hand grouping of host names
is not supported so far.

   In Sun Microsystems SunOS appeared a new kind of database, the
netgroup database.  It allows grouping hosts, users, and domains freely,
giving them individual names.  To be more concrete, a netgroup is a list
of triples consisting of a host name, a user name, and a domain name
where any of the entries can be a wildcard entry matching all inputs.  A
last possibility is that names of other netgroups can also be given in
the list specifying a netgroup.  So one can construct arbitrary
hierarchies without loops.

   Sun's implementation allows netgroups only for the 'nis' or 'nisplus'
service, *note Services in the NSS configuration::.  The implementation
in the GNU C Library has no such restriction.  An entry in either of the
input services must have the following form:

     GROUPNAME ( GROUPNAME | (HOSTNAME,USERNAME,domainname) )+

   Any of the fields in the triple can be empty which means anything
matches.  While describing the functions we will see that the opposite
case is useful as well.  I.e., there may be entries which will not match
any input.  For entries like this, a name consisting of the single
character '-' shall be used.


File: libc.info,  Node: Lookup Netgroup,  Next: Netgroup Membership,  Prev: Netgroup Data,  Up: Netgroup Database

29.16.2 Looking up one Netgroup
-------------------------------

The lookup functions for netgroups are a bit different to all other
system database handling functions.  Since a single netgroup can contain
many entries a two-step process is needed.  First a single netgroup is
selected and then one can iterate over all entries in this netgroup.
These functions are declared in 'netdb.h'.

 -- Function: int setnetgrent (const char *NETGROUP)
     Preliminary: | MT-Unsafe race:netgrent locale | AS-Unsafe dlopen
     plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
     Safety Concepts::.

     A call to this function initializes the internal state of the
     library to allow following calls of the 'getnetgrent' to iterate
     over all entries in the netgroup with name NETGROUP.

     When the call is successful (i.e., when a netgroup with this name
     exists) the return value is '1'.  When the return value is '0' no
     netgroup of this name is known or some other error occurred.

   It is important to remember that there is only one single state for
iterating the netgroups.  Even if the programmer uses the
'getnetgrent_r' function the result is not really reentrant since always
only one single netgroup at a time can be processed.  If the program
needs to process more than one netgroup simultaneously she must protect
this by using external locking.  This problem was introduced in the
original netgroups implementation in SunOS and since we must stay
compatible it is not possible to change this.

   Some other functions also use the netgroups state.  Currently these
are the 'innetgr' function and parts of the implementation of the
'compat' service part of the NSS implementation.

 -- Function: int getnetgrent (char **HOSTP, char **USERP, char
          **DOMAINP)
     Preliminary: | MT-Unsafe race:netgrent race:netgrentbuf locale |
     AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
     *Note POSIX Safety Concepts::.

     This function returns the next unprocessed entry of the currently
     selected netgroup.  The string pointers, in which addresses are
     passed in the arguments HOSTP, USERP, and DOMAINP, will contain
     after a successful call pointers to appropriate strings.  If the
     string in the next entry is empty the pointer has the value 'NULL'.
     The returned string pointers are only valid if none of the netgroup
     related functions are called.

     The return value is '1' if the next entry was successfully read.  A
     value of '0' means no further entries exist or internal errors
     occurred.

 -- Function: int getnetgrent_r (char **HOSTP, char **USERP, char
          **DOMAINP, char *BUFFER, size_t BUFLEN)
     Preliminary: | MT-Unsafe race:netgrent locale | AS-Unsafe dlopen
     plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
     Safety Concepts::.

     This function is similar to 'getnetgrent' with only one exception:
     the strings the three string pointers HOSTP, USERP, and DOMAINP
     point to, are placed in the buffer of BUFLEN bytes starting at
     BUFFER.  This means the returned values are valid even after other
     netgroup related functions are called.

     The return value is '1' if the next entry was successfully read and
     the buffer contains enough room to place the strings in it.  '0' is
     returned in case no more entries are found, the buffer is too
     small, or internal errors occurred.

     This function is a GNU extension.  The original implementation in
     the SunOS libc does not provide this function.

 -- Function: void endnetgrent (void)
     Preliminary: | MT-Unsafe race:netgrent | AS-Unsafe dlopen plugin
     heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX Safety
     Concepts::.

     This function frees all buffers which were allocated to process the
     last selected netgroup.  As a result all string pointers returned
     by calls to 'getnetgrent' are invalid afterwards.


File: libc.info,  Node: Netgroup Membership,  Prev: Lookup Netgroup,  Up: Netgroup Database

29.16.3 Testing for Netgroup Membership
---------------------------------------

It is often not necessary to scan the whole netgroup since often the
only interesting question is whether a given entry is part of the
selected netgroup.

 -- Function: int innetgr (const char *NETGROUP, const char *HOST, const
          char *USER, const char *DOMAIN)
     Preliminary: | MT-Unsafe race:netgrent locale | AS-Unsafe dlopen
     plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
     Safety Concepts::.

     This function tests whether the triple specified by the parameters
     HOSTP, USERP, and DOMAINP is part of the netgroup NETGROUP.  Using
     this function has the advantage that

       1. no other netgroup function can use the global netgroup state
          since internal locking is used and
       2. the function is implemented more efficiently than successive
          calls to the other 'set'/'get'/'endnetgrent' functions.

     Any of the pointers HOSTP, USERP, and DOMAINP can be 'NULL' which
     means any value is accepted in this position.  This is also true
     for the name '-' which should not match any other string otherwise.

     The return value is '1' if an entry matching the given triple is
     found in the netgroup.  The return value is '0' if the netgroup
     itself is not found, the netgroup does not contain the triple or
     internal errors occurred.


File: libc.info,  Node: System Management,  Next: System Configuration,  Prev: Users and Groups,  Up: Top

30 System Management
********************

This chapter describes facilities for controlling the system that
underlies a process (including the operating system and hardware) and
for getting information about it.  Anyone can generally use the
informational facilities, but usually only a properly privileged process
can make changes.

* Menu:

* Host Identification::         Determining the name of the machine.
* Platform Type::               Determining operating system and basic
                                  machine type
* Filesystem Handling::         Controlling/querying mounts
* System Parameters::           Getting and setting various system parameters

   To get information on parameters of the system that are built into
the system, such as the maximum length of a filename, *note System
Configuration::.


File: libc.info,  Node: Host Identification,  Next: Platform Type,  Up: System Management

30.1 Host Identification
========================

This section explains how to identify the particular system on which
your program is running.  First, let's review the various ways computer
systems are named, which is a little complicated because of the history
of the development of the Internet.

   Every Unix system (also known as a host) has a host name, whether
it's connected to a network or not.  In its simplest form, as used
before computer networks were an issue, it's just a word like 'chicken'.

   But any system attached to the Internet or any network like it
conforms to a more rigorous naming convention as part of the Domain Name
System (DNS). In DNS, every host name is composed of two parts:

  1. hostname
  2. domain name

   You will note that "hostname" looks a lot like "host name", but is
not the same thing, and that people often incorrectly refer to entire
host names as "domain names."

   In DNS, the full host name is properly called the FQDN (Fully
Qualified Domain Name) and consists of the hostname, then a period, then
the domain name.  The domain name itself usually has multiple components
separated by periods.  So for example, a system's hostname may be
'chicken' and its domain name might be 'ai.mit.edu', so its FQDN (which
is its host name) is 'chicken.ai.mit.edu'.

   Adding to the confusion, though, is that DNS is not the only name
space in which a computer needs to be known.  Another name space is the
NIS (aka YP) name space.  For NIS purposes, there is another domain
name, which is called the NIS domain name or the YP domain name.  It
need not have anything to do with the DNS domain name.

   Confusing things even more is the fact that in DNS, it is possible
for multiple FQDNs to refer to the same system.  However, there is
always exactly one of them that is the true host name, and it is called
the canonical FQDN.

   In some contexts, the host name is called a "node name."

   For more information on DNS host naming, see *note Host Names::.

   Prototypes for these functions appear in 'unistd.h'.

   The programs 'hostname', 'hostid', and 'domainname' work by calling
these functions.

 -- Function: int gethostname (char *NAME, size_t SIZE)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     This function returns the host name of the system on which it is
     called, in the array NAME.  The SIZE argument specifies the size of
     this array, in bytes.  Note that this is _not_ the DNS hostname.
     If the system participates in DNS, this is the FQDN (see above).

     The return value is '0' on success and '-1' on failure.  In the GNU
     C Library, 'gethostname' fails if SIZE is not large enough; then
     you can try again with a larger array.  The following 'errno' error
     condition is defined for this function:

     'ENAMETOOLONG'
          The SIZE argument is less than the size of the host name plus
          one.

     On some systems, there is a symbol for the maximum possible host
     name length: 'MAXHOSTNAMELEN'.  It is defined in 'sys/param.h'.
     But you can't count on this to exist, so it is cleaner to handle
     failure and try again.

     'gethostname' stores the beginning of the host name in NAME even if
     the host name won't entirely fit.  For some purposes, a truncated
     host name is good enough.  If it is, you can ignore the error code.

 -- Function: int sethostname (const char *NAME, size_t LENGTH)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     The 'sethostname' function sets the host name of the system that
     calls it to NAME, a string with length LENGTH.  Only privileged
     processes are permitted to do this.

     Usually 'sethostname' gets called just once, at system boot time.
     Often, the program that calls it sets it to the value it finds in
     the file '/etc/hostname'.

     Be sure to set the host name to the full host name, not just the
     DNS hostname (see above).

     The return value is '0' on success and '-1' on failure.  The
     following 'errno' error condition is defined for this function:

     'EPERM'
          This process cannot set the host name because it is not
          privileged.

 -- Function: int getdomainnname (char *NAME, size_t LENGTH)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'getdomainname' returns the NIS (aka YP) domain name of the system
     on which it is called.  Note that this is not the more popular DNS
     domain name.  Get that with 'gethostname'.

     The specifics of this function are analogous to 'gethostname',
     above.

 -- Function: int setdomainname (const char *NAME, size_t LENGTH)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'getdomainname' sets the NIS (aka YP) domain name of the system on
     which it is called.  Note that this is not the more popular DNS
     domain name.  Set that with 'sethostname'.

     The specifics of this function are analogous to 'sethostname',
     above.

 -- Function: long int gethostid (void)
     Preliminary: | MT-Safe hostid env locale | AS-Unsafe dlopen plugin
     corrupt heap lock | AC-Unsafe lock corrupt mem fd | *Note POSIX
     Safety Concepts::.

     This function returns the "host ID" of the machine the program is
     running on.  By convention, this is usually the primary Internet IP
     address of that machine, converted to a 'long int'.  However, on
     some systems it is a meaningless but unique number which is
     hard-coded for each machine.

     This is not widely used.  It arose in BSD 4.2, but was dropped in
     BSD 4.4.  It is not required by POSIX.

     The proper way to query the IP address is to use 'gethostbyname' on
     the results of 'gethostname'.  For more information on IP
     addresses, *Note Host Addresses::.

 -- Function: int sethostid (long int ID)
     Preliminary: | MT-Unsafe const:hostid | AS-Unsafe | AC-Unsafe
     corrupt fd | *Note POSIX Safety Concepts::.

     The 'sethostid' function sets the "host ID" of the host machine to
     ID.  Only privileged processes are permitted to do this.  Usually
     it happens just once, at system boot time.

     The proper way to establish the primary IP address of a system is
     to configure the IP address resolver to associate that IP address
     with the system's host name as returned by 'gethostname'.  For
     example, put a record for the system in '/etc/hosts'.

     See 'gethostid' above for more information on host ids.

     The return value is '0' on success and '-1' on failure.  The
     following 'errno' error conditions are defined for this function:

     'EPERM'
          This process cannot set the host name because it is not
          privileged.

     'ENOSYS'
          The operating system does not support setting the host ID. On
          some systems, the host ID is a meaningless but unique number
          hard-coded for each machine.


File: libc.info,  Node: Platform Type,  Next: Filesystem Handling,  Prev: Host Identification,  Up: System Management

30.2 Platform Type Identification
=================================

You can use the 'uname' function to find out some information about the
type of computer your program is running on.  This function and the
associated data type are declared in the header file 'sys/utsname.h'.

   As a bonus, 'uname' also gives some information identifying the
particular system your program is running on.  This is the same
information which you can get with functions targeted to this purpose
described in *note Host Identification::.

 -- Data Type: struct utsname
     The 'utsname' structure is used to hold information returned by the
     'uname' function.  It has the following members:

     'char sysname[]'
          This is the name of the operating system in use.

     'char release[]'
          This is the current release level of the operating system
          implementation.

     'char version[]'
          This is the current version level within the release of the
          operating system.

     'char machine[]'
          This is a description of the type of hardware that is in use.

          Some systems provide a mechanism to interrogate the kernel
          directly for this information.  On systems without such a
          mechanism, the GNU C Library fills in this field based on the
          configuration name that was specified when building and
          installing the library.

          GNU uses a three-part name to describe a system configuration;
          the three parts are CPU, MANUFACTURER and SYSTEM-TYPE, and
          they are separated with dashes.  Any possible combination of
          three names is potentially meaningful, but most such
          combinations are meaningless in practice and even the
          meaningful ones are not necessarily supported by any
          particular GNU program.

          Since the value in 'machine' is supposed to describe just the
          hardware, it consists of the first two parts of the
          configuration name: 'CPU-MANUFACTURER'.  For example, it might
          be one of these:

               '"sparc-sun"', '"i386-ANYTHING"', '"m68k-hp"',
               '"m68k-sony"', '"m68k-sun"', '"mips-dec"'

     'char nodename[]'
          This is the host name of this particular computer.  In the GNU
          C Library, the value is the same as that returned by
          'gethostname'; see *note Host Identification::.

           gethostname() is implemented with a call to uname().

     'char domainname[]'
          This is the NIS or YP domain name.  It is the same value
          returned by 'getdomainname'; see *note Host Identification::.
          This element is a relatively recent invention and use of it is
          not as portable as use of the rest of the structure.

 -- Function: int uname (struct utsname *INFO)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     The 'uname' function fills in the structure pointed to by INFO with
     information about the operating system and host machine.  A
     non-negative value indicates that the data was successfully stored.

     '-1' as the value indicates an error.  The only error possible is
     'EFAULT', which we normally don't mention as it is always a
     possibility.


File: libc.info,  Node: Filesystem Handling,  Next: System Parameters,  Prev: Platform Type,  Up: System Management

30.3 Controlling and Querying Mounts
====================================

All files are in filesystems, and before you can access any file, its
filesystem must be mounted.  Because of Unix's concept of _Everything is
a file_, mounting of filesystems is central to doing almost anything.
This section explains how to find out what filesystems are currently
mounted and what filesystems are available for mounting, and how to
change what is mounted.

   The classic filesystem is the contents of a disk drive.  The concept
is considerably more abstract, though, and lots of things other than
disk drives can be mounted.

   Some block devices don't correspond to traditional devices like disk
drives.  For example, a loop device is a block device whose driver uses
a regular file in another filesystem as its medium.  So if that regular
file contains appropriate data for a filesystem, you can by mounting the
loop device essentially mount a regular file.

   Some filesystems aren't based on a device of any kind.  The "proc"
filesystem, for example, contains files whose data is made up by the
filesystem driver on the fly whenever you ask for it.  And when you
write to it, the data you write causes changes in the system.  No data
gets stored.

* Menu:

* Mount Information::           What is or could be mounted?
* Mount-Unmount-Remount::       Controlling what is mounted and how


File: libc.info,  Node: Mount Information,  Next: Mount-Unmount-Remount,  Up: Filesystem Handling

30.3.1 Mount Information
------------------------

For some programs it is desirable and necessary to access information
about whether a certain filesystem is mounted and, if it is, where, or
simply to get lists of all the available filesystems.  The GNU C Library
provides some functions to retrieve this information portably.

   Traditionally Unix systems have a file named '/etc/fstab' which
describes all possibly mounted filesystems.  The 'mount' program uses
this file to mount at startup time of the system all the necessary
filesystems.  The information about all the filesystems actually mounted
is normally kept in a file named either '/var/run/mtab' or '/etc/mtab'.
Both files share the same syntax and it is crucial that this syntax is
followed all the time.  Therefore it is best to never directly write the
files.  The functions described in this section can do this and they
also provide the functionality to convert the external textual
representation to the internal representation.

   Note that the 'fstab' and 'mtab' files are maintained on a system by
_convention_.  It is possible for the files not to exist or not to be
consistent with what is really mounted or available to mount, if the
system's administration policy allows it.  But programs that mount and
unmount filesystems typically maintain and use these files as described
herein.

   The filenames given above should never be used directly.  The
portable way to handle these file is to use the macro '_PATH_FSTAB',
defined in 'fstab.h', or '_PATH_MNTTAB', defined in 'mntent.h' and
'paths.h', for 'fstab'; and the macro '_PATH_MOUNTED', also defined in
'mntent.h' and 'paths.h', for 'mtab'.  There are also two alternate
macro names 'FSTAB', 'MNTTAB', and 'MOUNTED' defined but these names are
deprecated and kept only for backward compatibility.  The names
'_PATH_MNTTAB' and '_PATH_MOUNTED' should always be used.

* Menu:

* fstab::                       The 'fstab' file
* mtab::                        The 'mtab' file
* Other Mount Information::     Other (non-libc) sources of mount information


File: libc.info,  Node: fstab,  Next: mtab,  Up: Mount Information

30.3.1.1 The 'fstab' file
.........................

The internal representation for entries of the file is 'struct fstab',
defined in 'fstab.h'.

 -- Data Type: struct fstab
     This structure is used with the 'getfsent', 'getfsspec', and
     'getfsfile' functions.

     'char *fs_spec'
          This element describes the device from which the filesystem is
          mounted.  Normally this is the name of a special device, such
          as a hard disk partition, but it could also be a more or less
          generic string.  For "NFS" it would be a hostname and
          directory name combination.

          Even though the element is not declared 'const' it shouldn't
          be modified.  The missing 'const' has historic reasons, since
          this function predates ISO C. The same is true for the other
          string elements of this structure.

     'char *fs_file'
          This describes the mount point on the local system.  I.e.,
          accessing any file in this filesystem has implicitly or
          explicitly this string as a prefix.

     'char *fs_vfstype'
          This is the type of the filesystem.  Depending on what the
          underlying kernel understands it can be any string.

     'char *fs_mntops'
          This is a string containing options passed to the kernel with
          the 'mount' call.  Again, this can be almost anything.  There
          can be more than one option, separated from the others by a
          comma.  Each option consists of a name and an optional value
          part, introduced by an '=' character.

          If the value of this element must be processed it should
          ideally be done using the 'getsubopt' function; see *note
          Suboptions::.

     'const char *fs_type'
          This name is poorly chosen.  This element points to a string
          (possibly in the 'fs_mntops' string) which describes the modes
          with which the filesystem is mounted.  'fstab' defines five
          macros to describe the possible values:

          'FSTAB_RW'
               The filesystems gets mounted with read and write enabled.
          'FSTAB_RQ'
               The filesystems gets mounted with read and write enabled.
               Write access is restricted by quotas.
          'FSTAB_RO'
               The filesystem gets mounted read-only.
          'FSTAB_SW'
               This is not a real filesystem, it is a swap device.
          'FSTAB_XX'
               This entry from the 'fstab' file is totally ignored.

          Testing for equality with these value must happen using
          'strcmp' since these are all strings.  Comparing the pointer
          will probably always fail.

     'int fs_freq'
          This element describes the dump frequency in days.

     'int fs_passno'
          This element describes the pass number on parallel dumps.  It
          is closely related to the 'dump' utility used on Unix systems.

   To read the entire content of the of the 'fstab' file the GNU C
Library contains a set of three functions which are designed in the
usual way.

 -- Function: int setfsent (void)
     Preliminary: | MT-Unsafe race:fsent | AS-Unsafe heap corrupt lock |
     AC-Unsafe corrupt lock mem fd | *Note POSIX Safety Concepts::.

     This function makes sure that the internal read pointer for the
     'fstab' file is at the beginning of the file.  This is done by
     either opening the file or resetting the read pointer.

     Since the file handle is internal to the libc this function is not
     thread-safe.

     This function returns a non-zero value if the operation was
     successful and the 'getfs*' functions can be used to read the
     entries of the file.

 -- Function: void endfsent (void)
     Preliminary: | MT-Unsafe race:fsent | AS-Unsafe heap corrupt lock |
     AC-Unsafe corrupt lock mem fd | *Note POSIX Safety Concepts::.

     This function makes sure that all resources acquired by a prior
     call to 'setfsent' (explicitly or implicitly by calling 'getfsent')
     are freed.

 -- Function: struct fstab * getfsent (void)
     Preliminary: | MT-Unsafe race:fsent locale | AS-Unsafe corrupt heap
     lock | AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.

     This function returns the next entry of the 'fstab' file.  If this
     is the first call to any of the functions handling 'fstab' since
     program start or the last call of 'endfsent', the file will be
     opened.

     The function returns a pointer to a variable of type 'struct
     fstab'.  This variable is shared by all threads and therefore this
     function is not thread-safe.  If an error occurred 'getfsent'
     returns a 'NULL' pointer.

 -- Function: struct fstab * getfsspec (const char *NAME)
     Preliminary: | MT-Unsafe race:fsent locale | AS-Unsafe corrupt heap
     lock | AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.

     This function returns the next entry of the 'fstab' file which has
     a string equal to NAME pointed to by the 'fs_spec' element.  Since
     there is normally exactly one entry for each special device it
     makes no sense to call this function more than once for the same
     argument.  If this is the first call to any of the functions
     handling 'fstab' since program start or the last call of
     'endfsent', the file will be opened.

     The function returns a pointer to a variable of type 'struct
     fstab'.  This variable is shared by all threads and therefore this
     function is not thread-safe.  If an error occurred 'getfsent'
     returns a 'NULL' pointer.

 -- Function: struct fstab * getfsfile (const char *NAME)
     Preliminary: | MT-Unsafe race:fsent locale | AS-Unsafe corrupt heap
     lock | AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.

     This function returns the next entry of the 'fstab' file which has
     a string equal to NAME pointed to by the 'fs_file' element.  Since
     there is normally exactly one entry for each mount point it makes
     no sense to call this function more than once for the same
     argument.  If this is the first call to any of the functions
     handling 'fstab' since program start or the last call of
     'endfsent', the file will be opened.

     The function returns a pointer to a variable of type 'struct
     fstab'.  This variable is shared by all threads and therefore this
     function is not thread-safe.  If an error occurred 'getfsent'
     returns a 'NULL' pointer.


File: libc.info,  Node: mtab,  Next: Other Mount Information,  Prev: fstab,  Up: Mount Information

30.3.1.2 The 'mtab' file
........................

The following functions and data structure access the 'mtab' file.

 -- Data Type: struct mntent
     This structure is used with the 'getmntent', 'getmntent_t',
     'addmntent', and 'hasmntopt' functions.

     'char *mnt_fsname'
          This element contains a pointer to a string describing the
          name of the special device from which the filesystem is
          mounted.  It corresponds to the 'fs_spec' element in 'struct
          fstab'.

     'char *mnt_dir'
          This element points to a string describing the mount point of
          the filesystem.  It corresponds to the 'fs_file' element in
          'struct fstab'.

     'char *mnt_type'
          'mnt_type' describes the filesystem type and is therefore
          equivalent to 'fs_vfstype' in 'struct fstab'.  'mntent.h'
          defines a few symbolic names for some of the values this
          string can have.  But since the kernel can support arbitrary
          filesystems it does not make much sense to give them symbolic
          names.  If one knows the symbol name one also knows the
          filesystem name.  Nevertheless here follows the list of the
          symbols provided in 'mntent.h'.

          'MNTTYPE_IGNORE'
               This symbol expands to '"ignore"'.  The value is sometime
               used in 'fstab' files to make sure entries are not used
               without removing them.
          'MNTTYPE_NFS'
               Expands to '"nfs"'.  Using this macro sometimes could
               make sense since it names the default NFS implementation,
               in case both version 2 and 3 are supported.
          'MNTTYPE_SWAP'
               This symbol expands to '"swap"'.  It names the special
               'fstab' entry which names one of the possibly multiple
               swap partitions.

     'char *mnt_opts'
          The element contains a string describing the options used
          while mounting the filesystem.  As for the equivalent element
          'fs_mntops' of 'struct fstab' it is best to use the function
          'getsubopt' (*note Suboptions::) to access the parts of this
          string.

          The 'mntent.h' file defines a number of macros with string
          values which correspond to some of the options understood by
          the kernel.  There might be many more options which are
          possible so it doesn't make much sense to rely on these macros
          but to be consistent here is the list:

          'MNTOPT_DEFAULTS'
               Expands to '"defaults"'.  This option should be used
               alone since it indicates all values for the customizable
               values are chosen to be the default.
          'MNTOPT_RO'
               Expands to '"ro"'.  See the 'FSTAB_RO' value, it means
               the filesystem is mounted read-only.
          'MNTOPT_RW'
               Expand to '"rw"'.  See the 'FSTAB_RW' value, it means the
               filesystem is mounted with read and write permissions.
          'MNTOPT_SUID'
               Expands to '"suid"'.  This means that the SUID bit (*note
               How Change Persona::) is respected when a program from
               the filesystem is started.
          'MNTOPT_NOSUID'
               Expands to '"nosuid"'.  This is the opposite of
               'MNTOPT_SUID', the SUID bit for all files from the
               filesystem is ignored.
          'MNTOPT_NOAUTO'
               Expands to '"noauto"'.  At startup time the 'mount'
               program will ignore this entry if it is started with the
               '-a' option to mount all filesystems mentioned in the
               'fstab' file.

          As for the 'FSTAB_*' entries introduced above it is important
          to use 'strcmp' to check for equality.

     'mnt_freq'
          This elements corresponds to 'fs_freq' and also specifies the
          frequency in days in which dumps are made.

     'mnt_passno'
          This element is equivalent to 'fs_passno' with the same
          meaning which is uninteresting for all programs beside 'dump'.

   For accessing the 'mtab' file there is again a set of three functions
to access all entries in a row.  Unlike the functions to handle 'fstab'
these functions do not access a fixed file and there is even a thread
safe variant of the get function.  Beside this the GNU C Library
contains functions to alter the file and test for specific options.

 -- Function: FILE * setmntent (const char *FILE, const char *MODE)
     Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem fd
     lock | *Note POSIX Safety Concepts::.

     The 'setmntent' function prepares the file named FILE which must be
     in the format of a 'fstab' and 'mtab' file for the upcoming
     processing through the other functions of the family.  The MODE
     parameter can be chosen in the way the OPENTYPE parameter for
     'fopen' (*note Opening Streams::) can be chosen.  If the file is
     opened for writing the file is also allowed to be empty.

     If the file was successfully opened 'setmntent' returns a file
     descriptor for future use.  Otherwise the return value is 'NULL'
     and 'errno' is set accordingly.

 -- Function: int endmntent (FILE *STREAM)
     Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe lock mem
     fd | *Note POSIX Safety Concepts::.

     This function takes for the STREAM parameter a file handle which
     previously was returned from the 'setmntent' call.  'endmntent'
     closes the stream and frees all resources.

     The return value is 1 unless an error occurred in which case it is
     0.

 -- Function: struct mntent * getmntent (FILE *STREAM)
     Preliminary: | MT-Unsafe race:mntentbuf locale | AS-Unsafe corrupt
     heap init | AC-Unsafe init corrupt lock mem | *Note POSIX Safety
     Concepts::.

     The 'getmntent' function takes as the parameter a file handle
     previously returned by successful call to 'setmntent'.  It returns
     a pointer to a static variable of type 'struct mntent' which is
     filled with the information from the next entry from the file
     currently read.

     The file format used prescribes the use of spaces or tab characters
     to separate the fields.  This makes it harder to use name
     containing one of these characters (e.g., mount points using
     spaces).  Therefore these characters are encoded in the files and
     the 'getmntent' function takes care of the decoding while reading
     the entries back in.  ''\040'' is used to encode a space character,
     ''\011'' to encode a tab character, ''\012'' to encode a newline
     character, and ''\\'' to encode a backslash.

     If there was an error or the end of the file is reached the return
     value is 'NULL'.

     This function is not thread-safe since all calls to this function
     return a pointer to the same static variable.  'getmntent_r' should
     be used in situations where multiple threads access the file.

 -- Function: struct mntent * getmntent_r (FILE *STREAM, struct mntent
          *RESULT, char *BUFFER, int BUFSIZE)
     Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
     corrupt lock mem | *Note POSIX Safety Concepts::.

     The 'getmntent_r' function is the reentrant variant of 'getmntent'.
     It also returns the next entry from the file and returns a pointer.
     The actual variable the values are stored in is not static, though.
     Instead the function stores the values in the variable pointed to
     by the RESULT parameter.  Additional information (e.g., the strings
     pointed to by the elements of the result) are kept in the buffer of
     size BUFSIZE pointed to by BUFFER.

     Escaped characters (space, tab, backslash) are converted back in
     the same way as it happens for 'getmentent'.

     The function returns a 'NULL' pointer in error cases.  Errors could
     be:
        * error while reading the file,
        * end of file reached,
        * BUFSIZE is too small for reading a complete new entry.

 -- Function: int addmntent (FILE *STREAM, const struct mntent *MNT)
     Preliminary: | MT-Unsafe race:stream locale | AS-Unsafe corrupt |
     AC-Unsafe corrupt | *Note POSIX Safety Concepts::.

     The 'addmntent' function allows adding a new entry to the file
     previously opened with 'setmntent'.  The new entries are always
     appended.  I.e., even if the position of the file descriptor is not
     at the end of the file this function does not overwrite an existing
     entry following the current position.

     The implication of this is that to remove an entry from a file one
     has to create a new file while leaving out the entry to be removed
     and after closing the file remove the old one and rename the new
     file to the chosen name.

     This function takes care of spaces and tab characters in the names
     to be written to the file.  It converts them and the backslash
     character into the format describe in the 'getmntent' description
     above.

     This function returns 0 in case the operation was successful.
     Otherwise the return value is 1 and 'errno' is set appropriately.

 -- Function: char * hasmntopt (const struct mntent *MNT, const char
          *OPT)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     This function can be used to check whether the string pointed to by
     the 'mnt_opts' element of the variable pointed to by MNT contains
     the option OPT.  If this is true a pointer to the beginning of the
     option in the 'mnt_opts' element is returned.  If no such option
     exists the function returns 'NULL'.

     This function is useful to test whether a specific option is
     present but when all options have to be processed one is better off
     with using the 'getsubopt' function to iterate over all options in
     the string.


File: libc.info,  Node: Other Mount Information,  Prev: mtab,  Up: Mount Information

30.3.1.3 Other (Non-libc) Sources of Mount Information
......................................................

On a system with a Linux kernel and the 'proc' filesystem, you can get
information on currently mounted filesystems from the file 'mounts' in
the 'proc' filesystem.  Its format is similar to that of the 'mtab'
file, but represents what is truly mounted without relying on facilities
outside the kernel to keep 'mtab' up to date.


File: libc.info,  Node: Mount-Unmount-Remount,  Prev: Mount Information,  Up: Filesystem Handling

30.3.2 Mount, Unmount, Remount
------------------------------

This section describes the functions for mounting, unmounting, and
remounting filesystems.

   Only the superuser can mount, unmount, or remount a filesystem.

   These functions do not access the 'fstab' and 'mtab' files.  You
should maintain and use these separately.  *Note Mount Information::.

   The symbols in this section are declared in 'sys/mount.h'.

 -- Function: int mount (const char *SPECIAL_FILE, const char *DIR,
          const char *FSTYPE, unsigned long int OPTIONS, const void
          *DATA)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'mount' mounts or remounts a filesystem.  The two operations are
     quite different and are merged rather unnaturally into this one
     function.  The 'MS_REMOUNT' option, explained below, determines
     whether 'mount' mounts or remounts.

     For a mount, the filesystem on the block device represented by the
     device special file named SPECIAL_FILE gets mounted over the mount
     point DIR.  This means that the directory DIR (along with any files
     in it) is no longer visible; in its place (and still with the name
     DIR) is the root directory of the filesystem on the device.

     As an exception, if the filesystem type (see below) is one which is
     not based on a device (e.g.  "proc"), 'mount' instantiates a
     filesystem and mounts it over DIR and ignores SPECIAL_FILE.

     For a remount, DIR specifies the mount point where the filesystem
     to be remounted is (and remains) mounted and SPECIAL_FILE is
     ignored.  Remounting a filesystem means changing the options that
     control operations on the filesystem while it is mounted.  It does
     not mean unmounting and mounting again.

     For a mount, you must identify the type of the filesystem as
     FSTYPE.  This type tells the kernel how to access the filesystem
     and can be thought of as the name of a filesystem driver.  The
     acceptable values are system dependent.  On a system with a Linux
     kernel and the 'proc' filesystem, the list of possible values is in
     the file 'filesystems' in the 'proc' filesystem (e.g.  type 'cat
     /proc/filesystems' to see the list).  With a Linux kernel, the
     types of filesystems that 'mount' can mount, and their type names,
     depends on what filesystem drivers are configured into the kernel
     or loaded as loadable kernel modules.  An example of a common value
     for FSTYPE is 'ext2'.

     For a remount, 'mount' ignores FSTYPE.

     OPTIONS specifies a variety of options that apply until the
     filesystem is unmounted or remounted.  The precise meaning of an
     option depends on the filesystem and with some filesystems, an
     option may have no effect at all.  Furthermore, for some
     filesystems, some of these options (but never 'MS_RDONLY') can be
     overridden for individual file accesses via 'ioctl'.

     OPTIONS is a bit string with bit fields defined using the following
     mask and masked value macros:

     'MS_MGC_MASK'
          This multibit field contains a magic number.  If it does not
          have the value 'MS_MGC_VAL', 'mount' assumes all the following
          bits are zero and the DATA argument is a null string,
          regardless of their actual values.

     'MS_REMOUNT'
          This bit on means to remount the filesystem.  Off means to
          mount it.

     'MS_RDONLY'
          This bit on specifies that no writing to the filesystem shall
          be allowed while it is mounted.  This cannot be overridden by
          'ioctl'.  This option is available on nearly all filesystems.

     'S_IMMUTABLE'
          This bit on specifies that no writing to the files in the
          filesystem shall be allowed while it is mounted.  This can be
          overridden for a particular file access by a properly
          privileged call to 'ioctl'.  This option is a relatively new
          invention and is not available on many filesystems.

     'S_APPEND'
          This bit on specifies that the only file writing that shall be
          allowed while the filesystem is mounted is appending.  Some
          filesystems allow this to be overridden for a particular
          process by a properly privileged call to 'ioctl'.  This is a
          relatively new invention and is not available on many
          filesystems.

     'MS_NOSUID'
          This bit on specifies that Setuid and Setgid permissions on
          files in the filesystem shall be ignored while it is mounted.

     'MS_NOEXEC'
          This bit on specifies that no files in the filesystem shall be
          executed while the filesystem is mounted.

     'MS_NODEV'
          This bit on specifies that no device special files in the
          filesystem shall be accessible while the filesystem is
          mounted.

     'MS_SYNCHRONOUS'
          This bit on specifies that all writes to the filesystem while
          it is mounted shall be synchronous; i.e., data shall be synced
          before each write completes rather than held in the buffer
          cache.

     'MS_MANDLOCK'
          This bit on specifies that mandatory locks on files shall be
          permitted while the filesystem is mounted.

     'MS_NOATIME'
          This bit on specifies that access times of files shall not be
          updated when the files are accessed while the filesystem is
          mounted.

     'MS_NODIRATIME'
          This bit on specifies that access times of directories shall
          not be updated when the directories are accessed while the
          filesystem in mounted.

     Any bits not covered by the above masks should be set off;
     otherwise, results are undefined.

     The meaning of DATA depends on the filesystem type and is
     controlled entirely by the filesystem driver in the kernel.

     Example:

          #include <sys/mount.h>

          mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");

          mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, "");


     Appropriate arguments for 'mount' are conventionally recorded in
     the 'fstab' table.  *Note Mount Information::.

     The return value is zero if the mount or remount is successful.
     Otherwise, it is '-1' and 'errno' is set appropriately.  The values
     of 'errno' are filesystem dependent, but here is a general list:

     'EPERM'
          The process is not superuser.
     'ENODEV'
          The file system type FSTYPE is not known to the kernel.
     'ENOTBLK'
          The file DEV is not a block device special file.
     'EBUSY'

             * The device is already mounted.

             * The mount point is busy.  (E.g.  it is some process'
               working directory or has a filesystem mounted on it
               already).

             * The request is to remount read-only, but there are files
               open for write.

     'EINVAL'

             * A remount was attempted, but there is no filesystem
               mounted over the specified mount point.

             * The supposed filesystem has an invalid superblock.

     'EACCES'

             * The filesystem is inherently read-only (possibly due to a
               switch on the device) and the process attempted to mount
               it read/write (by setting the 'MS_RDONLY' bit off).

             * SPECIAL_FILE or DIR is not accessible due to file
               permissions.

             * SPECIAL_FILE is not accessible because it is in a
               filesystem that is mounted with the 'MS_NODEV' option.

     'EM_FILE'
          The table of dummy devices is full.  'mount' needs to create a
          dummy device (aka "unnamed" device) if the filesystem being
          mounted is not one that uses a device.

 -- Function: int umount2 (const char *FILE, int FLAGS)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'umount2' unmounts a filesystem.

     You can identify the filesystem to unmount either by the device
     special file that contains the filesystem or by the mount point.
     The effect is the same.  Specify either as the string FILE.

     FLAGS contains the one-bit field identified by the following mask
     macro:

     'MNT_FORCE'
          This bit on means to force the unmounting even if the
          filesystem is busy, by making it unbusy first.  If the bit is
          off and the filesystem is busy, 'umount2' fails with 'errno' =
          'EBUSY'.  Depending on the filesystem, this may override all,
          some, or no busy conditions.

     All other bits in FLAGS should be set to zero; otherwise, the
     result is undefined.

     Example:

          #include <sys/mount.h>

          umount2("/mnt", MNT_FORCE);

          umount2("/dev/hdd1", 0);


     After the filesystem is unmounted, the directory that was the mount
     point is visible, as are any files in it.

     As part of unmounting, 'umount2' syncs the filesystem.

     If the unmounting is successful, the return value is zero.
     Otherwise, it is '-1' and 'errno' is set accordingly:

     'EPERM'
          The process is not superuser.
     'EBUSY'
          The filesystem cannot be unmounted because it is busy.  E.g.
          it contains a directory that is some process's working
          directory or a file that some process has open.  With some
          filesystems in some cases, you can avoid this failure with the
          'MNT_FORCE' option.

     'EINVAL'
          FILE validly refers to a file, but that file is neither a
          mount point nor a device special file of a currently mounted
          filesystem.

     This function is not available on all systems.

 -- Function: int umount (const char *FILE)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'umount' does the same thing as 'umount2' with FLAGS set to zeroes.
     It is more widely available than 'umount2' but since it lacks the
     possibility to forcefully unmount a filesystem is deprecated when
     'umount2' is also available.


File: libc.info,  Node: System Parameters,  Prev: Filesystem Handling,  Up: System Management

30.4 System Parameters
======================

This section describes the 'sysctl' function, which gets and sets a
variety of system parameters.

   The symbols used in this section are declared in the file
'sys/sysctl.h'.

 -- Function: int sysctl (int *NAMES, int NLEN, void *OLDVAL, size_t
          *OLDLENP, void *NEWVAL, size_t NEWLEN)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     'sysctl' gets or sets a specified system parameter.  There are so
     many of these parameters that it is not practical to list them all
     here, but here are some examples:

        * network domain name
        * paging parameters
        * network Address Resolution Protocol timeout time
        * maximum number of files that may be open
        * root filesystem device
        * when kernel was built

     The set of available parameters depends on the kernel configuration
     and can change while the system is running, particularly when you
     load and unload loadable kernel modules.

     The system parameters with which 'syslog' is concerned are arranged
     in a hierarchical structure like a hierarchical filesystem.  To
     identify a particular parameter, you specify a path through the
     structure in a way analogous to specifying the pathname of a file.
     Each component of the path is specified by an integer and each of
     these integers has a macro defined for it by 'sys/sysctl.h'.  NAMES
     is the path, in the form of an array of integers.  Each component
     of the path is one element of the array, in order.  NLEN is the
     number of components in the path.

     For example, the first component of the path for all the paging
     parameters is the value 'CTL_VM'.  For the free page thresholds,
     the second component of the path is 'VM_FREEPG'.  So to get the
     free page threshold values, make NAMES an array containing the two
     elements 'CTL_VM' and 'VM_FREEPG' and make NLEN = 2.

     The format of the value of a parameter depends on the parameter.
     Sometimes it is an integer; sometimes it is an ASCII string;
     sometimes it is an elaborate structure.  In the case of the free
     page thresholds used in the example above, the parameter value is a
     structure containing several integers.

     In any case, you identify a place to return the parameter's value
     with OLDVAL and specify the amount of storage available at that
     location as *OLDLENP.  *OLDLENP does double duty because it is also
     the output location that contains the actual length of the returned
     value.

     If you don't want the parameter value returned, specify a null
     pointer for OLDVAL.

     To set the parameter, specify the address and length of the new
     value as NEWVAL and NEWLEN.  If you don't want to set the
     parameter, specify a null pointer as NEWVAL.

     If you get and set a parameter in the same 'sysctl' call, the value
     returned is the value of the parameter before it was set.

     Each system parameter has a set of permissions similar to the
     permissions for a file (including the permissions on directories in
     its path) that determine whether you may get or set it.  For the
     purposes of these permissions, every parameter is considered to be
     owned by the superuser and Group 0 so processes with that effective
     uid or gid may have more access to system parameters.  Unlike with
     files, the superuser does not invariably have full permission to
     all system parameters, because some of them are designed not to be
     changed ever.

     'sysctl' returns a zero return value if it succeeds.  Otherwise, it
     returns '-1' and sets 'errno' appropriately.  Besides the failures
     that apply to all system calls, the following are the 'errno' codes
     for all possible failures:

     'EPERM'
          The process is not permitted to access one of the components
          of the path of the system parameter or is not permitted to
          access the system parameter itself in the way (read or write)
          that it requested.
     'ENOTDIR'
          There is no system parameter corresponding to NAME.
     'EFAULT'
          OLDVAL is not null, which means the process wanted to read the
          parameter, but *OLDLENP is zero, so there is no place to
          return it.
     'EINVAL'
             * The process attempted to set a system parameter to a
               value that is not valid for that parameter.
             * The space provided for the return of the system parameter
               is not the right size for that parameter.
     'ENOMEM'
          This value may be returned instead of the more correct
          'EINVAL' in some cases where the space provided for the return
          of the system parameter is too small.

   If you have a Linux kernel with the 'proc' filesystem, you can get
and set most of the same parameters by reading and writing to files in
the 'sys' directory of the 'proc' filesystem.  In the 'sys' directory,
the directory structure represents the hierarchical structure of the
parameters.  E.g.  you can display the free page thresholds with
     cat /proc/sys/vm/freepages

   Some more traditional and more widely available, though less general,
GNU C Library functions for getting and setting some of the same system
parameters are:

   * 'getdomainname', 'setdomainname'
   * 'gethostname', 'sethostname' (*Note Host Identification::.)
   * 'uname' (*Note Platform Type::.)
   * 'bdflush'


File: libc.info,  Node: System Configuration,  Next: Cryptographic Functions,  Prev: System Management,  Up: Top

31 System Configuration Parameters
**********************************

The functions and macros listed in this chapter give information about
configuration parameters of the operating system--for example, capacity
limits, presence of optional POSIX features, and the default path for
executable files (*note String Parameters::).

* Menu:

* General Limits::           Constants and functions that describe
				various process-related limits that have
				one uniform value for any given machine.
* System Options::           Optional POSIX features.
* Version Supported::        Version numbers of POSIX.1 and POSIX.2.
* Sysconf::                  Getting specific configuration values
                                of general limits and system options.
* Minimums::                 Minimum values for general limits.

* Limits for Files::         Size limitations that pertain to individual files.
                                These can vary between file systems
                                or even from file to file.
* Options for Files::        Optional features that some files may support.
* File Minimums::            Minimum values for file limits.
* Pathconf::                 Getting the limit values for a particular file.

* Utility Limits::           Capacity limits of some POSIX.2 utility programs.
* Utility Minimums::         Minimum allowable values of those limits.

* String Parameters::        Getting the default search path.


File: libc.info,  Node: General Limits,  Next: System Options,  Up: System Configuration

31.1 General Capacity Limits
============================

The POSIX.1 and POSIX.2 standards specify a number of parameters that
describe capacity limitations of the system.  These limits can be fixed
constants for a given operating system, or they can vary from machine to
machine.  For example, some limit values may be configurable by the
system administrator, either at run time or by rebuilding the kernel,
and this should not require recompiling application programs.

   Each of the following limit parameters has a macro that is defined in
'limits.h' only if the system has a fixed, uniform limit for the
parameter in question.  If the system allows different file systems or
files to have different limits, then the macro is undefined; use
'sysconf' to find out the limit that applies at a particular time on a
particular machine.  *Note Sysconf::.

   Each of these parameters also has another macro, with a name starting
with '_POSIX', which gives the lowest value that the limit is allowed to
have on _any_ POSIX system.  *Note Minimums::.

 -- Macro: int ARG_MAX
     If defined, the unvarying maximum combined length of the ARGV and
     ENVIRON arguments that can be passed to the 'exec' functions.

 -- Macro: int CHILD_MAX
     If defined, the unvarying maximum number of processes that can
     exist with the same real user ID at any one time.  In BSD and GNU,
     this is controlled by the 'RLIMIT_NPROC' resource limit; *note
     Limits on Resources::.

 -- Macro: int OPEN_MAX
     If defined, the unvarying maximum number of files that a single
     process can have open simultaneously.  In BSD and GNU, this is
     controlled by the 'RLIMIT_NOFILE' resource limit; *note Limits on
     Resources::.

 -- Macro: int STREAM_MAX
     If defined, the unvarying maximum number of streams that a single
     process can have open simultaneously.  *Note Opening Streams::.

 -- Macro: int TZNAME_MAX
     If defined, the unvarying maximum length of a time zone name.
     *Note Time Zone Functions::.

   These limit macros are always defined in 'limits.h'.

 -- Macro: int NGROUPS_MAX
     The maximum number of supplementary group IDs that one process can
     have.

     The value of this macro is actually a lower bound for the maximum.
     That is, you can count on being able to have that many
     supplementary group IDs, but a particular machine might let you
     have even more.  You can use 'sysconf' to see whether a particular
     machine will let you have more (*note Sysconf::).

 -- Macro: ssize_t SSIZE_MAX
     The largest value that can fit in an object of type 'ssize_t'.
     Effectively, this is the limit on the number of bytes that can be
     read or written in a single operation.

     This macro is defined in all POSIX systems because this limit is
     never configurable.

 -- Macro: int RE_DUP_MAX
     The largest number of repetitions you are guaranteed is allowed in
     the construct '\{MIN,MAX\}' in a regular expression.

     The value of this macro is actually a lower bound for the maximum.
     That is, you can count on being able to have that many repetitions,
     but a particular machine might let you have even more.  You can use
     'sysconf' to see whether a particular machine will let you have
     more (*note Sysconf::).  And even the value that 'sysconf' tells
     you is just a lower bound--larger values might work.

     This macro is defined in all POSIX.2 systems, because POSIX.2 says
     it should always be defined even if there is no specific imposed
     limit.


File: libc.info,  Node: System Options,  Next: Version Supported,  Prev: General Limits,  Up: System Configuration

31.2 Overall System Options
===========================

POSIX defines certain system-specific options that not all POSIX systems
support.  Since these options are provided in the kernel, not in the
library, simply using the GNU C Library does not guarantee any of these
features is supported; it depends on the system you are using.

   You can test for the availability of a given option using the macros
in this section, together with the function 'sysconf'.  The macros are
defined only if you include 'unistd.h'.

   For the following macros, if the macro is defined in 'unistd.h', then
the option is supported.  Otherwise, the option may or may not be
supported; use 'sysconf' to find out.  *Note Sysconf::.

 -- Macro: int _POSIX_JOB_CONTROL
     If this symbol is defined, it indicates that the system supports
     job control.  Otherwise, the implementation behaves as if all
     processes within a session belong to a single process group.  *Note
     Job Control::.

 -- Macro: int _POSIX_SAVED_IDS
     If this symbol is defined, it indicates that the system remembers
     the effective user and group IDs of a process before it executes an
     executable file with the set-user-ID or set-group-ID bits set, and
     that explicitly changing the effective user or group IDs back to
     these values is permitted.  If this option is not defined, then if
     a nonprivileged process changes its effective user or group ID to
     the real user or group ID of the process, it can't change it back
     again.  *Note Enable/Disable Setuid::.

   For the following macros, if the macro is defined in 'unistd.h', then
its value indicates whether the option is supported.  A value of '-1'
means no, and any other value means yes.  If the macro is not defined,
then the option may or may not be supported; use 'sysconf' to find out.
*Note Sysconf::.

 -- Macro: int _POSIX2_C_DEV
     If this symbol is defined, it indicates that the system has the
     POSIX.2 C compiler command, 'c89'.  The GNU C Library always
     defines this as '1', on the assumption that you would not have
     installed it if you didn't have a C compiler.

 -- Macro: int _POSIX2_FORT_DEV
     If this symbol is defined, it indicates that the system has the
     POSIX.2 Fortran compiler command, 'fort77'.  The GNU C Library
     never defines this, because we don't know what the system has.

 -- Macro: int _POSIX2_FORT_RUN
     If this symbol is defined, it indicates that the system has the
     POSIX.2 'asa' command to interpret Fortran carriage control.  The
     GNU C Library never defines this, because we don't know what the
     system has.

 -- Macro: int _POSIX2_LOCALEDEF
     If this symbol is defined, it indicates that the system has the
     POSIX.2 'localedef' command.  The GNU C Library never defines this,
     because we don't know what the system has.

 -- Macro: int _POSIX2_SW_DEV
     If this symbol is defined, it indicates that the system has the
     POSIX.2 commands 'ar', 'make', and 'strip'.  The GNU C Library
     always defines this as '1', on the assumption that you had to have
     'ar' and 'make' to install the library, and it's unlikely that
     'strip' would be absent when those are present.


File: libc.info,  Node: Version Supported,  Next: Sysconf,  Prev: System Options,  Up: System Configuration

31.3 Which Version of POSIX is Supported
========================================

 -- Macro: long int _POSIX_VERSION
     This constant represents the version of the POSIX.1 standard to
     which the implementation conforms.  For an implementation
     conforming to the 1995 POSIX.1 standard, the value is the integer
     '199506L'.

     '_POSIX_VERSION' is always defined (in 'unistd.h') in any POSIX
     system.

     *Usage Note:* Don't try to test whether the system supports POSIX
     by including 'unistd.h' and then checking whether '_POSIX_VERSION'
     is defined.  On a non-POSIX system, this will probably fail because
     there is no 'unistd.h'.  We do not know of _any_ way you can
     reliably test at compilation time whether your target system
     supports POSIX or whether 'unistd.h' exists.

 -- Macro: long int _POSIX2_C_VERSION
     This constant represents the version of the POSIX.2 standard which
     the library and system kernel support.  We don't know what value
     this will be for the first version of the POSIX.2 standard, because
     the value is based on the year and month in which the standard is
     officially adopted.

     The value of this symbol says nothing about the utilities installed
     on the system.

     *Usage Note:* You can use this macro to tell whether a POSIX.1
     system library supports POSIX.2 as well.  Any POSIX.1 system
     contains 'unistd.h', so include that file and then test 'defined
     (_POSIX2_C_VERSION)'.


File: libc.info,  Node: Sysconf,  Next: Minimums,  Prev: Version Supported,  Up: System Configuration

31.4 Using 'sysconf'
====================

When your system has configurable system limits, you can use the
'sysconf' function to find out the value that applies to any particular
machine.  The function and the associated PARAMETER constants are
declared in the header file 'unistd.h'.

* Menu:

* Sysconf Definition::        Detailed specifications of 'sysconf'.
* Constants for Sysconf::     The list of parameters 'sysconf' can read.
* Examples of Sysconf::       How to use 'sysconf' and the parameter
				 macros properly together.


File: libc.info,  Node: Sysconf Definition,  Next: Constants for Sysconf,  Up: Sysconf

31.4.1 Definition of 'sysconf'
------------------------------

 -- Function: long int sysconf (int PARAMETER)
     Preliminary: | MT-Safe env | AS-Unsafe lock heap | AC-Unsafe lock
     mem fd | *Note POSIX Safety Concepts::.

     This function is used to inquire about runtime system parameters.
     The PARAMETER argument should be one of the '_SC_' symbols listed
     below.

     The normal return value from 'sysconf' is the value you requested.
     A value of '-1' is returned both if the implementation does not
     impose a limit, and in case of an error.

     The following 'errno' error conditions are defined for this
     function:

     'EINVAL'
          The value of the PARAMETER is invalid.


File: libc.info,  Node: Constants for Sysconf,  Next: Examples of Sysconf,  Prev: Sysconf Definition,  Up: Sysconf

31.4.2 Constants for 'sysconf' Parameters
-----------------------------------------

Here are the symbolic constants for use as the PARAMETER argument to
'sysconf'.  The values are all integer constants (more specifically,
enumeration type values).

'_SC_ARG_MAX'
     Inquire about the parameter corresponding to 'ARG_MAX'.

'_SC_CHILD_MAX'
     Inquire about the parameter corresponding to 'CHILD_MAX'.

'_SC_OPEN_MAX'
     Inquire about the parameter corresponding to 'OPEN_MAX'.

'_SC_STREAM_MAX'
     Inquire about the parameter corresponding to 'STREAM_MAX'.

'_SC_TZNAME_MAX'
     Inquire about the parameter corresponding to 'TZNAME_MAX'.

'_SC_NGROUPS_MAX'
     Inquire about the parameter corresponding to 'NGROUPS_MAX'.

'_SC_JOB_CONTROL'
     Inquire about the parameter corresponding to '_POSIX_JOB_CONTROL'.

'_SC_SAVED_IDS'
     Inquire about the parameter corresponding to '_POSIX_SAVED_IDS'.

'_SC_VERSION'
     Inquire about the parameter corresponding to '_POSIX_VERSION'.

'_SC_CLK_TCK'
     Inquire about the number of clock ticks per second; *note CPU
     Time::.  The corresponding parameter 'CLK_TCK' is obsolete.

'_SC_CHARCLASS_NAME_MAX'
     Inquire about the parameter corresponding to maximal length allowed
     for a character class name in an extended locale specification.
     These extensions are not yet standardized and so this option is not
     standardized as well.

'_SC_REALTIME_SIGNALS'
     Inquire about the parameter corresponding to
     '_POSIX_REALTIME_SIGNALS'.

'_SC_PRIORITY_SCHEDULING'
     Inquire about the parameter corresponding to
     '_POSIX_PRIORITY_SCHEDULING'.

'_SC_TIMERS'
     Inquire about the parameter corresponding to '_POSIX_TIMERS'.

'_SC_ASYNCHRONOUS_IO'
     Inquire about the parameter corresponding to
     '_POSIX_ASYNCHRONOUS_IO'.

'_SC_PRIORITIZED_IO'
     Inquire about the parameter corresponding to
     '_POSIX_PRIORITIZED_IO'.

'_SC_SYNCHRONIZED_IO'
     Inquire about the parameter corresponding to
     '_POSIX_SYNCHRONIZED_IO'.

'_SC_FSYNC'
     Inquire about the parameter corresponding to '_POSIX_FSYNC'.

'_SC_MAPPED_FILES'
     Inquire about the parameter corresponding to '_POSIX_MAPPED_FILES'.

'_SC_MEMLOCK'
     Inquire about the parameter corresponding to '_POSIX_MEMLOCK'.

'_SC_MEMLOCK_RANGE'
     Inquire about the parameter corresponding to
     '_POSIX_MEMLOCK_RANGE'.

'_SC_MEMORY_PROTECTION'
     Inquire about the parameter corresponding to
     '_POSIX_MEMORY_PROTECTION'.

'_SC_MESSAGE_PASSING'
     Inquire about the parameter corresponding to
     '_POSIX_MESSAGE_PASSING'.

'_SC_SEMAPHORES'
     Inquire about the parameter corresponding to '_POSIX_SEMAPHORES'.

'_SC_SHARED_MEMORY_OBJECTS'
     Inquire about the parameter corresponding to
     '_POSIX_SHARED_MEMORY_OBJECTS'.

'_SC_AIO_LISTIO_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_AIO_LISTIO_MAX'.

'_SC_AIO_MAX'
     Inquire about the parameter corresponding to '_POSIX_AIO_MAX'.

'_SC_AIO_PRIO_DELTA_MAX'
     Inquire the value by which a process can decrease its asynchronous
     I/O priority level from its own scheduling priority.  This
     corresponds to the run-time invariant value 'AIO_PRIO_DELTA_MAX'.

'_SC_DELAYTIMER_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_DELAYTIMER_MAX'.

'_SC_MQ_OPEN_MAX'
     Inquire about the parameter corresponding to '_POSIX_MQ_OPEN_MAX'.

'_SC_MQ_PRIO_MAX'
     Inquire about the parameter corresponding to '_POSIX_MQ_PRIO_MAX'.

'_SC_RTSIG_MAX'
     Inquire about the parameter corresponding to '_POSIX_RTSIG_MAX'.

'_SC_SEM_NSEMS_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_SEM_NSEMS_MAX'.

'_SC_SEM_VALUE_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_SEM_VALUE_MAX'.

'_SC_SIGQUEUE_MAX'
     Inquire about the parameter corresponding to '_POSIX_SIGQUEUE_MAX'.

'_SC_TIMER_MAX'
     Inquire about the parameter corresponding to '_POSIX_TIMER_MAX'.

'_SC_PII'
     Inquire about the parameter corresponding to '_POSIX_PII'.

'_SC_PII_XTI'
     Inquire about the parameter corresponding to '_POSIX_PII_XTI'.

'_SC_PII_SOCKET'
     Inquire about the parameter corresponding to '_POSIX_PII_SOCKET'.

'_SC_PII_INTERNET'
     Inquire about the parameter corresponding to '_POSIX_PII_INTERNET'.

'_SC_PII_OSI'
     Inquire about the parameter corresponding to '_POSIX_PII_OSI'.

'_SC_SELECT'
     Inquire about the parameter corresponding to '_POSIX_SELECT'.

'_SC_UIO_MAXIOV'
     Inquire about the parameter corresponding to '_POSIX_UIO_MAXIOV'.

'_SC_PII_INTERNET_STREAM'
     Inquire about the parameter corresponding to
     '_POSIX_PII_INTERNET_STREAM'.

'_SC_PII_INTERNET_DGRAM'
     Inquire about the parameter corresponding to
     '_POSIX_PII_INTERNET_DGRAM'.

'_SC_PII_OSI_COTS'
     Inquire about the parameter corresponding to '_POSIX_PII_OSI_COTS'.

'_SC_PII_OSI_CLTS'
     Inquire about the parameter corresponding to '_POSIX_PII_OSI_CLTS'.

'_SC_PII_OSI_M'
     Inquire about the parameter corresponding to '_POSIX_PII_OSI_M'.

'_SC_T_IOV_MAX'
     Inquire the value of the value associated with the 'T_IOV_MAX'
     variable.

'_SC_THREADS'
     Inquire about the parameter corresponding to '_POSIX_THREADS'.

'_SC_THREAD_SAFE_FUNCTIONS'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_SAFE_FUNCTIONS'.

'_SC_GETGR_R_SIZE_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_GETGR_R_SIZE_MAX'.

'_SC_GETPW_R_SIZE_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_GETPW_R_SIZE_MAX'.

'_SC_LOGIN_NAME_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_LOGIN_NAME_MAX'.

'_SC_TTY_NAME_MAX'
     Inquire about the parameter corresponding to '_POSIX_TTY_NAME_MAX'.

'_SC_THREAD_DESTRUCTOR_ITERATIONS'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_DESTRUCTOR_ITERATIONS'.

'_SC_THREAD_KEYS_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_KEYS_MAX'.

'_SC_THREAD_STACK_MIN'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_STACK_MIN'.

'_SC_THREAD_THREADS_MAX'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_THREADS_MAX'.

'_SC_THREAD_ATTR_STACKADDR'
     Inquire about the parameter corresponding to
     a '_POSIX_THREAD_ATTR_STACKADDR'.

'_SC_THREAD_ATTR_STACKSIZE'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_ATTR_STACKSIZE'.

'_SC_THREAD_PRIORITY_SCHEDULING'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_PRIORITY_SCHEDULING'.

'_SC_THREAD_PRIO_INHERIT'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_PRIO_INHERIT'.

'_SC_THREAD_PRIO_PROTECT'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_PRIO_PROTECT'.

'_SC_THREAD_PROCESS_SHARED'
     Inquire about the parameter corresponding to
     '_POSIX_THREAD_PROCESS_SHARED'.

'_SC_2_C_DEV'
     Inquire about whether the system has the POSIX.2 C compiler
     command, 'c89'.

'_SC_2_FORT_DEV'
     Inquire about whether the system has the POSIX.2 Fortran compiler
     command, 'fort77'.

'_SC_2_FORT_RUN'
     Inquire about whether the system has the POSIX.2 'asa' command to
     interpret Fortran carriage control.

'_SC_2_LOCALEDEF'
     Inquire about whether the system has the POSIX.2 'localedef'
     command.

'_SC_2_SW_DEV'
     Inquire about whether the system has the POSIX.2 commands 'ar',
     'make', and 'strip'.

'_SC_BC_BASE_MAX'
     Inquire about the maximum value of 'obase' in the 'bc' utility.

'_SC_BC_DIM_MAX'
     Inquire about the maximum size of an array in the 'bc' utility.

'_SC_BC_SCALE_MAX'
     Inquire about the maximum value of 'scale' in the 'bc' utility.

'_SC_BC_STRING_MAX'
     Inquire about the maximum size of a string constant in the 'bc'
     utility.

'_SC_COLL_WEIGHTS_MAX'
     Inquire about the maximum number of weights that can necessarily be
     used in defining the collating sequence for a locale.

'_SC_EXPR_NEST_MAX'
     Inquire about the maximum number of expressions nested within
     parentheses when using the 'expr' utility.

'_SC_LINE_MAX'
     Inquire about the maximum size of a text line that the POSIX.2 text
     utilities can handle.

'_SC_EQUIV_CLASS_MAX'
     Inquire about the maximum number of weights that can be assigned to
     an entry of the 'LC_COLLATE' category 'order' keyword in a locale
     definition.  The GNU C Library does not presently support locale
     definitions.

'_SC_VERSION'
     Inquire about the version number of POSIX.1 that the library and
     kernel support.

'_SC_2_VERSION'
     Inquire about the version number of POSIX.2 that the system
     utilities support.

'_SC_PAGESIZE'
     Inquire about the virtual memory page size of the machine.
     'getpagesize' returns the same value (*note Query Memory
     Parameters::).

'_SC_NPROCESSORS_CONF'
     Inquire about the number of configured processors.

'_SC_NPROCESSORS_ONLN'
     Inquire about the number of processors online.

'_SC_PHYS_PAGES'
     Inquire about the number of physical pages in the system.

'_SC_AVPHYS_PAGES'
     Inquire about the number of available physical pages in the system.

'_SC_ATEXIT_MAX'
     Inquire about the number of functions which can be registered as
     termination functions for 'atexit'; *note Cleanups on Exit::.

'_SC_XOPEN_VERSION'
     Inquire about the parameter corresponding to '_XOPEN_VERSION'.

'_SC_XOPEN_XCU_VERSION'
     Inquire about the parameter corresponding to '_XOPEN_XCU_VERSION'.

'_SC_XOPEN_UNIX'
     Inquire about the parameter corresponding to '_XOPEN_UNIX'.

'_SC_XOPEN_REALTIME'
     Inquire about the parameter corresponding to '_XOPEN_REALTIME'.

'_SC_XOPEN_REALTIME_THREADS'
     Inquire about the parameter corresponding to
     '_XOPEN_REALTIME_THREADS'.

'_SC_XOPEN_LEGACY'
     Inquire about the parameter corresponding to '_XOPEN_LEGACY'.

'_SC_XOPEN_CRYPT'
     Inquire about the parameter corresponding to '_XOPEN_CRYPT'.

'_SC_XOPEN_ENH_I18N'
     Inquire about the parameter corresponding to '_XOPEN_ENH_I18N'.

'_SC_XOPEN_SHM'
     Inquire about the parameter corresponding to '_XOPEN_SHM'.

'_SC_XOPEN_XPG2'
     Inquire about the parameter corresponding to '_XOPEN_XPG2'.

'_SC_XOPEN_XPG3'
     Inquire about the parameter corresponding to '_XOPEN_XPG3'.

'_SC_XOPEN_XPG4'
     Inquire about the parameter corresponding to '_XOPEN_XPG4'.

'_SC_CHAR_BIT'
     Inquire about the number of bits in a variable of type 'char'.

'_SC_CHAR_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'char'.

'_SC_CHAR_MIN'
     Inquire about the minimum value which can be stored in a variable
     of type 'char'.

'_SC_INT_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'int'.

'_SC_INT_MIN'
     Inquire about the minimum value which can be stored in a variable
     of type 'int'.

'_SC_LONG_BIT'
     Inquire about the number of bits in a variable of type 'long int'.

'_SC_WORD_BIT'
     Inquire about the number of bits in a variable of a register word.

'_SC_MB_LEN_MAX'
     Inquire the maximum length of a multi-byte representation of a wide
     character value.

'_SC_NZERO'
     Inquire about the value used to internally represent the zero
     priority level for the process execution.

'SC_SSIZE_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'ssize_t'.

'_SC_SCHAR_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'signed char'.

'_SC_SCHAR_MIN'
     Inquire about the minimum value which can be stored in a variable
     of type 'signed char'.

'_SC_SHRT_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'short int'.

'_SC_SHRT_MIN'
     Inquire about the minimum value which can be stored in a variable
     of type 'short int'.

'_SC_UCHAR_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'unsigned char'.

'_SC_UINT_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'unsigned int'.

'_SC_ULONG_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'unsigned long int'.

'_SC_USHRT_MAX'
     Inquire about the maximum value which can be stored in a variable
     of type 'unsigned short int'.

'_SC_NL_ARGMAX'
     Inquire about the parameter corresponding to 'NL_ARGMAX'.

'_SC_NL_LANGMAX'
     Inquire about the parameter corresponding to 'NL_LANGMAX'.

'_SC_NL_MSGMAX'
     Inquire about the parameter corresponding to 'NL_MSGMAX'.

'_SC_NL_NMAX'
     Inquire about the parameter corresponding to 'NL_NMAX'.

'_SC_NL_SETMAX'
     Inquire about the parameter corresponding to 'NL_SETMAX'.

'_SC_NL_TEXTMAX'
     Inquire about the parameter corresponding to 'NL_TEXTMAX'.


File: libc.info,  Node: Examples of Sysconf,  Prev: Constants for Sysconf,  Up: Sysconf

31.4.3 Examples of 'sysconf'
----------------------------

We recommend that you first test for a macro definition for the
parameter you are interested in, and call 'sysconf' only if the macro is
not defined.  For example, here is how to test whether job control is
supported:

     int
     have_job_control (void)
     {
     #ifdef _POSIX_JOB_CONTROL
       return 1;
     #else
       int value = sysconf (_SC_JOB_CONTROL);
       if (value < 0)
         /* If the system is that badly wedged,
            there's no use trying to go on.  */
         fatal (strerror (errno));
       return value;
     #endif
     }

   Here is how to get the value of a numeric limit:

     int
     get_child_max ()
     {
     #ifdef CHILD_MAX
       return CHILD_MAX;
     #else
       int value = sysconf (_SC_CHILD_MAX);
       if (value < 0)
         fatal (strerror (errno));
       return value;
     #endif
     }


File: libc.info,  Node: Minimums,  Next: Limits for Files,  Prev: Sysconf,  Up: System Configuration

31.5 Minimum Values for General Capacity Limits
===============================================

Here are the names for the POSIX minimum upper bounds for the system
limit parameters.  The significance of these values is that you can
safely push to these limits without checking whether the particular
system you are using can go that far.

'_POSIX_AIO_LISTIO_MAX'
     The most restrictive limit permitted by POSIX for the maximum
     number of I/O operations that can be specified in a list I/O call.
     The value of this constant is '2'; thus you can add up to two new
     entries of the list of outstanding operations.

'_POSIX_AIO_MAX'
     The most restrictive limit permitted by POSIX for the maximum
     number of outstanding asynchronous I/O operations.  The value of
     this constant is '1'.  So you cannot expect that you can issue more
     than one operation and immediately continue with the normal work,
     receiving the notifications asynchronously.

'_POSIX_ARG_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum combined length of the ARGV and ENVIRON
     arguments that can be passed to the 'exec' functions.  Its value is
     '4096'.

'_POSIX_CHILD_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum number of simultaneous processes per real
     user ID. Its value is '6'.

'_POSIX_NGROUPS_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum number of supplementary group IDs per
     process.  Its value is '0'.

'_POSIX_OPEN_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum number of files that a single process can
     have open simultaneously.  Its value is '16'.

'_POSIX_SSIZE_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum value that can be stored in an object of type
     'ssize_t'.  Its value is '32767'.

'_POSIX_STREAM_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum number of streams that a single process can
     have open simultaneously.  Its value is '8'.

'_POSIX_TZNAME_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the maximum length of a time zone name.  Its value is
     '3'.

'_POSIX2_RE_DUP_MAX'
     The value of this macro is the most restrictive limit permitted by
     POSIX for the numbers used in the '\{MIN,MAX\}' construct in a
     regular expression.  Its value is '255'.


File: libc.info,  Node: Limits for Files,  Next: Options for Files,  Prev: Minimums,  Up: System Configuration

31.6 Limits on File System Capacity
===================================

The POSIX.1 standard specifies a number of parameters that describe the
limitations of the file system.  It's possible for the system to have a
fixed, uniform limit for a parameter, but this isn't the usual case.  On
most systems, it's possible for different file systems (and, for some
parameters, even different files) to have different maximum limits.  For
example, this is very likely if you use NFS to mount some of the file
systems from other machines.

   Each of the following macros is defined in 'limits.h' only if the
system has a fixed, uniform limit for the parameter in question.  If the
system allows different file systems or files to have different limits,
then the macro is undefined; use 'pathconf' or 'fpathconf' to find out
the limit that applies to a particular file.  *Note Pathconf::.

   Each parameter also has another macro, with a name starting with
'_POSIX', which gives the lowest value that the limit is allowed to have
on _any_ POSIX system.  *Note File Minimums::.

 -- Macro: int LINK_MAX
     The uniform system limit (if any) for the number of names for a
     given file.  *Note Hard Links::.

 -- Macro: int MAX_CANON
     The uniform system limit (if any) for the amount of text in a line
     of input when input editing is enabled.  *Note Canonical or Not::.

 -- Macro: int MAX_INPUT
     The uniform system limit (if any) for the total number of
     characters typed ahead as input.  *Note I/O Queues::.

 -- Macro: int NAME_MAX
     The uniform system limit (if any) for the length of a file name
     component, not including the terminating null character.

     *Portability Note:* On some systems, the GNU C Library defines
     'NAME_MAX', but does not actually enforce this limit.

 -- Macro: int PATH_MAX
     The uniform system limit (if any) for the length of an entire file
     name (that is, the argument given to system calls such as 'open'),
     including the terminating null character.

     *Portability Note:* The GNU C Library does not enforce this limit
     even if 'PATH_MAX' is defined.

 -- Macro: int PIPE_BUF
     The uniform system limit (if any) for the number of bytes that can
     be written atomically to a pipe.  If multiple processes are writing
     to the same pipe simultaneously, output from different processes
     might be interleaved in chunks of this size.  *Note Pipes and
     FIFOs::.

   These are alternative macro names for some of the same information.

 -- Macro: int MAXNAMLEN
     This is the BSD name for 'NAME_MAX'.  It is defined in 'dirent.h'.

 -- Macro: int FILENAME_MAX
     The value of this macro is an integer constant expression that
     represents the maximum length of a file name string.  It is defined
     in 'stdio.h'.

     Unlike 'PATH_MAX', this macro is defined even if there is no actual
     limit imposed.  In such a case, its value is typically a very large
     number.  *This is always the case on GNU/Hurd systems.*

     *Usage Note:* Don't use 'FILENAME_MAX' as the size of an array in
     which to store a file name!  You can't possibly make an array that
     big!  Use dynamic allocation (*note Memory Allocation::) instead.


File: libc.info,  Node: Options for Files,  Next: File Minimums,  Prev: Limits for Files,  Up: System Configuration

31.7 Optional Features in File Support
======================================

POSIX defines certain system-specific options in the system calls for
operating on files.  Some systems support these options and others do
not.  Since these options are provided in the kernel, not in the
library, simply using the GNU C Library does not guarantee that any of
these features is supported; it depends on the system you are using.
They can also vary between file systems on a single machine.

   This section describes the macros you can test to determine whether a
particular option is supported on your machine.  If a given macro is
defined in 'unistd.h', then its value says whether the corresponding
feature is supported.  (A value of '-1' indicates no; any other value
indicates yes.)  If the macro is undefined, it means particular files
may or may not support the feature.

   Since all the machines that support the GNU C Library also support
NFS, one can never make a general statement about whether all file
systems support the '_POSIX_CHOWN_RESTRICTED' and '_POSIX_NO_TRUNC'
features.  So these names are never defined as macros in the GNU C
Library.

 -- Macro: int _POSIX_CHOWN_RESTRICTED
     If this option is in effect, the 'chown' function is restricted so
     that the only changes permitted to nonprivileged processes is to
     change the group owner of a file to either be the effective group
     ID of the process, or one of its supplementary group IDs.  *Note
     File Owner::.

 -- Macro: int _POSIX_NO_TRUNC
     If this option is in effect, file name components longer than
     'NAME_MAX' generate an 'ENAMETOOLONG' error.  Otherwise, file name
     components that are too long are silently truncated.

 -- Macro: unsigned char _POSIX_VDISABLE
     This option is only meaningful for files that are terminal devices.
     If it is enabled, then handling for special control characters can
     be disabled individually.  *Note Special Characters::.

   If one of these macros is undefined, that means that the option might
be in effect for some files and not for others.  To inquire about a
particular file, call 'pathconf' or 'fpathconf'.  *Note Pathconf::.


File: libc.info,  Node: File Minimums,  Next: Pathconf,  Prev: Options for Files,  Up: System Configuration

31.8 Minimum Values for File System Limits
==========================================

Here are the names for the POSIX minimum upper bounds for some of the
above parameters.  The significance of these values is that you can
safely push to these limits without checking whether the particular
system you are using can go that far.  In most cases GNU systems do not
have these strict limitations.  The actual limit should be requested if
necessary.

'_POSIX_LINK_MAX'
     The most restrictive limit permitted by POSIX for the maximum value
     of a file's link count.  The value of this constant is '8'; thus,
     you can always make up to eight names for a file without running
     into a system limit.

'_POSIX_MAX_CANON'
     The most restrictive limit permitted by POSIX for the maximum
     number of bytes in a canonical input line from a terminal device.
     The value of this constant is '255'.

'_POSIX_MAX_INPUT'
     The most restrictive limit permitted by POSIX for the maximum
     number of bytes in a terminal device input queue (or typeahead
     buffer).  *Note Input Modes::.  The value of this constant is
     '255'.

'_POSIX_NAME_MAX'
     The most restrictive limit permitted by POSIX for the maximum
     number of bytes in a file name component.  The value of this
     constant is '14'.

'_POSIX_PATH_MAX'
     The most restrictive limit permitted by POSIX for the maximum
     number of bytes in a file name.  The value of this constant is
     '256'.

'_POSIX_PIPE_BUF'
     The most restrictive limit permitted by POSIX for the maximum
     number of bytes that can be written atomically to a pipe.  The
     value of this constant is '512'.

'SYMLINK_MAX'
     Maximum number of bytes in a symbolic link.

'POSIX_REC_INCR_XFER_SIZE'
     Recommended increment for file transfer sizes between the
     'POSIX_REC_MIN_XFER_SIZE' and 'POSIX_REC_MAX_XFER_SIZE' values.

'POSIX_REC_MAX_XFER_SIZE'
     Maximum recommended file transfer size.

'POSIX_REC_MIN_XFER_SIZE'
     Minimum recommended file transfer size.

'POSIX_REC_XFER_ALIGN'
     Recommended file transfer buffer alignment.


File: libc.info,  Node: Pathconf,  Next: Utility Limits,  Prev: File Minimums,  Up: System Configuration

31.9 Using 'pathconf'
=====================

When your machine allows different files to have different values for a
file system parameter, you can use the functions in this section to find
out the value that applies to any particular file.

   These functions and the associated constants for the PARAMETER
argument are declared in the header file 'unistd.h'.

 -- Function: long int pathconf (const char *FILENAME, int PARAMETER)
     Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock fd
     mem | *Note POSIX Safety Concepts::.

     This function is used to inquire about the limits that apply to the
     file named FILENAME.

     The PARAMETER argument should be one of the '_PC_' constants listed
     below.

     The normal return value from 'pathconf' is the value you requested.
     A value of '-1' is returned both if the implementation does not
     impose a limit, and in case of an error.  In the former case,
     'errno' is not set, while in the latter case, 'errno' is set to
     indicate the cause of the problem.  So the only way to use this
     function robustly is to store '0' into 'errno' just before calling
     it.

     Besides the usual file name errors (*note File Name Errors::), the
     following error condition is defined for this function:

     'EINVAL'
          The value of PARAMETER is invalid, or the implementation
          doesn't support the PARAMETER for the specific file.

 -- Function: long int fpathconf (int FILEDES, int PARAMETER)
     Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock fd
     mem | *Note POSIX Safety Concepts::.

     This is just like 'pathconf' except that an open file descriptor is
     used to specify the file for which information is requested,
     instead of a file name.

     The following 'errno' error conditions are defined for this
     function:

     'EBADF'
          The FILEDES argument is not a valid file descriptor.

     'EINVAL'
          The value of PARAMETER is invalid, or the implementation
          doesn't support the PARAMETER for the specific file.

   Here are the symbolic constants that you can use as the PARAMETER
argument to 'pathconf' and 'fpathconf'.  The values are all integer
constants.

'_PC_LINK_MAX'
     Inquire about the value of 'LINK_MAX'.

'_PC_MAX_CANON'
     Inquire about the value of 'MAX_CANON'.

'_PC_MAX_INPUT'
     Inquire about the value of 'MAX_INPUT'.

'_PC_NAME_MAX'
     Inquire about the value of 'NAME_MAX'.

'_PC_PATH_MAX'
     Inquire about the value of 'PATH_MAX'.

'_PC_PIPE_BUF'
     Inquire about the value of 'PIPE_BUF'.

'_PC_CHOWN_RESTRICTED'
     Inquire about the value of '_POSIX_CHOWN_RESTRICTED'.

'_PC_NO_TRUNC'
     Inquire about the value of '_POSIX_NO_TRUNC'.

'_PC_VDISABLE'
     Inquire about the value of '_POSIX_VDISABLE'.

'_PC_SYNC_IO'
     Inquire about the value of '_POSIX_SYNC_IO'.

'_PC_ASYNC_IO'
     Inquire about the value of '_POSIX_ASYNC_IO'.

'_PC_PRIO_IO'
     Inquire about the value of '_POSIX_PRIO_IO'.

'_PC_FILESIZEBITS'
     Inquire about the availability of large files on the filesystem.

'_PC_REC_INCR_XFER_SIZE'
     Inquire about the value of 'POSIX_REC_INCR_XFER_SIZE'.

'_PC_REC_MAX_XFER_SIZE'
     Inquire about the value of 'POSIX_REC_MAX_XFER_SIZE'.

'_PC_REC_MIN_XFER_SIZE'
     Inquire about the value of 'POSIX_REC_MIN_XFER_SIZE'.

'_PC_REC_XFER_ALIGN'
     Inquire about the value of 'POSIX_REC_XFER_ALIGN'.

   *Portability Note:* On some systems, the GNU C Library does not
enforce '_PC_NAME_MAX' or '_PC_PATH_MAX' limits.


File: libc.info,  Node: Utility Limits,  Next: Utility Minimums,  Prev: Pathconf,  Up: System Configuration

31.10 Utility Program Capacity Limits
=====================================

The POSIX.2 standard specifies certain system limits that you can access
through 'sysconf' that apply to utility behavior rather than the
behavior of the library or the operating system.

   The GNU C Library defines macros for these limits, and 'sysconf'
returns values for them if you ask; but these values convey no
meaningful information.  They are simply the smallest values that
POSIX.2 permits.

 -- Macro: int BC_BASE_MAX
     The largest value of 'obase' that the 'bc' utility is guaranteed to
     support.

 -- Macro: int BC_DIM_MAX
     The largest number of elements in one array that the 'bc' utility
     is guaranteed to support.

 -- Macro: int BC_SCALE_MAX
     The largest value of 'scale' that the 'bc' utility is guaranteed to
     support.

 -- Macro: int BC_STRING_MAX
     The largest number of characters in one string constant that the
     'bc' utility is guaranteed to support.

 -- Macro: int COLL_WEIGHTS_MAX
     The largest number of weights that can necessarily be used in
     defining the collating sequence for a locale.

 -- Macro: int EXPR_NEST_MAX
     The maximum number of expressions that can be nested within
     parenthesis by the 'expr' utility.

 -- Macro: int LINE_MAX
     The largest text line that the text-oriented POSIX.2 utilities can
     support.  (If you are using the GNU versions of these utilities,
     then there is no actual limit except that imposed by the available
     virtual memory, but there is no way that the library can tell you
     this.)

 -- Macro: int EQUIV_CLASS_MAX
     The maximum number of weights that can be assigned to an entry of
     the 'LC_COLLATE' category 'order' keyword in a locale definition.
     The GNU C Library does not presently support locale definitions.


File: libc.info,  Node: Utility Minimums,  Next: String Parameters,  Prev: Utility Limits,  Up: System Configuration

31.11 Minimum Values for Utility Limits
=======================================

'_POSIX2_BC_BASE_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     value of 'obase' in the 'bc' utility.  Its value is '99'.

'_POSIX2_BC_DIM_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     size of an array in the 'bc' utility.  Its value is '2048'.

'_POSIX2_BC_SCALE_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     value of 'scale' in the 'bc' utility.  Its value is '99'.

'_POSIX2_BC_STRING_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     size of a string constant in the 'bc' utility.  Its value is
     '1000'.

'_POSIX2_COLL_WEIGHTS_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     number of weights that can necessarily be used in defining the
     collating sequence for a locale.  Its value is '2'.

'_POSIX2_EXPR_NEST_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     number of expressions nested within parenthesis when using the
     'expr' utility.  Its value is '32'.

'_POSIX2_LINE_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     size of a text line that the text utilities can handle.  Its value
     is '2048'.

'_POSIX2_EQUIV_CLASS_MAX'
     The most restrictive limit permitted by POSIX.2 for the maximum
     number of weights that can be assigned to an entry of the
     'LC_COLLATE' category 'order' keyword in a locale definition.  Its
     value is '2'.  The GNU C Library does not presently support locale
     definitions.


File: libc.info,  Node: String Parameters,  Prev: Utility Minimums,  Up: System Configuration

31.12 String-Valued Parameters
==============================

POSIX.2 defines a way to get string-valued parameters from the operating
system with the function 'confstr':

 -- Function: size_t confstr (int PARAMETER, char *BUF, size_t LEN)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     This function reads the value of a string-valued system parameter,
     storing the string into LEN bytes of memory space starting at BUF.
     The PARAMETER argument should be one of the '_CS_' symbols listed
     below.

     The normal return value from 'confstr' is the length of the string
     value that you asked for.  If you supply a null pointer for BUF,
     then 'confstr' does not try to store the string; it just returns
     its length.  A value of '0' indicates an error.

     If the string you asked for is too long for the buffer (that is,
     longer than 'LEN - 1'), then 'confstr' stores just that much
     (leaving room for the terminating null character).  You can tell
     that this has happened because 'confstr' returns a value greater
     than or equal to LEN.

     The following 'errno' error conditions are defined for this
     function:

     'EINVAL'
          The value of the PARAMETER is invalid.

   Currently there is just one parameter you can read with 'confstr':

'_CS_PATH'
     This parameter's value is the recommended default path for
     searching for executable files.  This is the path that a user has
     by default just after logging in.

'_CS_LFS_CFLAGS'
     The returned string specifies which additional flags must be given
     to the C compiler if a source is compiled using the
     '_LARGEFILE_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS_LDFLAGS'
     The returned string specifies which additional flags must be given
     to the linker if a source is compiled using the '_LARGEFILE_SOURCE'
     feature select macro; *note Feature Test Macros::.

'_CS_LFS_LIBS'
     The returned string specifies which additional libraries must be
     linked to the application if a source is compiled using the
     '_LARGEFILE_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS_LINTFLAGS'
     The returned string specifies which additional flags must be given
     to the lint tool if a source is compiled using the
     '_LARGEFILE_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS64_CFLAGS'
     The returned string specifies which additional flags must be given
     to the C compiler if a source is compiled using the
     '_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS64_LDFLAGS'
     The returned string specifies which additional flags must be given
     to the linker if a source is compiled using the
     '_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS64_LIBS'
     The returned string specifies which additional libraries must be
     linked to the application if a source is compiled using the
     '_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
     Macros::.

'_CS_LFS64_LINTFLAGS'
     The returned string specifies which additional flags must be given
     to the lint tool if a source is compiled using the
     '_LARGEFILE64_SOURCE' feature select macro; *note Feature Test
     Macros::.

   The way to use 'confstr' without any arbitrary limit on string size
is to call it twice: first call it to get the length, allocate the
buffer accordingly, and then call 'confstr' again to fill the buffer,
like this:

     char *
     get_default_path (void)
     {
       size_t len = confstr (_CS_PATH, NULL, 0);
       char *buffer = (char *) xmalloc (len);

       if (confstr (_CS_PATH, buf, len + 1) == 0)
         {
           free (buffer);
           return NULL;
         }

       return buffer;
     }


File: libc.info,  Node: Cryptographic Functions,  Next: Debugging Support,  Prev: System Configuration,  Up: Top

32 DES Encryption and Password Handling
***************************************

On many systems, it is unnecessary to have any kind of user
authentication; for instance, a workstation which is not connected to a
network probably does not need any user authentication, because to use
the machine an intruder must have physical access.

   Sometimes, however, it is necessary to be sure that a user is
authorized to use some service a machine provides--for instance, to log
in as a particular user id (*note Users and Groups::).  One traditional
way of doing this is for each user to choose a secret "password"; then,
the system can ask someone claiming to be a user what the user's
password is, and if the person gives the correct password then the
system can grant the appropriate privileges.

   If all the passwords are just stored in a file somewhere, then this
file has to be very carefully protected.  To avoid this, passwords are
run through a "one-way function", a function which makes it difficult to
work out what its input was by looking at its output, before storing in
the file.

   The GNU C Library provides a one-way function that is compatible with
the behavior of the 'crypt' function introduced in FreeBSD 2.0.  It
supports two one-way algorithms: one based on the MD5 message-digest
algorithm that is compatible with modern BSD systems, and the other
based on the Data Encryption Standard (DES) that is compatible with Unix
systems.

   It also provides support for Secure RPC, and some library functions
that can be used to perform normal DES encryption.  The 'AUTH_DES'
authentication flavor in Secure RPC, as provided by the GNU C Library,
uses DES and does not comply with FIPS 140-2 nor does any other use of
DES within the GNU C Library.  It is recommended that Secure RPC should
not be used for systems that need to comply with FIPS 140-2 since all
flavors of encrypted authentication use normal DES.

* Menu:

* Legal Problems::              This software can get you locked up, or worse.
* getpass::                     Prompting the user for a password.
* crypt::                       A one-way function for passwords.
* DES Encryption::              Routines for DES encryption.


File: libc.info,  Node: Legal Problems,  Next: getpass,  Up: Cryptographic Functions

32.1 Legal Problems
===================

Because of the continuously changing state of the law, it's not possible
to provide a definitive survey of the laws affecting cryptography.
Instead, this section warns you of some of the known trouble spots; this
may help you when you try to find out what the laws of your country are.

   Some countries require that you have a licence to use, possess, or
import cryptography.  These countries are believed to include
Byelorussia, Burma, India, Indonesia, Israel, Kazakhstan, Pakistan,
Russia, and Saudi Arabia.

   Some countries restrict the transmission of encrypted messages by
radio; some telecommunications carriers restrict the transmission of
encrypted messages over their network.

   Many countries have some form of export control for encryption
software.  The Wassenaar Arrangement is a multilateral agreement between
33 countries (Argentina, Australia, Austria, Belgium, Bulgaria, Canada,
the Czech Republic, Denmark, Finland, France, Germany, Greece, Hungary,
Ireland, Italy, Japan, Luxembourg, the Netherlands, New Zealand, Norway,
Poland, Portugal, the Republic of Korea, Romania, the Russian
Federation, the Slovak Republic, Spain, Sweden, Switzerland, Turkey,
Ukraine, the United Kingdom and the United States) which restricts some
kinds of encryption exports.  Different countries apply the arrangement
in different ways; some do not allow the exception for certain kinds of
"public domain" software (which would include this library), some only
restrict the export of software in tangible form, and others impose
significant additional restrictions.

   The United States has additional rules.  This software would
generally be exportable under 15 CFR 740.13(e), which permits exports of
"encryption source code" which is "publicly available" and which is "not
subject to an express agreement for the payment of a licensing fee or
royalty for commercial production or sale of any product developed with
the source code" to most countries.

   The rules in this area are continuously changing.  If you know of any
information in this manual that is out-of-date, please report it to the
bug database.  *Note Reporting Bugs::.


File: libc.info,  Node: getpass,  Next: crypt,  Prev: Legal Problems,  Up: Cryptographic Functions

32.2 Reading Passwords
======================

When reading in a password, it is desirable to avoid displaying it on
the screen, to help keep it secret.  The following function handles this
in a convenient way.

 -- Function: char * getpass (const char *PROMPT)
     Preliminary: | MT-Unsafe term | AS-Unsafe heap lock corrupt |
     AC-Unsafe term lock corrupt | *Note POSIX Safety Concepts::.

     'getpass' outputs PROMPT, then reads a string in from the terminal
     without echoing it.  It tries to connect to the real terminal,
     '/dev/tty', if possible, to encourage users not to put plaintext
     passwords in files; otherwise, it uses 'stdin' and 'stderr'.
     'getpass' also disables the INTR, QUIT, and SUSP characters on the
     terminal using the 'ISIG' terminal attribute (*note Local Modes::).
     The terminal is flushed before and after 'getpass', so that
     characters of a mistyped password are not accidentally visible.

     In other C libraries, 'getpass' may only return the first
     'PASS_MAX' bytes of a password.  The GNU C Library has no limit, so
     'PASS_MAX' is undefined.

     The prototype for this function is in 'unistd.h'.  'PASS_MAX' would
     be defined in 'limits.h'.

   This precise set of operations may not suit all possible situations.
In this case, it is recommended that users write their own 'getpass'
substitute.  For instance, a very simple substitute is as follows:


     #include <termios.h>
     #include <stdio.h>

     ssize_t
     my_getpass (char **lineptr, size_t *n, FILE *stream)
     {
       struct termios old, new;
       int nread;

       /* Turn echoing off and fail if we can't. */
       if (tcgetattr (fileno (stream), &old) != 0)
         return -1;
       new = old;
       new.c_lflag &= ~ECHO;
       if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
         return -1;

       /* Read the password. */
       nread = getline (lineptr, n, stream);

       /* Restore terminal. */
       (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);

       return nread;
     }

   The substitute takes the same parameters as 'getline' (*note Line
Input::); the user must print any prompt desired.


File: libc.info,  Node: crypt,  Next: DES Encryption,  Prev: getpass,  Up: Cryptographic Functions

32.3 Encrypting Passwords
=========================

 -- Function: char * crypt (const char *KEY, const char *SALT)
     Preliminary: | MT-Unsafe race:crypt | AS-Unsafe corrupt lock heap
     dlopen | AC-Unsafe lock mem | *Note POSIX Safety Concepts::.

     The 'crypt' function takes a password, KEY, as a string, and a SALT
     character array which is described below, and returns a printable
     ASCII string which starts with another salt.  It is believed that,
     given the output of the function, the best way to find a KEY that
     will produce that output is to guess values of KEY until the
     original value of KEY is found.

     The SALT parameter does two things.  Firstly, it selects which
     algorithm is used, the MD5-based one or the DES-based one.
     Secondly, it makes life harder for someone trying to guess
     passwords against a file containing many passwords; without a SALT,
     an intruder can make a guess, run 'crypt' on it once, and compare
     the result with all the passwords.  With a SALT, the intruder must
     run 'crypt' once for each different salt.

     For the MD5-based algorithm, the SALT should consist of the string
     '$1$', followed by up to 8 characters, terminated by either another
     '$' or the end of the string.  The result of 'crypt' will be the
     SALT, followed by a '$' if the salt didn't end with one, followed
     by 22 characters from the alphabet './0-9A-Za-z', up to 34
     characters total.  Every character in the KEY is significant.

     For the DES-based algorithm, the SALT should consist of two
     characters from the alphabet './0-9A-Za-z', and the result of
     'crypt' will be those two characters followed by 11 more from the
     same alphabet, 13 in total.  Only the first 8 characters in the KEY
     are significant.

     The MD5-based algorithm has no limit on the useful length of the
     password used, and is slightly more secure.  It is therefore
     preferred over the DES-based algorithm.

     When the user enters their password for the first time, the SALT
     should be set to a new string which is reasonably random.  To
     verify a password against the result of a previous call to 'crypt',
     pass the result of the previous call as the SALT.

   The following short program is an example of how to use 'crypt' the
first time a password is entered.  Note that the SALT generation is just
barely acceptable; in particular, it is not unique between machines, and
in many applications it would not be acceptable to let an attacker know
what time the user's password was last set.


     #include <stdio.h>
     #include <time.h>
     #include <unistd.h>
     #include <crypt.h>

     int
     main(void)
     {
       unsigned long seed[2];
       char salt[] = "$1$........";
       const char *const seedchars =
         "./0123456789ABCDEFGHIJKLMNOPQRST"
         "UVWXYZabcdefghijklmnopqrstuvwxyz";
       char *password;
       int i;

       /* Generate a (not very) random seed.
          You should do it better than this... */
       seed[0] = time(NULL);
       seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);

       /* Turn it into printable characters from 'seedchars'. */
       for (i = 0; i < 8; i++)
         salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];

       /* Read in the user's password and encrypt it. */
       password = crypt(getpass("Password:"), salt);

       /* Print the results. */
       puts(password);
       return 0;
     }

   The next program shows how to verify a password.  It prompts the user
for a password and prints "Access granted."  if the user types 'GNU libc
manual'.


     #include <stdio.h>
     #include <string.h>
     #include <unistd.h>
     #include <crypt.h>

     int
     main(void)
     {
       /* Hashed form of "GNU libc manual". */
       const char *const pass = "$1$/iSaq7rB$EoUw5jJPPvAPECNaaWzMK/";

       char *result;
       int ok;

       /* Read in the user's password and encrypt it,
          passing the expected password in as the salt. */
       result = crypt(getpass("Password:"), pass);

       /* Test the result. */
       ok = strcmp (result, pass) == 0;

       puts(ok ? "Access granted." : "Access denied.");
       return ok ? 0 : 1;
     }

 -- Function: char * crypt_r (const char *KEY, const char *SALT, struct
          crypt_data * DATA)
     Preliminary: | MT-Safe | AS-Unsafe corrupt lock heap dlopen |
     AC-Unsafe lock mem | *Note POSIX Safety Concepts::.

     The 'crypt_r' function does the same thing as 'crypt', but takes an
     extra parameter which includes space for its result (among other
     things), so it can be reentrant.  'data->initialized' must be
     cleared to zero before the first time 'crypt_r' is called.

     The 'crypt_r' function is a GNU extension.

   The 'crypt' and 'crypt_r' functions are prototyped in the header
'crypt.h'.


File: libc.info,  Node: DES Encryption,  Prev: crypt,  Up: Cryptographic Functions

32.4 DES Encryption
===================

The Data Encryption Standard is described in the US Government Federal
Information Processing Standards (FIPS) 46-3 published by the National
Institute of Standards and Technology.  The DES has been very thoroughly
analyzed since it was developed in the late 1970s, and no new
significant flaws have been found.

   However, the DES uses only a 56-bit key (plus 8 parity bits), and a
machine has been built in 1998 which can search through all possible
keys in about 6 days, which cost about US$200000; faster searches would
be possible with more money.  This makes simple DES insecure for most
purposes, and NIST no longer permits new US government systems to use
simple DES.

   For serious encryption functionality, it is recommended that one of
the many free encryption libraries be used instead of these routines.

   The DES is a reversible operation which takes a 64-bit block and a
64-bit key, and produces another 64-bit block.  Usually the bits are
numbered so that the most-significant bit, the first bit, of each block
is numbered 1.

   Under that numbering, every 8th bit of the key (the 8th, 16th, and so
on) is not used by the encryption algorithm itself.  But the key must
have odd parity; that is, out of bits 1 through 8, and 9 through 16, and
so on, there must be an odd number of '1' bits, and this completely
specifies the unused bits.

 -- Function: void setkey (const char *KEY)
     Preliminary: | MT-Unsafe race:crypt | AS-Unsafe corrupt lock |
     AC-Unsafe lock | *Note POSIX Safety Concepts::.

     The 'setkey' function sets an internal data structure to be an
     expanded form of KEY.  KEY is specified as an array of 64 bits each
     stored in a 'char', the first bit is 'key[0]' and the 64th bit is
     'key[63]'.  The KEY should have the correct parity.

 -- Function: void encrypt (char *BLOCK, int EDFLAG)
     Preliminary: | MT-Unsafe race:crypt | AS-Unsafe corrupt lock |
     AC-Unsafe lock | *Note POSIX Safety Concepts::.

     The 'encrypt' function encrypts BLOCK if EDFLAG is 0, otherwise it
     decrypts BLOCK, using a key previously set by 'setkey'.  The result
     is placed in BLOCK.

     Like 'setkey', BLOCK is specified as an array of 64 bits each
     stored in a 'char', but there are no parity bits in BLOCK.

 -- Function: void setkey_r (const char *KEY, struct crypt_data * DATA)
 -- Function: void encrypt_r (char *BLOCK, int EDFLAG, struct crypt_data
          * DATA)
     Preliminary: | MT-Safe | AS-Unsafe corrupt lock | AC-Unsafe lock |
     *Note POSIX Safety Concepts::.

     These are reentrant versions of 'setkey' and 'encrypt'.  The only
     difference is the extra parameter, which stores the expanded
     version of KEY.  Before calling 'setkey_r' the first time,
     'data->initialized' must be cleared to zero.

   The 'setkey_r' and 'encrypt_r' functions are GNU extensions.
'setkey', 'encrypt', 'setkey_r', and 'encrypt_r' are defined in
'crypt.h'.

 -- Function: int ecb_crypt (char *KEY, char *BLOCKS, unsigned LEN,
          unsigned MODE)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     The function 'ecb_crypt' encrypts or decrypts one or more blocks
     using DES. Each block is encrypted independently.

     The BLOCKS and the KEY are stored packed in 8-bit bytes, so that
     the first bit of the key is the most-significant bit of 'key[0]'
     and the 63rd bit of the key is stored as the least-significant bit
     of 'key[7]'.  The KEY should have the correct parity.

     LEN is the number of bytes in BLOCKS.  It should be a multiple of 8
     (so that there is a whole number of blocks to encrypt).  LEN is
     limited to a maximum of 'DES_MAXDATA' bytes.

     The result of the encryption replaces the input in BLOCKS.

     The MODE parameter is the bitwise OR of two of the following:

     'DES_ENCRYPT'
          This constant, used in the MODE parameter, specifies that
          BLOCKS is to be encrypted.

     'DES_DECRYPT'
          This constant, used in the MODE parameter, specifies that
          BLOCKS is to be decrypted.

     'DES_HW'
          This constant, used in the MODE parameter, asks to use a
          hardware device.  If no hardware device is available,
          encryption happens anyway, but in software.

     'DES_SW'
          This constant, used in the MODE parameter, specifies that no
          hardware device is to be used.

     The result of the function will be one of these values:

     'DESERR_NONE'
          The encryption succeeded.

     'DESERR_NOHWDEVICE'
          The encryption succeeded, but there was no hardware device
          available.

     'DESERR_HWERROR'
          The encryption failed because of a hardware problem.

     'DESERR_BADPARAM'
          The encryption failed because of a bad parameter, for instance
          LEN is not a multiple of 8 or LEN is larger than
          'DES_MAXDATA'.

 -- Function: int DES_FAILED (int ERR)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     This macro returns 1 if ERR is a 'success' result code from
     'ecb_crypt' or 'cbc_crypt', and 0 otherwise.

 -- Function: int cbc_crypt (char *KEY, char *BLOCKS, unsigned LEN,
          unsigned MODE, char *IVEC)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     The function 'cbc_crypt' encrypts or decrypts one or more blocks
     using DES in Cipher Block Chaining mode.

     For encryption in CBC mode, each block is exclusive-ored with IVEC
     before being encrypted, then IVEC is replaced with the result of
     the encryption, then the next block is processed.  Decryption is
     the reverse of this process.

     This has the advantage that blocks which are the same before being
     encrypted are very unlikely to be the same after being encrypted,
     making it much harder to detect patterns in the data.

     Usually, IVEC is set to 8 random bytes before encryption starts.
     Then the 8 random bytes are transmitted along with the encrypted
     data (without themselves being encrypted), and passed back in as
     IVEC for decryption.  Another possibility is to set IVEC to 8
     zeroes initially, and have the first the block encrypted consist of
     8 random bytes.

     Otherwise, all the parameters are similar to those for 'ecb_crypt'.

 -- Function: void des_setparity (char *KEY)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     The function 'des_setparity' changes the 64-bit KEY, stored packed
     in 8-bit bytes, to have odd parity by altering the low bits of each
     byte.

   The 'ecb_crypt', 'cbc_crypt', and 'des_setparity' functions and their
accompanying macros are all defined in the header 'rpc/des_crypt.h'.


File: libc.info,  Node: Debugging Support,  Next: POSIX Threads,  Prev: Cryptographic Functions,  Up: Top

33 Debugging support
********************

Applications are usually debugged using dedicated debugger programs.
But sometimes this is not possible and, in any case, it is useful to
provide the developer with as much information as possible at the time
the problems are experienced.  For this reason a few functions are
provided which a program can use to help the developer more easily
locate the problem.

* Menu:

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


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)
     Preliminary: | MT-Safe | AS-Unsafe init heap dlopen plugin lock |
     AC-Unsafe init mem lock fd | *Note POSIX Safety Concepts::.

     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)
     Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem lock |
     *Note POSIX Safety Concepts::.

     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)
     Preliminary: | MT-Safe | AS-Safe | AC-Unsafe lock | *Note POSIX
     Safety Concepts::.

     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: POSIX Threads,  Next: Internal Probes,  Prev: Debugging Support,  Up: Top

34 POSIX Threads
****************

This chapter describes the GNU C Library POSIX Thread implementation.

* Menu:

* Thread-specific Data::          Support for creating and
				  managing thread-specific data
* Non-POSIX Extensions::          Additional functions to extend
				  POSIX Thread functionality


File: libc.info,  Node: Thread-specific Data,  Next: Non-POSIX Extensions,  Up: POSIX Threads

34.1 Thread-specific Data
=========================

The GNU C Library implements functions to allow users to create and
manage data specific to a thread.  Such data may be destroyed at thread
exit, if a destructor is provided.  The following functions are defined:

 -- Function: int pthread_key_create (pthread_key_t *KEY, void
          (*DESTRUCTOR)(void*))
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     Create a thread-specific data key for the calling thread,
     referenced by KEY.

     Objects declared with the C++11 'thread_local' keyword are
     destroyed before thread-specific data, so they should not be used
     in thread-specific data destructors or even as members of the
     thread-specific data, since the latter is passed as an argument to
     the destructor function.

 -- Function: int pthread_key_delete (pthread_key_t KEY)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     Destroy the thread-specific data KEY in the calling thread.  The
     destructor for the thread-specific data is not called during
     destruction, nor is it called during thread exit.

 -- Function: void *pthread_getspecific (pthread_key_t KEY)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     Return the thread-specific data associated with KEY in the calling
     thread.

 -- Function: int pthread_setspecific (pthread_key_t KEY, const void
          *VALUE)
     Preliminary: | MT-Safe | AS-Unsafe corrupt heap | AC-Unsafe corrupt
     mem | *Note POSIX Safety Concepts::.

     Associate the thread-specific VALUE with KEY in the calling thread.


File: libc.info,  Node: Non-POSIX Extensions,  Prev: Thread-specific Data,  Up: POSIX Threads

34.2 Non-POSIX Extensions
=========================

In addition to implementing the POSIX API for threads, the GNU C Library
provides additional functions and interfaces to provide functionality
not specified in the standard.

* Menu:

* Default Thread Attributes::             Setting default attributes for
					  threads in a process.


File: libc.info,  Node: Default Thread Attributes,  Up: Non-POSIX Extensions

34.2.1 Setting Process-wide defaults for thread attributes
----------------------------------------------------------

The GNU C Library provides non-standard API functions to set and get the
default attributes used in the creation of threads in a process.

 -- Function: int pthread_getattr_default_np (pthread_attr_t *ATTR)
     Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock | *Note
     POSIX Safety Concepts::.

     Get the default attribute values and set ATTR to match.  This
     function returns 0 on success and a non-zero error code on failure.

 -- Function: int pthread_setattr_default_np (pthread_attr_t *ATTR)
     Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe lock mem |
     *Note POSIX Safety Concepts::.

     Set the default attribute values to match the values in ATTR.  The
     function returns 0 on success and a non-zero error code on failure.
     The following error codes are defined for this function:

     'EINVAL'
          At least one of the values in ATTR does not qualify as valid
          for the attributes or the stack address is set in the
          attribute.
     'ENOMEM'
          The system does not have sufficient memory.


File: libc.info,  Node: Internal Probes,  Next: Language Features,  Prev: POSIX Threads,  Up: Top

35 Internal probes
******************

In order to aid in debugging and monitoring internal behavior, the GNU C
Library exposes nearly-zero-overhead SystemTap probes marked with the
'libc' provider.

   These probes are not part of the GNU C Library stable ABI, and they
are subject to change or removal across releases.  Our only promise with
regard to them is that, if we find a need to remove or modify the
arguments of a probe, the modified probe will have a different name, so
that program monitors relying on the old probe will not get unexpected
arguments.

* Menu:

* Memory Allocation Probes::  Probes in the memory allocation subsystem
* Mathematical Function Probes::  Probes in mathematical functions


File: libc.info,  Node: Memory Allocation Probes,  Next: Mathematical Function Probes,  Up: Internal Probes

35.1 Memory Allocation Probes
=============================

These probes are designed to signal relatively unusual situations within
the virtual memory subsystem of the GNU C Library.

 -- Probe: memory_sbrk_more (void *$ARG1, size_t $ARG2)
     This probe is triggered after the main arena is extended by calling
     'sbrk'.  Argument $ARG1 is the additional size requested to 'sbrk',
     and $ARG2 is the pointer that marks the end of the 'sbrk' area,
     returned in response to the request.

 -- Probe: memory_sbrk_less (void *$ARG1, size_t $ARG2)
     This probe is triggered after the size of the main arena is
     decreased by calling 'sbrk'.  Argument $ARG1 is the size released
     by 'sbrk' (the positive value, rather than the negative value
     passed to 'sbrk'), and $ARG2 is the pointer that marks the end of
     the 'sbrk' area, returned in response to the request.

 -- Probe: memory_heap_new (void *$ARG1, size_t $ARG2)
     This probe is triggered after a new heap is 'mmap'ed.  Argument
     $ARG1 is a pointer to the base of the memory area, where the
     'heap_info' data structure is held, and $ARG2 is the size of the
     heap.

 -- Probe: memory_heap_free (void *$ARG1, size_t $ARG2)
     This probe is triggered _before_ (unlike the other sbrk and heap
     probes) a heap is completely removed via 'munmap'.  Argument $ARG1
     is a pointer to the heap, and $ARG2 is the size of the heap.

 -- Probe: memory_heap_more (void *$ARG1, size_t $ARG2)
     This probe is triggered after a trailing portion of an 'mmap'ed
     heap is extended.  Argument $ARG1 is a pointer to the heap, and
     $ARG2 is the new size of the heap.

 -- Probe: memory_heap_less (void *$ARG1, size_t $ARG2)
     This probe is triggered after a trailing portion of an 'mmap'ed
     heap is released.  Argument $ARG1 is a pointer to the heap, and
     $ARG2 is the new size of the heap.

 -- Probe: memory_malloc_retry (size_t $ARG1)
 -- Probe: memory_realloc_retry (size_t $ARG1, void *$ARG2)
 -- Probe: memory_memalign_retry (size_t $ARG1, size_t $ARG2)
 -- Probe: memory_calloc_retry (size_t $ARG1)
     These probes are triggered when the corresponding functions fail to
     obtain the requested amount of memory from the arena in use, before
     they call 'arena_get_retry' to select an alternate arena in which
     to retry the allocation.  Argument $ARG1 is the amount of memory
     requested by the user; in the 'calloc' case, that is the total size
     computed from both function arguments.  In the 'realloc' case,
     $ARG2 is the pointer to the memory area being resized.  In the
     'memalign' case, $ARG2 is the alignment to be used for the request,
     which may be stricter than the value passed to the 'memalign'
     function.  A 'memalign' probe is also used by functions
     'posix_memalign, valloc' and 'pvalloc'.

     Note that the argument order does _not_ match that of the
     corresponding two-argument functions, so that in all of these
     probes the user-requested allocation size is in $ARG1.

 -- Probe: memory_arena_retry (size_t $ARG1, void *$ARG2)
     This probe is triggered within 'arena_get_retry' (the function
     called to select the alternate arena in which to retry an
     allocation that failed on the first attempt), before the selection
     of an alternate arena.  This probe is redundant, but much easier to
     use when it's not important to determine which of the various
     memory allocation functions is failing to allocate on the first
     try.  Argument $ARG1 is the same as in the function-specific
     probes, except for extra room for padding introduced by functions
     that have to ensure stricter alignment.  Argument $ARG2 is the
     arena in which allocation failed.

 -- Probe: memory_arena_new (void *$ARG1, size_t $ARG2)
     This probe is triggered when 'malloc' allocates and initializes an
     additional arena (not the main arena), but before the arena is
     assigned to the running thread or inserted into the internal linked
     list of arenas.  The arena's 'malloc_state' internal data structure
     is located at $ARG1, within a newly-allocated heap big enough to
     hold at least $ARG2 bytes.

 -- Probe: memory_arena_reuse (void *$ARG1, void *$ARG2)
     This probe is triggered when 'malloc' has just selected an existing
     arena to reuse, and (temporarily) reserved it for exclusive use.
     Argument $ARG1 is a pointer to the newly-selected arena, and $ARG2
     is a pointer to the arena previously used by that thread.

     This occurs within 'reused_arena', right after the mutex mentioned
     in probe 'memory_arena_reuse_wait' is acquired; argument $ARG1 will
     point to the same arena.  In this configuration, this will usually
     only occur once per thread.  The exception is when a thread first
     selected the main arena, but a subsequent allocation from it fails:
     then, and only then, may we switch to another arena to retry that
     allocations, and for further allocations within that thread.

 -- Probe: memory_arena_reuse_wait (void *$ARG1, void *$ARG2, void
          *$ARG3)
     This probe is triggered when 'malloc' is about to wait for an arena
     to become available for reuse.  Argument $ARG1 holds a pointer to
     the mutex the thread is going to wait on, $ARG2 is a pointer to a
     newly-chosen arena to be reused, and $ARG3 is a pointer to the
     arena previously used by that thread.

     This occurs within 'reused_arena', when a thread first tries to
     allocate memory or needs a retry after a failure to allocate from
     the main arena, there isn't any free arena, the maximum number of
     arenas has been reached, and an existing arena was chosen for
     reuse, but its mutex could not be immediately acquired.  The mutex
     in $ARG1 is the mutex of the selected arena.

 -- Probe: memory_arena_reuse_free_list (void *$ARG1)
     This probe is triggered when 'malloc' has chosen an arena that is
     in the free list for use by a thread, within the 'get_free_list'
     function.  The argument $ARG1 holds a pointer to the selected
     arena.

 -- Probe: memory_mallopt (int $ARG1, int $ARG2)
     This probe is triggered when function 'mallopt' is called to change
     'malloc' internal configuration parameters, before any change to
     the parameters is made.  The arguments $ARG1 and $ARG2 are the ones
     passed to the 'mallopt' function.

 -- Probe: memory_mallopt_mxfast (int $ARG1, int $ARG2)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_MXFAST', and the requested
     value is in an acceptable range.  Argument $ARG1 is the requested
     value, and $ARG2 is the previous value of this 'malloc' parameter.

 -- Probe: memory_mallopt_trim_threshold (int $ARG1, int $ARG2, int
          $ARG3)
     This probe is triggere shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_TRIM_THRESHOLD'.  Argument
     $ARG1 is the requested value, $ARG2 is the previous value of this
     'malloc' parameter, and $ARG3 is nonzero if dynamic threshold
     adjustment was already disabled.

 -- Probe: memory_mallopt_top_pad (int $ARG1, int $ARG2, int $ARG3)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_TOP_PAD'.  Argument $ARG1 is
     the requested value, $ARG2 is the previous value of this 'malloc'
     parameter, and $ARG3 is nonzero if dynamic threshold adjustment was
     already disabled.

 -- Probe: memory_mallopt_mmap_threshold (int $ARG1, int $ARG2, int
          $ARG3)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_MMAP_THRESHOLD', and the
     requested value is in an acceptable range.  Argument $ARG1 is the
     requested value, $ARG2 is the previous value of this 'malloc'
     parameter, and $ARG3 is nonzero if dynamic threshold adjustment was
     already disabled.

 -- Probe: memory_mallopt_mmap_max (int $ARG1, int $ARG2, int $ARG3)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_MMAP_MAX'.  Argument $ARG1
     is the requested value, $ARG2 is the previous value of this
     'malloc' parameter, and $ARG3 is nonzero if dynamic threshold
     adjustment was already disabled.

 -- Probe: memory_mallopt_check_action (int $ARG1, int $ARG2)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_CHECK_ACTION'.  Argument
     $ARG1 is the requested value, and $ARG2 is the previous value of
     this 'malloc' parameter.

 -- Probe: memory_mallopt_perturb (int $ARG1, int $ARG2)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_PERTURB'.  Argument $ARG1 is
     the requested value, and $ARG2 is the previous value of this
     'malloc' parameter.

 -- Probe: memory_mallopt_arena_test (int $ARG1, int $ARG2)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_ARENA_TEST', and the
     requested value is in an acceptable range.  Argument $ARG1 is the
     requested value, and $ARG2 is the previous value of this 'malloc'
     parameter.

 -- Probe: memory_mallopt_arena_max (int $ARG1, int $ARG2)
     This probe is triggered shortly after the 'memory_mallopt' probe,
     when the parameter to be changed is 'M_ARENA_MAX', and the
     requested value is in an acceptable range.  Argument $ARG1 is the
     requested value, and $ARG2 is the previous value of this 'malloc'
     parameter.

 -- Probe: memory_mallopt_free_dyn_thresholds (int $ARG1, int $ARG2)
     This probe is triggered when function 'free' decides to adjust the
     dynamic brk/mmap thresholds.  Argument $ARG1 and $ARG2 are the
     adjusted mmap and trim thresholds, respectively.


File: libc.info,  Node: Mathematical Function Probes,  Prev: Memory Allocation Probes,  Up: Internal Probes

35.2 Mathematical Function Probes
=================================

Some mathematical functions fall back to multiple precision arithmetic
for some inputs to get last bit precision for their return values.  This
multiple precision fallback is much slower than the default algorithms
and may have a significant impact on application performance.  The
systemtap probe markers described in this section may help you determine
if your application calls mathematical functions with inputs that may
result in multiple-precision arithmetic.

   Unless explicitly mentioned otherwise, a precision of 1 implies 24
bits of precision in the mantissa of the multiple precision number.
Hence, a precision level of 32 implies 768 bits of precision in the
mantissa.

 -- Probe: slowexp_p6 (double $ARG1, double $ARG2)
     This probe is hit when the 'exp' function is called with an input
     that results in multiple precision computation with precision 6.
     Argument $ARG1 is the input value and $ARG2 is the computed output.

 -- Probe: slowexp_p32 (double $ARG1, double $ARG2)
     This probe is hit when the 'exp' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input value and $ARG2 is the computed output.

 -- Probe: slowpow_p10 (double $ARG1, double $ARG2, double $ARG3, double
          $ARG4)
     This probe is hit when the 'pow' function is called with inputs
     that result in multiple precision computation with precision 10.
     Arguments $ARG1 and $ARG2 are the input values, '$arg3' is the
     value computed in the fast phase of the algorithm and '$arg4' is
     the final accurate value.

 -- Probe: slowpow_p32 (double $ARG1, double $ARG2, double $ARG3, double
          $ARG4)
     This probe is hit when the 'pow' function is called with an input
     that results in multiple precision computation with precision 32.
     Arguments $ARG1 and $ARG2 are the input values, '$arg3' is the
     value computed in the fast phase of the algorithm and '$arg4' is
     the final accurate value.

 -- Probe: slowlog (int $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'log' function is called with an input
     that results in multiple precision computation.  Argument $ARG1 is
     the precision with which the computation succeeded.  Argument $ARG2
     is the input and $ARG3 is the computed output.

 -- Probe: slowlog_inexact (int $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'log' function is called with an input
     that results in multiple precision computation and none of the
     multiple precision computations result in an accurate result.
     Argument $ARG1 is the maximum precision with which computations
     were performed.  Argument $ARG2 is the input and $ARG3 is the
     computed output.

 -- Probe: slowatan2 (int $ARG1, double $ARG2, double $ARG3, double
          $ARG4)
     This probe is hit when the 'atan2' function is called with an input
     that results in multiple precision computation.  Argument $ARG1 is
     the precision with which computation succeeded.  Arguments $ARG2
     and $ARG3 are inputs to the 'atan2' function and $ARG4 is the
     computed result.

 -- Probe: slowatan2_inexact (int $ARG1, double $ARG2, double $ARG3,
          double $ARG4)
     This probe is hit when the 'atan' function is called with an input
     that results in multiple precision computation and none of the
     multiple precision computations result in an accurate result.
     Argument $ARG1 is the maximum precision with which computations
     were performed.  Arguments $ARG2 and $ARG3 are inputs to the
     'atan2' function and $ARG4 is the computed result.

 -- Probe: slowatan (int $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'atan' function is called with an input
     that results in multiple precision computation.  Argument $ARG1 is
     the precision with which computation succeeded.  Argument $ARG2 is
     the input to the 'atan' function and $ARG3 is the computed result.

 -- Probe: slowatan_inexact (int $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'atan' function is called with an input
     that results in multiple precision computation and none of the
     multiple precision computations result in an accurate result.
     Argument $ARG1 is the maximum precision with which computations
     were performed.  Argument $ARG2 is the input to the 'atan' function
     and $ARG3 is the computed result.

 -- Probe: slowtan (double $ARG1, double $ARG2)
     This probe is hit when the 'tan' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function and $ARG2 is the
     computed result.

 -- Probe: slowasin (double $ARG1, double $ARG2)
     This probe is hit when the 'asin' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function and $ARG2 is the
     computed result.

 -- Probe: slowacos (double $ARG1, double $ARG2)
     This probe is hit when the 'acos' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function and $ARG2 is the
     computed result.

 -- Probe: slowsin (double $ARG1, double $ARG2)
     This probe is hit when the 'sin' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function and $ARG2 is the
     computed result.

 -- Probe: slowcos (double $ARG1, double $ARG2)
     This probe is hit when the 'cos' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function and $ARG2 is the
     computed result.

 -- Probe: slowsin_dx (double $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'sin' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function, $ARG2 is the error
     bound of $ARG1 and $ARG3 is the computed result.

 -- Probe: slowcos_dx (double $ARG1, double $ARG2, double $ARG3)
     This probe is hit when the 'cos' function is called with an input
     that results in multiple precision computation with precision 32.
     Argument $ARG1 is the input to the function, $ARG2 is the error
     bound of $ARG1 and $ARG3 is the computed result.


File: libc.info,  Node: Language Features,  Next: Library Summary,  Prev: Internal Probes,  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)
     Preliminary: | MT-Safe | AS-Unsafe heap corrupt | AC-Unsafe mem
     lock corrupt | *Note POSIX Safety Concepts::.

     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)
     Preliminary: | MT-Safe | AS-Unsafe heap corrupt | AC-Unsafe mem
     lock corrupt | *Note POSIX Safety Concepts::.

     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.


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,  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)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     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.

 -- Macro: TYPE va_arg (va_list AP, TYPE)
     Preliminary: | MT-Safe race:ap | AS-Safe | AC-Unsafe corrupt |
     *Note POSIX Safety Concepts::.

     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)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     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)
 -- Macro: void __va_copy (va_list DEST, va_list SRC)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     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 was added in ISO C99.  When building for strict
     conformance to ISO C90 ('gcc -ansi'), it is not available.  The
     macro '__va_copy' is available as a GNU extension in any standards
     mode; before GCC 3.0, it was the only macro for this functionality.

   If you want to use 'va_copy' and be portable to pre-C99 systems, 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 if concerned about pre-C99 portability:

     {
       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: 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.  On systems using the GNU C
     Library, this will be 'unsigned int' or 'unsigned long int'.

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

   *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 Library 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 Library 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.

'LLONG_MIN'

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

'LLONG_MAX'
'ULLONG_MAX'

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

'LONG_LONG_MIN'
'LONG_LONG_MAX'
'ULONG_LONG_MAX'
     These are obsolete names for 'LLONG_MIN', 'LLONG_MAX', and
     'ULLONG_MAX'.  They are only available if '_GNU_SOURCE' is defined
     (*note Feature Test Macros::).  In GCC versions prior to 3.0, these
     were the only names available.

'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 C 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 C 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 difference between 1 and the smallest floating point
     number of type 'float' that is greater than 1.  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)
     Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
     Concepts::.

     This expands to an 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 aiocb64 *AIOCBP)'

     'aio.h' (Unix98): *note Asynchronous Reads/Writes::.

'ssize_t aio_return (struct aiocb *AIOCBP)'

     'aio.h' (POSIX.1b): *note Status of AIO Operations::.

'ssize_t aio_return64 (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 aiocb64 *AIOCBP)'

     'aio.h' (Unix98): *note Asynchronous Reads/Writes::.

'unsigned int alarm (unsigned int SECONDS)'

     'unistd.h' (POSIX.1): *note Setting an Alarm::.

'void * aligned_alloc (size_t ALIGNMENT, size_t SIZE)'

     'stdlib.h' (stdlib.h): *note Aligned Memory Blocks::.

'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 (const 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 (const 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 (const char *FILENAME)'

     'string.h' (GNU): *note Finding Tokens in a String::.

'char * basename (const char *PATH)'

     'libgen.h' (XPG): *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 Processor 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::.

'_DEFAULT_SOURCE'

     (GNU): *note Feature Test Macros::.

'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 EHWPOISON'

     'errno.h' (Linux: Memory page has hardware error): *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 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, mode_t MODE)'

     'sys/stat.h' (BSD): *note Setting Permissions::.

'int fchown (int FILEDES, uid_t OWNER, gid_t GROUP)'

     'unistd.h' (BSD): *note File Owner::.

'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 (void)'

     '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)'

     '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 (wchar_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, const 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::.

'unsigned long int getauxval (unsigned long int TYPE)'

     'sys/auxv.h' (sys/auxv.h): *note Auxiliary Vector::.

'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 void *ADDR, socklen_t LENGTH, int FORMAT)'

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

'int gethostbyaddr_r (const void *ADDR, socklen_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 mntent *RESULT, char *BUFFER, int BUFSIZE)'

     'mntent.h' (BSD): *note mtab::.

'struct netent * getnetbyaddr (uint32_t 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, size_t 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 *const *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' (POSIX.1): *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, size_t 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, 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, socklen_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::.

'char * initstate (unsigned int SEED, char *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::.

'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 issignaling (_float-type_ X)'

     'math.h' (GNU): *note Floating Point Classes::.

'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, const 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', '(optional)' (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 aiocb64 *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::.

'LLONG_MAX'

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

'LLONG_MIN'

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

'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, long int *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, const 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, mode_t MODE, dev_t 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, long int *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', '(optional)' (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', '(optional)' (GNU): *note Access Modes::.

'int O_EXLOCK'

     'fcntl.h', '(optional)' (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', '(optional)' (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' (POSIX.1): *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', '(optional)' (BSD): *note Output Modes::.

'int O_NOLINK'

     'fcntl.h', '(optional)' (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', '(optional)' (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::.

'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', '(optional)' (GNU): *note Access Modes::.

'int O_SHLOCK'

     'fcntl.h', '(optional)' (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', '(optional)' (GNU): *note Access Modes::.

'int O_WRONLY'

     'fcntl.h' (POSIX.1): *note Access Modes::.

'tcflag_t OXTABS'

     'termios.h', '(optional)' (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 (void)'

     '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::.

'ssize_t 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::.

'ssize_t recv (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS)'

     'sys/socket.h' (BSD): *note Receiving Data::.

'ssize_t recvfrom (int SOCKET, void *BUFFER, size_t SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)'

     'sys/socket.h' (BSD): *note Receiving Datagrams::.

'ssize_t 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::.

'rlim_t 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, double EXPONENT)'

     'math.h' (BSD): *note Normalization Functions::.

'float scalbf (float VALUE, float EXPONENT)'

     'math.h' (BSD): *note Normalization Functions::.

'long double scalbl (long double VALUE, long double EXPONENT)'

     'math.h' (BSD): *note Normalization Functions::.

'double scalbln (double X, long int N)'

     'math.h' (BSD): *note Normalization Functions::.

'float scalblnf (float X, long int N)'

     'math.h' (BSD): *note Normalization Functions::.

'long double scalblnl (long double X, long int N)'

     'math.h' (BSD): *note Normalization Functions::.

'double scalbn (double X, int N)'

     'math.h' (BSD): *note Normalization Functions::.

'float scalbnf (float X, int N)'

     'math.h' (BSD): *note Normalization Functions::.

'long double 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 struct dirent **, const struct dirent **))'

     'dirent.h' (BSD/SVID): *note Scanning Directory Content::.

'int scandir64 (const char *DIR, struct dirent64 ***NAMELIST, int (*SELECTOR) (const struct dirent64 *), int (*CMP) (const struct dirent64 **, const struct dirent64 **))'

     '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, 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::.

'char * secure_getenv (const char *NAME)'

     'stdlib.h' (GNU): *note Environment Access::.

'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::.

'ssize_t send (int SOCKET, const void *BUFFER, size_t SIZE, int FLAGS)'

     'sys/socket.h' (BSD): *note Sending Data::.

'ssize_t sendmsg (int SOCKET, const struct msghdr *MESSAGE, int FLAGS)'

     'sys/socket.h' (BSD): *note Receiving Datagrams::.

'ssize_t sendto (int SOCKET, const 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, const 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, const 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, const void *OPTVAL, socklen_t OPTLEN)'

     'sys/socket.h' (BSD): *note Socket Option Functions::.

'char * setstate (char *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::.

'int shm_open (const char *NAME, int OFLAG, mode_t MODE)'

     'sys/mman.h' (POSIX): *note Memory-mapped I/O::.

'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::.

'double significand (double X)'

     'math.h' (BSD): *note Normalization Functions::.

'float significandf (float X)'

     'math.h' (BSD): *note Normalization Functions::.

'long double 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 (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::.

'ssize_t 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 (const 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'

     'utime.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, const 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 wchar_t *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::.

'void 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)'

     'sys/sysctl.h' (BSD): *note System Parameters::.

'void syslog (int FACILITY_PRIORITY, const 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::.

'long int telldir (DIR *DIRSTREAM)'

     'dirent.h' (BSD): *note Random Access Directory::.

'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::.

'long int ulimit (int CMD, ...)'

     'ulimit.h' (BSD): *note Limits on Resources::.

'ULLONG_MAX'

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

'ULONG_LONG_MAX'

     'limits.h' (GNU): *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)'

     'utime.h' (POSIX.1): *note File Times::.

'int utimes (const char *FILENAME, const 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::.

'TYPE va_arg (va_list AP, TYPE)'

     'stdarg.h' (ISO): *note Argument Macros::.

'void va_copy (va_list DEST, va_list SRC)'

     'stdarg.h' (ISO): *note Argument Macros::.

'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, 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 AP)'

     'err.h' (BSD): *note Error Messages::.

'void verrx (int STATUS, const char *FORMAT, va_list AP)'

     '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, const 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)'

     'sys/vtimes.h' (sys/vtimes.h): *note Resource Usage::.

'void vwarn (const char *FORMAT, va_list AP)'

     'err.h' (BSD): *note Error Messages::.

'void vwarnx (const char *FORMAT, va_list AP)'

     '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 wchar_t *DELIMITERS, wchar_t **SAVE_PTR)'

     '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)'

     'wchar.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_t *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::.

