7170 lines
294 KiB
Plaintext
7170 lines
294 KiB
Plaintext
This is libc.info, produced by makeinfo version 6.5 from libc.texinfo.
|
||
|
||
This file documents the GNU C Library.
|
||
|
||
This is ‘The GNU C Library Reference Manual’, for version 2.28.
|
||
|
||
Copyright © 1993–2018 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.
|
||
* CHAR_BIT: (libc)Width of Type.
|
||
* 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.
|
||
* 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.
|
||
* FE_SNANS_ALWAYS_SIGNAL: (libc)Infinity and NaN.
|
||
* 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.
|
||
* FP_LLOGB0: (libc)Exponents and Logarithms.
|
||
* FP_LLOGBNAN: (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_OFD_GETLK: (libc)Open File Description Locks.
|
||
* F_OFD_SETLK: (libc)Open File Description Locks.
|
||
* F_OFD_SETLKW: (libc)Open File Description Locks.
|
||
* 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.
|
||
* HUGE_VAL_FN: (libc)Math Error Reporting.
|
||
* HUGE_VAL_FNx: (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_TMPFILE: (libc)Open-time Flags.
|
||
* 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.
|
||
* SNAN: (libc)Infinity and NaN.
|
||
* SNANF: (libc)Infinity and NaN.
|
||
* SNANFN: (libc)Infinity and NaN.
|
||
* SNANFNx: (libc)Infinity and NaN.
|
||
* SNANL: (libc)Infinity and NaN.
|
||
* 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.
|
||
* 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_high: (libc)PowerPC.
|
||
* __ppc_set_ppr_med_low: (libc)PowerPC.
|
||
* __ppc_set_ppr_very_low: (libc)PowerPC.
|
||
* __ppc_yield: (libc)PowerPC.
|
||
* __riscv_flush_icache: (libc)RISC-V.
|
||
* __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.
|
||
* acosfN: (libc)Inverse Trig Functions.
|
||
* acosfNx: (libc)Inverse Trig Functions.
|
||
* acosh: (libc)Hyperbolic Functions.
|
||
* acoshf: (libc)Hyperbolic Functions.
|
||
* acoshfN: (libc)Hyperbolic Functions.
|
||
* acoshfNx: (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.
|
||
* asinfN: (libc)Inverse Trig Functions.
|
||
* asinfNx: (libc)Inverse Trig Functions.
|
||
* asinh: (libc)Hyperbolic Functions.
|
||
* asinhf: (libc)Hyperbolic Functions.
|
||
* asinhfN: (libc)Hyperbolic Functions.
|
||
* asinhfNx: (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.
|
||
* atan2fN: (libc)Inverse Trig Functions.
|
||
* atan2fNx: (libc)Inverse Trig Functions.
|
||
* atan2l: (libc)Inverse Trig Functions.
|
||
* atan: (libc)Inverse Trig Functions.
|
||
* atanf: (libc)Inverse Trig Functions.
|
||
* atanfN: (libc)Inverse Trig Functions.
|
||
* atanfNx: (libc)Inverse Trig Functions.
|
||
* atanh: (libc)Hyperbolic Functions.
|
||
* atanhf: (libc)Hyperbolic Functions.
|
||
* atanhfN: (libc)Hyperbolic Functions.
|
||
* atanhfNx: (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 Strings and Arrays.
|
||
* 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 Strings and Arrays.
|
||
* cabs: (libc)Absolute Value.
|
||
* cabsf: (libc)Absolute Value.
|
||
* cabsfN: (libc)Absolute Value.
|
||
* cabsfNx: (libc)Absolute Value.
|
||
* cabsl: (libc)Absolute Value.
|
||
* cacos: (libc)Inverse Trig Functions.
|
||
* cacosf: (libc)Inverse Trig Functions.
|
||
* cacosfN: (libc)Inverse Trig Functions.
|
||
* cacosfNx: (libc)Inverse Trig Functions.
|
||
* cacosh: (libc)Hyperbolic Functions.
|
||
* cacoshf: (libc)Hyperbolic Functions.
|
||
* cacoshfN: (libc)Hyperbolic Functions.
|
||
* cacoshfNx: (libc)Hyperbolic Functions.
|
||
* cacoshl: (libc)Hyperbolic Functions.
|
||
* cacosl: (libc)Inverse Trig Functions.
|
||
* call_once: (libc)Call Once.
|
||
* calloc: (libc)Allocating Cleared Space.
|
||
* canonicalize: (libc)FP Bit Twiddling.
|
||
* canonicalize_file_name: (libc)Symbolic Links.
|
||
* canonicalizef: (libc)FP Bit Twiddling.
|
||
* canonicalizefN: (libc)FP Bit Twiddling.
|
||
* canonicalizefNx: (libc)FP Bit Twiddling.
|
||
* canonicalizel: (libc)FP Bit Twiddling.
|
||
* carg: (libc)Operations on Complex.
|
||
* cargf: (libc)Operations on Complex.
|
||
* cargfN: (libc)Operations on Complex.
|
||
* cargfNx: (libc)Operations on Complex.
|
||
* cargl: (libc)Operations on Complex.
|
||
* casin: (libc)Inverse Trig Functions.
|
||
* casinf: (libc)Inverse Trig Functions.
|
||
* casinfN: (libc)Inverse Trig Functions.
|
||
* casinfNx: (libc)Inverse Trig Functions.
|
||
* casinh: (libc)Hyperbolic Functions.
|
||
* casinhf: (libc)Hyperbolic Functions.
|
||
* casinhfN: (libc)Hyperbolic Functions.
|
||
* casinhfNx: (libc)Hyperbolic Functions.
|
||
* casinhl: (libc)Hyperbolic Functions.
|
||
* casinl: (libc)Inverse Trig Functions.
|
||
* catan: (libc)Inverse Trig Functions.
|
||
* catanf: (libc)Inverse Trig Functions.
|
||
* catanfN: (libc)Inverse Trig Functions.
|
||
* catanfNx: (libc)Inverse Trig Functions.
|
||
* catanh: (libc)Hyperbolic Functions.
|
||
* catanhf: (libc)Hyperbolic Functions.
|
||
* catanhfN: (libc)Hyperbolic Functions.
|
||
* catanhfNx: (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.
|
||
* cbrt: (libc)Exponents and Logarithms.
|
||
* cbrtf: (libc)Exponents and Logarithms.
|
||
* cbrtfN: (libc)Exponents and Logarithms.
|
||
* cbrtfNx: (libc)Exponents and Logarithms.
|
||
* cbrtl: (libc)Exponents and Logarithms.
|
||
* ccos: (libc)Trig Functions.
|
||
* ccosf: (libc)Trig Functions.
|
||
* ccosfN: (libc)Trig Functions.
|
||
* ccosfNx: (libc)Trig Functions.
|
||
* ccosh: (libc)Hyperbolic Functions.
|
||
* ccoshf: (libc)Hyperbolic Functions.
|
||
* ccoshfN: (libc)Hyperbolic Functions.
|
||
* ccoshfNx: (libc)Hyperbolic Functions.
|
||
* ccoshl: (libc)Hyperbolic Functions.
|
||
* ccosl: (libc)Trig Functions.
|
||
* ceil: (libc)Rounding Functions.
|
||
* ceilf: (libc)Rounding Functions.
|
||
* ceilfN: (libc)Rounding Functions.
|
||
* ceilfNx: (libc)Rounding Functions.
|
||
* ceill: (libc)Rounding Functions.
|
||
* cexp: (libc)Exponents and Logarithms.
|
||
* cexpf: (libc)Exponents and Logarithms.
|
||
* cexpfN: (libc)Exponents and Logarithms.
|
||
* cexpfNx: (libc)Exponents and Logarithms.
|
||
* cexpl: (libc)Exponents and Logarithms.
|
||
* cfgetispeed: (libc)Line Speed.
|
||
* cfgetospeed: (libc)Line Speed.
|
||
* cfmakeraw: (libc)Noncanonical Input.
|
||
* 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.
|
||
* cimagfN: (libc)Operations on Complex.
|
||
* cimagfNx: (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.
|
||
* clog10fN: (libc)Exponents and Logarithms.
|
||
* clog10fNx: (libc)Exponents and Logarithms.
|
||
* clog10l: (libc)Exponents and Logarithms.
|
||
* clog: (libc)Exponents and Logarithms.
|
||
* clogf: (libc)Exponents and Logarithms.
|
||
* clogfN: (libc)Exponents and Logarithms.
|
||
* clogfNx: (libc)Exponents and Logarithms.
|
||
* clogl: (libc)Exponents and Logarithms.
|
||
* close: (libc)Opening and Closing Files.
|
||
* closedir: (libc)Reading/Closing Directory.
|
||
* closelog: (libc)closelog.
|
||
* cnd_broadcast: (libc)ISO C Condition Variables.
|
||
* cnd_destroy: (libc)ISO C Condition Variables.
|
||
* cnd_init: (libc)ISO C Condition Variables.
|
||
* cnd_signal: (libc)ISO C Condition Variables.
|
||
* cnd_timedwait: (libc)ISO C Condition Variables.
|
||
* cnd_wait: (libc)ISO C Condition Variables.
|
||
* confstr: (libc)String Parameters.
|
||
* conj: (libc)Operations on Complex.
|
||
* conjf: (libc)Operations on Complex.
|
||
* conjfN: (libc)Operations on Complex.
|
||
* conjfNx: (libc)Operations on Complex.
|
||
* conjl: (libc)Operations on Complex.
|
||
* connect: (libc)Connecting.
|
||
* copy_file_range: (libc)Copying File Data.
|
||
* copysign: (libc)FP Bit Twiddling.
|
||
* copysignf: (libc)FP Bit Twiddling.
|
||
* copysignfN: (libc)FP Bit Twiddling.
|
||
* copysignfNx: (libc)FP Bit Twiddling.
|
||
* copysignl: (libc)FP Bit Twiddling.
|
||
* cos: (libc)Trig Functions.
|
||
* cosf: (libc)Trig Functions.
|
||
* cosfN: (libc)Trig Functions.
|
||
* cosfNx: (libc)Trig Functions.
|
||
* cosh: (libc)Hyperbolic Functions.
|
||
* coshf: (libc)Hyperbolic Functions.
|
||
* coshfN: (libc)Hyperbolic Functions.
|
||
* coshfNx: (libc)Hyperbolic Functions.
|
||
* coshl: (libc)Hyperbolic Functions.
|
||
* cosl: (libc)Trig Functions.
|
||
* cpow: (libc)Exponents and Logarithms.
|
||
* cpowf: (libc)Exponents and Logarithms.
|
||
* cpowfN: (libc)Exponents and Logarithms.
|
||
* cpowfNx: (libc)Exponents and Logarithms.
|
||
* cpowl: (libc)Exponents and Logarithms.
|
||
* cproj: (libc)Operations on Complex.
|
||
* cprojf: (libc)Operations on Complex.
|
||
* cprojfN: (libc)Operations on Complex.
|
||
* cprojfNx: (libc)Operations on Complex.
|
||
* cprojl: (libc)Operations on Complex.
|
||
* creal: (libc)Operations on Complex.
|
||
* crealf: (libc)Operations on Complex.
|
||
* crealfN: (libc)Operations on Complex.
|
||
* crealfNx: (libc)Operations on Complex.
|
||
* creall: (libc)Operations on Complex.
|
||
* creat64: (libc)Opening and Closing Files.
|
||
* creat: (libc)Opening and Closing Files.
|
||
* crypt: (libc)Passphrase Storage.
|
||
* crypt_r: (libc)Passphrase Storage.
|
||
* csin: (libc)Trig Functions.
|
||
* csinf: (libc)Trig Functions.
|
||
* csinfN: (libc)Trig Functions.
|
||
* csinfNx: (libc)Trig Functions.
|
||
* csinh: (libc)Hyperbolic Functions.
|
||
* csinhf: (libc)Hyperbolic Functions.
|
||
* csinhfN: (libc)Hyperbolic Functions.
|
||
* csinhfNx: (libc)Hyperbolic Functions.
|
||
* csinhl: (libc)Hyperbolic Functions.
|
||
* csinl: (libc)Trig Functions.
|
||
* csqrt: (libc)Exponents and Logarithms.
|
||
* csqrtf: (libc)Exponents and Logarithms.
|
||
* csqrtfN: (libc)Exponents and Logarithms.
|
||
* csqrtfNx: (libc)Exponents and Logarithms.
|
||
* csqrtl: (libc)Exponents and Logarithms.
|
||
* ctan: (libc)Trig Functions.
|
||
* ctanf: (libc)Trig Functions.
|
||
* ctanfN: (libc)Trig Functions.
|
||
* ctanfNx: (libc)Trig Functions.
|
||
* ctanh: (libc)Hyperbolic Functions.
|
||
* ctanhf: (libc)Hyperbolic Functions.
|
||
* ctanhfN: (libc)Hyperbolic Functions.
|
||
* ctanhfNx: (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.
|
||
* daddl: (libc)Misc FP Arithmetic.
|
||
* dcgettext: (libc)Translation with gettext.
|
||
* dcngettext: (libc)Advanced gettext functions.
|
||
* ddivl: (libc)Misc FP Arithmetic.
|
||
* 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.
|
||
* dmull: (libc)Misc FP Arithmetic.
|
||
* 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.
|
||
* dsubl: (libc)Misc FP Arithmetic.
|
||
* dup2: (libc)Duplicating Descriptors.
|
||
* dup: (libc)Duplicating Descriptors.
|
||
* ecvt: (libc)System V Number Conversion.
|
||
* ecvt_r: (libc)System V Number Conversion.
|
||
* 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_remove: (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.
|
||
* erfcfN: (libc)Special Functions.
|
||
* erfcfNx: (libc)Special Functions.
|
||
* erfcl: (libc)Special Functions.
|
||
* erff: (libc)Special Functions.
|
||
* erffN: (libc)Special Functions.
|
||
* erffNx: (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.
|
||
* exp10fN: (libc)Exponents and Logarithms.
|
||
* exp10fNx: (libc)Exponents and Logarithms.
|
||
* exp10l: (libc)Exponents and Logarithms.
|
||
* exp2: (libc)Exponents and Logarithms.
|
||
* exp2f: (libc)Exponents and Logarithms.
|
||
* exp2fN: (libc)Exponents and Logarithms.
|
||
* exp2fNx: (libc)Exponents and Logarithms.
|
||
* exp2l: (libc)Exponents and Logarithms.
|
||
* exp: (libc)Exponents and Logarithms.
|
||
* expf: (libc)Exponents and Logarithms.
|
||
* expfN: (libc)Exponents and Logarithms.
|
||
* expfNx: (libc)Exponents and Logarithms.
|
||
* expl: (libc)Exponents and Logarithms.
|
||
* explicit_bzero: (libc)Erasing Sensitive Data.
|
||
* expm1: (libc)Exponents and Logarithms.
|
||
* expm1f: (libc)Exponents and Logarithms.
|
||
* expm1fN: (libc)Exponents and Logarithms.
|
||
* expm1fNx: (libc)Exponents and Logarithms.
|
||
* expm1l: (libc)Exponents and Logarithms.
|
||
* fMaddfN: (libc)Misc FP Arithmetic.
|
||
* fMaddfNx: (libc)Misc FP Arithmetic.
|
||
* fMdivfN: (libc)Misc FP Arithmetic.
|
||
* fMdivfNx: (libc)Misc FP Arithmetic.
|
||
* fMmulfN: (libc)Misc FP Arithmetic.
|
||
* fMmulfNx: (libc)Misc FP Arithmetic.
|
||
* fMsubfN: (libc)Misc FP Arithmetic.
|
||
* fMsubfNx: (libc)Misc FP Arithmetic.
|
||
* fMxaddfN: (libc)Misc FP Arithmetic.
|
||
* fMxaddfNx: (libc)Misc FP Arithmetic.
|
||
* fMxdivfN: (libc)Misc FP Arithmetic.
|
||
* fMxdivfNx: (libc)Misc FP Arithmetic.
|
||
* fMxmulfN: (libc)Misc FP Arithmetic.
|
||
* fMxmulfNx: (libc)Misc FP Arithmetic.
|
||
* fMxsubfN: (libc)Misc FP Arithmetic.
|
||
* fMxsubfNx: (libc)Misc FP Arithmetic.
|
||
* fabs: (libc)Absolute Value.
|
||
* fabsf: (libc)Absolute Value.
|
||
* fabsfN: (libc)Absolute Value.
|
||
* fabsfNx: (libc)Absolute Value.
|
||
* fabsl: (libc)Absolute Value.
|
||
* fadd: (libc)Misc FP Arithmetic.
|
||
* faddl: (libc)Misc FP Arithmetic.
|
||
* 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.
|
||
* fdimfN: (libc)Misc FP Arithmetic.
|
||
* fdimfNx: (libc)Misc FP Arithmetic.
|
||
* fdiml: (libc)Misc FP Arithmetic.
|
||
* fdiv: (libc)Misc FP Arithmetic.
|
||
* fdivl: (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.
|
||
* fegetmode: (libc)Control Functions.
|
||
* 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.
|
||
* fesetexcept: (libc)Status bit operations.
|
||
* fesetexceptflag: (libc)Status bit operations.
|
||
* fesetmode: (libc)Control Functions.
|
||
* fesetround: (libc)Rounding.
|
||
* fetestexcept: (libc)Status bit operations.
|
||
* fetestexceptflag: (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.
|
||
* floorfN: (libc)Rounding Functions.
|
||
* floorfNx: (libc)Rounding Functions.
|
||
* floorl: (libc)Rounding Functions.
|
||
* fma: (libc)Misc FP Arithmetic.
|
||
* fmaf: (libc)Misc FP Arithmetic.
|
||
* fmafN: (libc)Misc FP Arithmetic.
|
||
* fmafNx: (libc)Misc FP Arithmetic.
|
||
* fmal: (libc)Misc FP Arithmetic.
|
||
* fmax: (libc)Misc FP Arithmetic.
|
||
* fmaxf: (libc)Misc FP Arithmetic.
|
||
* fmaxfN: (libc)Misc FP Arithmetic.
|
||
* fmaxfNx: (libc)Misc FP Arithmetic.
|
||
* fmaxl: (libc)Misc FP Arithmetic.
|
||
* fmaxmag: (libc)Misc FP Arithmetic.
|
||
* fmaxmagf: (libc)Misc FP Arithmetic.
|
||
* fmaxmagfN: (libc)Misc FP Arithmetic.
|
||
* fmaxmagfNx: (libc)Misc FP Arithmetic.
|
||
* fmaxmagl: (libc)Misc FP Arithmetic.
|
||
* fmemopen: (libc)String Streams.
|
||
* fmin: (libc)Misc FP Arithmetic.
|
||
* fminf: (libc)Misc FP Arithmetic.
|
||
* fminfN: (libc)Misc FP Arithmetic.
|
||
* fminfNx: (libc)Misc FP Arithmetic.
|
||
* fminl: (libc)Misc FP Arithmetic.
|
||
* fminmag: (libc)Misc FP Arithmetic.
|
||
* fminmagf: (libc)Misc FP Arithmetic.
|
||
* fminmagfN: (libc)Misc FP Arithmetic.
|
||
* fminmagfNx: (libc)Misc FP Arithmetic.
|
||
* fminmagl: (libc)Misc FP Arithmetic.
|
||
* fmod: (libc)Remainder Functions.
|
||
* fmodf: (libc)Remainder Functions.
|
||
* fmodfN: (libc)Remainder Functions.
|
||
* fmodfNx: (libc)Remainder Functions.
|
||
* fmodl: (libc)Remainder Functions.
|
||
* fmtmsg: (libc)Printing Formatted Messages.
|
||
* fmul: (libc)Misc FP Arithmetic.
|
||
* fmull: (libc)Misc FP Arithmetic.
|
||
* 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.
|
||
* frexpfN: (libc)Normalization Functions.
|
||
* frexpfNx: (libc)Normalization Functions.
|
||
* frexpl: (libc)Normalization Functions.
|
||
* fromfp: (libc)Rounding Functions.
|
||
* fromfpf: (libc)Rounding Functions.
|
||
* fromfpfN: (libc)Rounding Functions.
|
||
* fromfpfNx: (libc)Rounding Functions.
|
||
* fromfpl: (libc)Rounding Functions.
|
||
* fromfpx: (libc)Rounding Functions.
|
||
* fromfpxf: (libc)Rounding Functions.
|
||
* fromfpxfN: (libc)Rounding Functions.
|
||
* fromfpxfNx: (libc)Rounding Functions.
|
||
* fromfpxl: (libc)Rounding 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.
|
||
* fsub: (libc)Misc FP Arithmetic.
|
||
* fsubl: (libc)Misc FP Arithmetic.
|
||
* 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.
|
||
* getentropy: (libc)Unpredictable Bytes.
|
||
* 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.
|
||
* getpayload: (libc)FP Bit Twiddling.
|
||
* getpayloadf: (libc)FP Bit Twiddling.
|
||
* getpayloadfN: (libc)FP Bit Twiddling.
|
||
* getpayloadfNx: (libc)FP Bit Twiddling.
|
||
* getpayloadl: (libc)FP Bit Twiddling.
|
||
* 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.
|
||
* getrandom: (libc)Unpredictable Bytes.
|
||
* 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.
|
||
* hypotfN: (libc)Exponents and Logarithms.
|
||
* hypotfNx: (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.
|
||
* ilogbfN: (libc)Exponents and Logarithms.
|
||
* ilogbfNx: (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.
|
||
* iscanonical: (libc)Floating Point Classes.
|
||
* iscntrl: (libc)Classification of Characters.
|
||
* isdigit: (libc)Classification of Characters.
|
||
* iseqsig: (libc)FP Comparison Functions.
|
||
* 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.
|
||
* issubnormal: (libc)Floating Point Classes.
|
||
* 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.
|
||
* iszero: (libc)Floating Point Classes.
|
||
* j0: (libc)Special Functions.
|
||
* j0f: (libc)Special Functions.
|
||
* j0fN: (libc)Special Functions.
|
||
* j0fNx: (libc)Special Functions.
|
||
* j0l: (libc)Special Functions.
|
||
* j1: (libc)Special Functions.
|
||
* j1f: (libc)Special Functions.
|
||
* j1fN: (libc)Special Functions.
|
||
* j1fNx: (libc)Special Functions.
|
||
* j1l: (libc)Special Functions.
|
||
* jn: (libc)Special Functions.
|
||
* jnf: (libc)Special Functions.
|
||
* jnfN: (libc)Special Functions.
|
||
* jnfNx: (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.
|
||
* ldexpfN: (libc)Normalization Functions.
|
||
* ldexpfNx: (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.
|
||
* lgammafN: (libc)Special Functions.
|
||
* lgammafN_r: (libc)Special Functions.
|
||
* lgammafNx: (libc)Special Functions.
|
||
* lgammafNx_r: (libc)Special Functions.
|
||
* lgammaf_r: (libc)Special Functions.
|
||
* lgammal: (libc)Special Functions.
|
||
* lgammal_r: (libc)Special Functions.
|
||
* link: (libc)Hard Links.
|
||
* linkat: (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.
|
||
* llogb: (libc)Exponents and Logarithms.
|
||
* llogbf: (libc)Exponents and Logarithms.
|
||
* llogbfN: (libc)Exponents and Logarithms.
|
||
* llogbfNx: (libc)Exponents and Logarithms.
|
||
* llogbl: (libc)Exponents and Logarithms.
|
||
* llrint: (libc)Rounding Functions.
|
||
* llrintf: (libc)Rounding Functions.
|
||
* llrintfN: (libc)Rounding Functions.
|
||
* llrintfNx: (libc)Rounding Functions.
|
||
* llrintl: (libc)Rounding Functions.
|
||
* llround: (libc)Rounding Functions.
|
||
* llroundf: (libc)Rounding Functions.
|
||
* llroundfN: (libc)Rounding Functions.
|
||
* llroundfNx: (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.
|
||
* log10fN: (libc)Exponents and Logarithms.
|
||
* log10fNx: (libc)Exponents and Logarithms.
|
||
* log10l: (libc)Exponents and Logarithms.
|
||
* log1p: (libc)Exponents and Logarithms.
|
||
* log1pf: (libc)Exponents and Logarithms.
|
||
* log1pfN: (libc)Exponents and Logarithms.
|
||
* log1pfNx: (libc)Exponents and Logarithms.
|
||
* log1pl: (libc)Exponents and Logarithms.
|
||
* log2: (libc)Exponents and Logarithms.
|
||
* log2f: (libc)Exponents and Logarithms.
|
||
* log2fN: (libc)Exponents and Logarithms.
|
||
* log2fNx: (libc)Exponents and Logarithms.
|
||
* log2l: (libc)Exponents and Logarithms.
|
||
* log: (libc)Exponents and Logarithms.
|
||
* logb: (libc)Exponents and Logarithms.
|
||
* logbf: (libc)Exponents and Logarithms.
|
||
* logbfN: (libc)Exponents and Logarithms.
|
||
* logbfNx: (libc)Exponents and Logarithms.
|
||
* logbl: (libc)Exponents and Logarithms.
|
||
* logf: (libc)Exponents and Logarithms.
|
||
* logfN: (libc)Exponents and Logarithms.
|
||
* logfNx: (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.
|
||
* lrintfN: (libc)Rounding Functions.
|
||
* lrintfNx: (libc)Rounding Functions.
|
||
* lrintl: (libc)Rounding Functions.
|
||
* lround: (libc)Rounding Functions.
|
||
* lroundf: (libc)Rounding Functions.
|
||
* lroundfN: (libc)Rounding Functions.
|
||
* lroundfNx: (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 Strings and Arrays.
|
||
* memchr: (libc)Search Functions.
|
||
* memcmp: (libc)String/Array Comparison.
|
||
* memcpy: (libc)Copying Strings and Arrays.
|
||
* memfd_create: (libc)Memory-mapped I/O.
|
||
* memfrob: (libc)Obfuscating Data.
|
||
* memmem: (libc)Search Functions.
|
||
* memmove: (libc)Copying Strings and Arrays.
|
||
* mempcpy: (libc)Copying Strings and Arrays.
|
||
* memrchr: (libc)Search Functions.
|
||
* memset: (libc)Copying Strings and Arrays.
|
||
* 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.
|
||
* mlock2: (libc)Page Lock Functions.
|
||
* 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.
|
||
* modffN: (libc)Rounding Functions.
|
||
* modffNx: (libc)Rounding Functions.
|
||
* modfl: (libc)Rounding Functions.
|
||
* mount: (libc)Mount-Unmount-Remount.
|
||
* mprobe: (libc)Heap Consistency Checking.
|
||
* mprotect: (libc)Memory Protection.
|
||
* 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.
|
||
* mtx_destroy: (libc)ISO C Mutexes.
|
||
* mtx_init: (libc)ISO C Mutexes.
|
||
* mtx_lock: (libc)ISO C Mutexes.
|
||
* mtx_timedlock: (libc)ISO C Mutexes.
|
||
* mtx_trylock: (libc)ISO C Mutexes.
|
||
* mtx_unlock: (libc)ISO C Mutexes.
|
||
* 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.
|
||
* nanfN: (libc)FP Bit Twiddling.
|
||
* nanfNx: (libc)FP Bit Twiddling.
|
||
* nanl: (libc)FP Bit Twiddling.
|
||
* nanosleep: (libc)Sleeping.
|
||
* nearbyint: (libc)Rounding Functions.
|
||
* nearbyintf: (libc)Rounding Functions.
|
||
* nearbyintfN: (libc)Rounding Functions.
|
||
* nearbyintfNx: (libc)Rounding Functions.
|
||
* nearbyintl: (libc)Rounding Functions.
|
||
* nextafter: (libc)FP Bit Twiddling.
|
||
* nextafterf: (libc)FP Bit Twiddling.
|
||
* nextafterfN: (libc)FP Bit Twiddling.
|
||
* nextafterfNx: (libc)FP Bit Twiddling.
|
||
* nextafterl: (libc)FP Bit Twiddling.
|
||
* nextdown: (libc)FP Bit Twiddling.
|
||
* nextdownf: (libc)FP Bit Twiddling.
|
||
* nextdownfN: (libc)FP Bit Twiddling.
|
||
* nextdownfNx: (libc)FP Bit Twiddling.
|
||
* nextdownl: (libc)FP Bit Twiddling.
|
||
* nexttoward: (libc)FP Bit Twiddling.
|
||
* nexttowardf: (libc)FP Bit Twiddling.
|
||
* nexttowardl: (libc)FP Bit Twiddling.
|
||
* nextup: (libc)FP Bit Twiddling.
|
||
* nextupf: (libc)FP Bit Twiddling.
|
||
* nextupfN: (libc)FP Bit Twiddling.
|
||
* nextupfNx: (libc)FP Bit Twiddling.
|
||
* nextupl: (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.
|
||
* pkey_alloc: (libc)Memory Protection.
|
||
* pkey_free: (libc)Memory Protection.
|
||
* pkey_get: (libc)Memory Protection.
|
||
* pkey_mprotect: (libc)Memory Protection.
|
||
* pkey_set: (libc)Memory Protection.
|
||
* popen: (libc)Pipe to a Subprocess.
|
||
* posix_fallocate64: (libc)Storage Allocation.
|
||
* posix_fallocate: (libc)Storage Allocation.
|
||
* posix_memalign: (libc)Aligned Memory Blocks.
|
||
* pow: (libc)Exponents and Logarithms.
|
||
* powf: (libc)Exponents and Logarithms.
|
||
* powfN: (libc)Exponents and Logarithms.
|
||
* powfNx: (libc)Exponents and Logarithms.
|
||
* powl: (libc)Exponents and Logarithms.
|
||
* pread64: (libc)I/O Primitives.
|
||
* pread: (libc)I/O Primitives.
|
||
* preadv2: (libc)Scatter-Gather.
|
||
* preadv64: (libc)Scatter-Gather.
|
||
* preadv64v2: (libc)Scatter-Gather.
|
||
* preadv: (libc)Scatter-Gather.
|
||
* 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.
|
||
* pwritev2: (libc)Scatter-Gather.
|
||
* pwritev64: (libc)Scatter-Gather.
|
||
* pwritev64v2: (libc)Scatter-Gather.
|
||
* pwritev: (libc)Scatter-Gather.
|
||
* 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.
|
||
* reallocarray: (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.
|
||
* remainderfN: (libc)Remainder Functions.
|
||
* remainderfNx: (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.
|
||
* rintfN: (libc)Rounding Functions.
|
||
* rintfNx: (libc)Rounding Functions.
|
||
* rintl: (libc)Rounding Functions.
|
||
* rmdir: (libc)Deleting Files.
|
||
* round: (libc)Rounding Functions.
|
||
* roundeven: (libc)Rounding Functions.
|
||
* roundevenf: (libc)Rounding Functions.
|
||
* roundevenfN: (libc)Rounding Functions.
|
||
* roundevenfNx: (libc)Rounding Functions.
|
||
* roundevenl: (libc)Rounding Functions.
|
||
* roundf: (libc)Rounding Functions.
|
||
* roundfN: (libc)Rounding Functions.
|
||
* roundfNx: (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.
|
||
* scalblnfN: (libc)Normalization Functions.
|
||
* scalblnfNx: (libc)Normalization Functions.
|
||
* scalblnl: (libc)Normalization Functions.
|
||
* scalbn: (libc)Normalization Functions.
|
||
* scalbnf: (libc)Normalization Functions.
|
||
* scalbnfN: (libc)Normalization Functions.
|
||
* scalbnfNx: (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.
|
||
* sem_close: (libc)Semaphores.
|
||
* sem_destroy: (libc)Semaphores.
|
||
* sem_getvalue: (libc)Semaphores.
|
||
* sem_init: (libc)Semaphores.
|
||
* sem_open: (libc)Semaphores.
|
||
* sem_post: (libc)Semaphores.
|
||
* sem_timedwait: (libc)Semaphores.
|
||
* sem_trywait: (libc)Semaphores.
|
||
* sem_unlink: (libc)Semaphores.
|
||
* sem_wait: (libc)Semaphores.
|
||
* semctl: (libc)Semaphores.
|
||
* semget: (libc)Semaphores.
|
||
* semop: (libc)Semaphores.
|
||
* semtimedop: (libc)Semaphores.
|
||
* 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.
|
||
* setlinebuf: (libc)Controlling Buffering.
|
||
* setlocale: (libc)Setting the Locale.
|
||
* setlogmask: (libc)setlogmask.
|
||
* setmntent: (libc)mtab.
|
||
* setnetent: (libc)Networks Database.
|
||
* setnetgrent: (libc)Lookup Netgroup.
|
||
* setpayload: (libc)FP Bit Twiddling.
|
||
* setpayloadf: (libc)FP Bit Twiddling.
|
||
* setpayloadfN: (libc)FP Bit Twiddling.
|
||
* setpayloadfNx: (libc)FP Bit Twiddling.
|
||
* setpayloadl: (libc)FP Bit Twiddling.
|
||
* setpayloadsig: (libc)FP Bit Twiddling.
|
||
* setpayloadsigf: (libc)FP Bit Twiddling.
|
||
* setpayloadsigfN: (libc)FP Bit Twiddling.
|
||
* setpayloadsigfNx: (libc)FP Bit Twiddling.
|
||
* setpayloadsigl: (libc)FP Bit Twiddling.
|
||
* 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)BSD Signal Handling.
|
||
* sigdelset: (libc)Signal Sets.
|
||
* sigemptyset: (libc)Signal Sets.
|
||
* sigfillset: (libc)Signal Sets.
|
||
* siginterrupt: (libc)BSD Signal Handling.
|
||
* sigismember: (libc)Signal Sets.
|
||
* siglongjmp: (libc)Non-Local Exits and Signals.
|
||
* sigmask: (libc)BSD Signal Handling.
|
||
* signal: (libc)Basic Signal Handling.
|
||
* signbit: (libc)FP Bit Twiddling.
|
||
* significand: (libc)Normalization Functions.
|
||
* significandf: (libc)Normalization Functions.
|
||
* significandl: (libc)Normalization Functions.
|
||
* sigpause: (libc)BSD Signal Handling.
|
||
* sigpending: (libc)Checking for Pending Signals.
|
||
* sigprocmask: (libc)Process Signal Mask.
|
||
* sigsetjmp: (libc)Non-Local Exits and Signals.
|
||
* sigsetmask: (libc)BSD Signal Handling.
|
||
* sigstack: (libc)Signal Stack.
|
||
* sigsuspend: (libc)Sigsuspend.
|
||
* sin: (libc)Trig Functions.
|
||
* sincos: (libc)Trig Functions.
|
||
* sincosf: (libc)Trig Functions.
|
||
* sincosfN: (libc)Trig Functions.
|
||
* sincosfNx: (libc)Trig Functions.
|
||
* sincosl: (libc)Trig Functions.
|
||
* sinf: (libc)Trig Functions.
|
||
* sinfN: (libc)Trig Functions.
|
||
* sinfNx: (libc)Trig Functions.
|
||
* sinh: (libc)Hyperbolic Functions.
|
||
* sinhf: (libc)Hyperbolic Functions.
|
||
* sinhfN: (libc)Hyperbolic Functions.
|
||
* sinhfNx: (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.
|
||
* sqrtfN: (libc)Exponents and Logarithms.
|
||
* sqrtfNx: (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 Strings and Arrays.
|
||
* stpncpy: (libc)Truncating Strings.
|
||
* strcasecmp: (libc)String/Array Comparison.
|
||
* strcasestr: (libc)Search Functions.
|
||
* strcat: (libc)Concatenating Strings.
|
||
* strchr: (libc)Search Functions.
|
||
* strchrnul: (libc)Search Functions.
|
||
* strcmp: (libc)String/Array Comparison.
|
||
* strcoll: (libc)Collation Functions.
|
||
* strcpy: (libc)Copying Strings and Arrays.
|
||
* strcspn: (libc)Search Functions.
|
||
* strdup: (libc)Copying Strings and Arrays.
|
||
* strdupa: (libc)Copying Strings and Arrays.
|
||
* strerror: (libc)Error Messages.
|
||
* strerror_r: (libc)Error Messages.
|
||
* strfmon: (libc)Formatting Numbers.
|
||
* strfromd: (libc)Printing of Floats.
|
||
* strfromf: (libc)Printing of Floats.
|
||
* strfromfN: (libc)Printing of Floats.
|
||
* strfromfNx: (libc)Printing of Floats.
|
||
* strfroml: (libc)Printing of Floats.
|
||
* strfry: (libc)Shuffling Bytes.
|
||
* strftime: (libc)Formatting Calendar Time.
|
||
* strlen: (libc)String Length.
|
||
* strncasecmp: (libc)String/Array Comparison.
|
||
* strncat: (libc)Truncating Strings.
|
||
* strncmp: (libc)String/Array Comparison.
|
||
* strncpy: (libc)Truncating Strings.
|
||
* strndup: (libc)Truncating Strings.
|
||
* strndupa: (libc)Truncating Strings.
|
||
* 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.
|
||
* strtofN: (libc)Parsing of Floats.
|
||
* strtofNx: (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.
|
||
* tanfN: (libc)Trig Functions.
|
||
* tanfNx: (libc)Trig Functions.
|
||
* tanh: (libc)Hyperbolic Functions.
|
||
* tanhf: (libc)Hyperbolic Functions.
|
||
* tanhfN: (libc)Hyperbolic Functions.
|
||
* tanhfNx: (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.
|
||
* tgammafN: (libc)Special Functions.
|
||
* tgammafNx: (libc)Special Functions.
|
||
* tgammal: (libc)Special Functions.
|
||
* thrd_create: (libc)ISO C Thread Management.
|
||
* thrd_current: (libc)ISO C Thread Management.
|
||
* thrd_detach: (libc)ISO C Thread Management.
|
||
* thrd_equal: (libc)ISO C Thread Management.
|
||
* thrd_exit: (libc)ISO C Thread Management.
|
||
* thrd_join: (libc)ISO C Thread Management.
|
||
* thrd_sleep: (libc)ISO C Thread Management.
|
||
* thrd_yield: (libc)ISO C Thread Management.
|
||
* 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.
|
||
* totalorder: (libc)FP Comparison Functions.
|
||
* totalorderf: (libc)FP Comparison Functions.
|
||
* totalorderfN: (libc)FP Comparison Functions.
|
||
* totalorderfNx: (libc)FP Comparison Functions.
|
||
* totalorderl: (libc)FP Comparison Functions.
|
||
* totalordermag: (libc)FP Comparison Functions.
|
||
* totalordermagf: (libc)FP Comparison Functions.
|
||
* totalordermagfN: (libc)FP Comparison Functions.
|
||
* totalordermagfNx: (libc)FP Comparison Functions.
|
||
* totalordermagl: (libc)FP Comparison Functions.
|
||
* 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.
|
||
* truncfN: (libc)Rounding Functions.
|
||
* truncfNx: (libc)Rounding Functions.
|
||
* truncl: (libc)Rounding Functions.
|
||
* tsearch: (libc)Tree Search Function.
|
||
* tss_create: (libc)ISO C Thread-local Storage.
|
||
* tss_delete: (libc)ISO C Thread-local Storage.
|
||
* tss_get: (libc)ISO C Thread-local Storage.
|
||
* tss_set: (libc)ISO C Thread-local Storage.
|
||
* ttyname: (libc)Is It a Terminal.
|
||
* ttyname_r: (libc)Is It a Terminal.
|
||
* twalk: (libc)Tree Search Function.
|
||
* tzset: (libc)Time Zone Functions.
|
||
* ufromfp: (libc)Rounding Functions.
|
||
* ufromfpf: (libc)Rounding Functions.
|
||
* ufromfpfN: (libc)Rounding Functions.
|
||
* ufromfpfNx: (libc)Rounding Functions.
|
||
* ufromfpl: (libc)Rounding Functions.
|
||
* ufromfpx: (libc)Rounding Functions.
|
||
* ufromfpxf: (libc)Rounding Functions.
|
||
* ufromfpxfN: (libc)Rounding Functions.
|
||
* ufromfpxfNx: (libc)Rounding Functions.
|
||
* ufromfpxl: (libc)Rounding 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 Strings and Arrays.
|
||
* wcpncpy: (libc)Truncating Strings.
|
||
* wcrtomb: (libc)Converting a Character.
|
||
* wcscasecmp: (libc)String/Array Comparison.
|
||
* wcscat: (libc)Concatenating Strings.
|
||
* wcschr: (libc)Search Functions.
|
||
* wcschrnul: (libc)Search Functions.
|
||
* wcscmp: (libc)String/Array Comparison.
|
||
* wcscoll: (libc)Collation Functions.
|
||
* wcscpy: (libc)Copying Strings and Arrays.
|
||
* wcscspn: (libc)Search Functions.
|
||
* wcsdup: (libc)Copying Strings and Arrays.
|
||
* wcsftime: (libc)Formatting Calendar Time.
|
||
* wcslen: (libc)String Length.
|
||
* wcsncasecmp: (libc)String/Array Comparison.
|
||
* wcsncat: (libc)Truncating Strings.
|
||
* wcsncmp: (libc)String/Array Comparison.
|
||
* wcsncpy: (libc)Truncating Strings.
|
||
* 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.
|
||
* wcstofN: (libc)Parsing of Floats.
|
||
* wcstofNx: (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 Strings and Arrays.
|
||
* wmemmove: (libc)Copying Strings and Arrays.
|
||
* wmempcpy: (libc)Copying Strings and Arrays.
|
||
* wmemset: (libc)Copying Strings and Arrays.
|
||
* 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.
|
||
* y0fN: (libc)Special Functions.
|
||
* y0fNx: (libc)Special Functions.
|
||
* y0l: (libc)Special Functions.
|
||
* y1: (libc)Special Functions.
|
||
* y1f: (libc)Special Functions.
|
||
* y1fN: (libc)Special Functions.
|
||
* y1fNx: (libc)Special Functions.
|
||
* y1l: (libc)Special Functions.
|
||
* yn: (libc)Special Functions.
|
||
* ynf: (libc)Special Functions.
|
||
* ynfN: (libc)Special Functions.
|
||
* ynfNx: (libc)Special Functions.
|
||
* ynl: (libc)Special Functions.
|
||
END-INFO-DIR-ENTRY
|
||
|
||
|
||
File: libc.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
|
||
|
||
Main Menu
|
||
*********
|
||
|
||
This is ‘The GNU C Library Reference Manual’, for Version 2.28 of the
|
||
GNU C Library.
|
||
|
||
* Menu:
|
||
|
||
* Introduction:: Purpose of the GNU C Library.
|
||
* Error Reporting:: How library functions report errors.
|
||
* Memory:: Allocating virtual memory and controlling
|
||
paging.
|
||
* Character Handling:: Character testing and conversion functions.
|
||
* String and Array Utilities:: Utilities for copying and comparing strings
|
||
and arrays.
|
||
* Character Set Handling:: Support for extended character sets.
|
||
* Locales:: The country and language can affect the
|
||
behavior of library functions.
|
||
* Message Translation:: How to make the program speak the user’s
|
||
language.
|
||
* Searching and Sorting:: General searching and sorting functions.
|
||
* Pattern Matching:: Matching shell “globs” and regular
|
||
expressions.
|
||
* I/O Overview:: Introduction to the I/O facilities.
|
||
* I/O on Streams:: High-level, portable I/O facilities.
|
||
* Low-Level I/O:: Low-level, less portable I/O.
|
||
* File System Interface:: Functions for manipulating files.
|
||
* Pipes and FIFOs:: A simple interprocess communication
|
||
mechanism.
|
||
* Sockets:: A more complicated IPC mechanism, with
|
||
networking support.
|
||
* Low-Level Terminal Interface:: How to change the characteristics of a
|
||
terminal device.
|
||
* Syslog:: System logging and messaging.
|
||
* Mathematics:: Math functions, useful constants, random
|
||
numbers.
|
||
* Arithmetic:: Low level arithmetic functions.
|
||
* Date and Time:: Functions for getting the date and time and
|
||
formatting them nicely.
|
||
* Resource Usage And Limitation:: Functions for examining resource usage and
|
||
getting and setting limits.
|
||
* Non-Local Exits:: Jumping out of nested function calls.
|
||
* Signal Handling:: How to send, block, and handle signals.
|
||
* Program Basics:: Writing the beginning and end of your
|
||
program.
|
||
* Processes:: How to create processes and run other
|
||
programs.
|
||
* Inter-Process Communication:: All about inter-process communication.
|
||
* Job Control:: All about process groups and sessions.
|
||
* Name Service Switch:: Accessing system databases.
|
||
* Users and Groups:: How users are identified and classified.
|
||
* System Management:: Controlling the system and getting
|
||
information about it.
|
||
* System Configuration:: Parameters describing operating system
|
||
limits.
|
||
* Cryptographic Functions:: Passphrase storage and strongly
|
||
unpredictable bytes..
|
||
* Debugging Support:: Functions to help debugging applications.
|
||
* Threads:: Functions, constants, and data types for
|
||
working with threads.
|
||
* Internal Probes:: Probes to monitor libc internal behavior.
|
||
* Tunables:: Tunable switches to alter libc internal
|
||
behavior.
|
||
|
||
Appendices
|
||
|
||
* Language Features:: C language features provided by the library.
|
||
* Library Summary:: A summary showing the syntax, header file,
|
||
and derivation of each library feature.
|
||
* Installation:: How to install the GNU C Library.
|
||
* Maintenance:: How to enhance and port the GNU C Library.
|
||
* Platform:: Describe all platform-specific facilities
|
||
provided.
|
||
* Contributors:: Who wrote what parts of the GNU C Library.
|
||
* Free Manuals:: Free Software Needs Free Documentation.
|
||
* Copying:: The GNU Lesser General Public License says
|
||
how you can copy and share the GNU C Library.
|
||
* Documentation License:: This manual is under the GNU Free
|
||
Documentation License.
|
||
|
||
Indices
|
||
|
||
* Concept Index:: Index of concepts and names.
|
||
* Type Index:: Index of types and type qualifiers.
|
||
* Function Index:: Index of functions and function-like macros.
|
||
* Variable Index:: Index of variables and variable-like macros.
|
||
* File Index:: Index of programs and files.
|
||
|
||
— The Detailed Node Listing —
|
||
|
||
Introduction
|
||
|
||
* Getting Started:: What this manual is for and how to use it.
|
||
* Standards and Portability:: Standards and sources upon which the GNU
|
||
C library is based.
|
||
* Using the Library:: Some practical uses for the library.
|
||
* Roadmap to the Manual:: Overview of the remaining chapters in
|
||
this manual.
|
||
|
||
Standards and Portability
|
||
|
||
* ISO C:: The international standard for the C
|
||
programming language.
|
||
* POSIX:: The ISO/IEC 9945 (aka IEEE 1003) standards
|
||
for operating systems.
|
||
* Berkeley Unix:: BSD and SunOS.
|
||
* SVID:: The System V Interface Description.
|
||
* XPG:: The X/Open Portability Guide.
|
||
|
||
POSIX
|
||
|
||
* POSIX Safety Concepts:: Safety concepts from POSIX.
|
||
* Unsafe Features:: Features that make functions unsafe.
|
||
* Conditionally Safe Features:: Features that make functions unsafe
|
||
in the absence of workarounds.
|
||
* Other Safety Remarks:: Additional safety features and remarks.
|
||
|
||
Using the Library
|
||
|
||
* Header Files:: How to include the header files in your
|
||
programs.
|
||
* Macro Definitions:: Some functions in the library may really
|
||
be implemented as macros.
|
||
* Reserved Names:: The C standard reserves some names for
|
||
the library, and some for users.
|
||
* Feature Test Macros:: How to control what names are defined.
|
||
|
||
Error Reporting
|
||
|
||
* Checking for Errors:: How errors are reported by library functions.
|
||
* Error Codes:: Error code macros; all of these expand
|
||
into integer constant values.
|
||
* Error Messages:: Mapping error codes onto error messages.
|
||
|
||
Memory
|
||
|
||
* Memory Concepts:: An introduction to concepts and terminology.
|
||
* Memory Allocation:: Allocating storage for your program data
|
||
* Resizing the Data Segment:: ‘brk’, ‘sbrk’
|
||
* Memory Protection:: Controlling access to memory regions.
|
||
* Locking Pages:: Preventing page faults
|
||
|
||
Memory Allocation
|
||
|
||
* Memory Allocation and C:: How to get different kinds of allocation in C.
|
||
* The GNU Allocator:: An overview of the GNU ‘malloc’
|
||
implementation.
|
||
* Unconstrained Allocation:: The ‘malloc’ facility allows fully general
|
||
dynamic allocation.
|
||
* Allocation Debugging:: Finding memory leaks and not freed memory.
|
||
* Replacing malloc:: Using your own ‘malloc’-style allocator.
|
||
* Obstacks:: Obstacks are less general than malloc
|
||
but more efficient and convenient.
|
||
* Variable Size Automatic:: Allocation of variable-sized blocks
|
||
of automatic storage that are freed when the
|
||
calling function returns.
|
||
|
||
Unconstrained Allocation
|
||
|
||
* Basic Allocation:: Simple use of ‘malloc’.
|
||
* Malloc Examples:: Examples of ‘malloc’. ‘xmalloc’.
|
||
* Freeing after Malloc:: Use ‘free’ to free a block you
|
||
got with ‘malloc’.
|
||
* Changing Block Size:: Use ‘realloc’ to make a block
|
||
bigger or smaller.
|
||
* Allocating Cleared Space:: Use ‘calloc’ to allocate a
|
||
block and clear it.
|
||
* Aligned Memory Blocks:: Allocating specially aligned memory.
|
||
* Malloc Tunable Parameters:: Use ‘mallopt’ to adjust allocation
|
||
parameters.
|
||
* Heap Consistency Checking:: Automatic checking for errors.
|
||
* Hooks for Malloc:: You can use these hooks for debugging
|
||
programs that use ‘malloc’.
|
||
* Statistics of Malloc:: Getting information about how much
|
||
memory your program is using.
|
||
* Summary of Malloc:: Summary of ‘malloc’ and related functions.
|
||
|
||
Allocation Debugging
|
||
|
||
* Tracing malloc:: How to install the tracing functionality.
|
||
* Using the Memory Debugger:: Example programs excerpts.
|
||
* Tips for the Memory Debugger:: Some more or less clever ideas.
|
||
* Interpreting the traces:: What do all these lines mean?
|
||
|
||
Obstacks
|
||
|
||
* Creating Obstacks:: How to declare an obstack in your program.
|
||
* Preparing for Obstacks:: Preparations needed before you can
|
||
use obstacks.
|
||
* Allocation in an Obstack:: Allocating objects in an obstack.
|
||
* Freeing Obstack Objects:: Freeing objects in an obstack.
|
||
* Obstack Functions:: The obstack functions are both
|
||
functions and macros.
|
||
* Growing Objects:: Making an object bigger by stages.
|
||
* Extra Fast Growing:: Extra-high-efficiency (though more
|
||
complicated) growing objects.
|
||
* Status of an Obstack:: Inquiries about the status of an obstack.
|
||
* Obstacks Data Alignment:: Controlling alignment of objects in obstacks.
|
||
* Obstack Chunks:: How obstacks obtain and release chunks;
|
||
efficiency considerations.
|
||
* Summary of Obstacks::
|
||
|
||
Variable Size Automatic
|
||
|
||
* Alloca Example:: Example of using ‘alloca’.
|
||
* Advantages of Alloca:: Reasons to use ‘alloca’.
|
||
* Disadvantages of Alloca:: Reasons to avoid ‘alloca’.
|
||
* GNU C Variable-Size Arrays:: Only in GNU C, here is an alternative
|
||
method of allocating dynamically and
|
||
freeing automatically.
|
||
|
||
Locking Pages
|
||
|
||
* Why Lock Pages:: Reasons to read this section.
|
||
* Locked Memory Details:: Everything you need to know locked
|
||
memory
|
||
* Page Lock Functions:: Here’s how to do it.
|
||
|
||
Character Handling
|
||
|
||
* Classification of Characters:: Testing whether characters are
|
||
letters, digits, punctuation, etc.
|
||
|
||
* Case Conversion:: Case mapping, and the like.
|
||
* Classification of Wide Characters:: Character class determination for
|
||
wide characters.
|
||
* Using Wide Char Classes:: Notes on using the wide character
|
||
classes.
|
||
* Wide Character Case Conversion:: Mapping of wide characters.
|
||
|
||
String and Array Utilities
|
||
|
||
* Representation of Strings:: Introduction to basic concepts.
|
||
* String/Array Conventions:: Whether to use a string function or an
|
||
arbitrary array function.
|
||
* String Length:: Determining the length of a string.
|
||
* Copying Strings and Arrays:: Functions to copy strings and arrays.
|
||
* Concatenating Strings:: Functions to concatenate strings while copying.
|
||
* Truncating Strings:: Functions to truncate strings while copying.
|
||
* String/Array Comparison:: Functions for byte-wise and character-wise
|
||
comparison.
|
||
* Collation Functions:: Functions for collating strings.
|
||
* Search Functions:: Searching for a specific element or substring.
|
||
* Finding Tokens in a String:: Splitting a string into tokens by looking
|
||
for delimiters.
|
||
* Erasing Sensitive Data:: Clearing memory which contains sensitive
|
||
data, after it’s no longer needed.
|
||
* Shuffling Bytes:: Or how to flash-cook a string.
|
||
* Obfuscating Data:: Reversibly obscuring data from casual view.
|
||
* Encode Binary Data:: Encoding and Decoding of Binary Data.
|
||
* Argz and Envz Vectors:: Null-separated string vectors.
|
||
|
||
Argz and Envz Vectors
|
||
|
||
* Argz Functions:: Operations on argz vectors.
|
||
* Envz Functions:: Additional operations on environment vectors.
|
||
|
||
Character Set Handling
|
||
|
||
* Extended Char Intro:: Introduction to Extended Characters.
|
||
* Charset Function Overview:: Overview about Character Handling
|
||
Functions.
|
||
* Restartable multibyte conversion:: Restartable multibyte conversion
|
||
Functions.
|
||
* Non-reentrant Conversion:: Non-reentrant Conversion Function.
|
||
* Generic Charset Conversion:: Generic Charset Conversion.
|
||
|
||
Restartable multibyte conversion
|
||
|
||
* Selecting the Conversion:: Selecting the conversion and its properties.
|
||
* Keeping the state:: Representing the state of the conversion.
|
||
* Converting a Character:: Converting Single Characters.
|
||
* Converting Strings:: Converting Multibyte and Wide Character
|
||
Strings.
|
||
* Multibyte Conversion Example:: A Complete Multibyte Conversion Example.
|
||
|
||
Non-reentrant Conversion
|
||
|
||
* Non-reentrant Character Conversion:: Non-reentrant Conversion of Single
|
||
Characters.
|
||
* Non-reentrant String Conversion:: Non-reentrant Conversion of Strings.
|
||
* Shift State:: States in Non-reentrant Functions.
|
||
|
||
Generic Charset Conversion
|
||
|
||
* Generic Conversion Interface:: Generic Character Set Conversion Interface.
|
||
* iconv Examples:: A complete ‘iconv’ example.
|
||
* Other iconv Implementations:: Some Details about other ‘iconv’
|
||
Implementations.
|
||
* glibc iconv Implementation:: The ‘iconv’ Implementation in the GNU C
|
||
library.
|
||
|
||
Locales
|
||
|
||
* Effects of Locale:: Actions affected by the choice of
|
||
locale.
|
||
* Choosing Locale:: How the user specifies a locale.
|
||
* Locale Categories:: Different purposes for which you can
|
||
select a locale.
|
||
* Setting the Locale:: How a program specifies the locale
|
||
with library functions.
|
||
* Standard Locales:: Locale names available on all systems.
|
||
* Locale Names:: Format of system-specific locale names.
|
||
* Locale Information:: How to access the information for the locale.
|
||
* Formatting Numbers:: A dedicated function to format numbers.
|
||
* Yes-or-No Questions:: Check a Response against the locale.
|
||
|
||
Locale Information
|
||
|
||
* The Lame Way to Locale Data:: ISO C’s ‘localeconv’.
|
||
* The Elegant and Fast Way:: X/Open’s ‘nl_langinfo’.
|
||
|
||
The Lame Way to Locale Data
|
||
|
||
* General Numeric:: Parameters for formatting numbers and
|
||
currency amounts.
|
||
* Currency Symbol:: How to print the symbol that identifies an
|
||
amount of money (e.g. ‘$’).
|
||
* Sign of Money Amount:: How to print the (positive or negative) sign
|
||
for a monetary amount, if one exists.
|
||
|
||
Message Translation
|
||
|
||
* Message catalogs a la X/Open:: The ‘catgets’ family of functions.
|
||
* The Uniforum approach:: The ‘gettext’ family of functions.
|
||
|
||
Message catalogs a la X/Open
|
||
|
||
* The catgets Functions:: The ‘catgets’ function family.
|
||
* The message catalog files:: Format of the message catalog files.
|
||
* The gencat program:: How to generate message catalogs files which
|
||
can be used by the functions.
|
||
* Common Usage:: How to use the ‘catgets’ interface.
|
||
|
||
The Uniforum approach
|
||
|
||
* Message catalogs with gettext:: The ‘gettext’ family of functions.
|
||
* Helper programs for gettext:: Programs to handle message catalogs
|
||
for ‘gettext’.
|
||
|
||
Message catalogs with gettext
|
||
|
||
* Translation with gettext:: What has to be done to translate a message.
|
||
* Locating gettext catalog:: How to determine which catalog to be used.
|
||
* Advanced gettext functions:: Additional functions for more complicated
|
||
situations.
|
||
* Charset conversion in gettext:: How to specify the output character set
|
||
‘gettext’ uses.
|
||
* GUI program problems:: How to use ‘gettext’ in GUI programs.
|
||
* Using gettextized software:: The possibilities of the user to influence
|
||
the way ‘gettext’ works.
|
||
|
||
Searching and Sorting
|
||
|
||
* Comparison Functions:: Defining how to compare two objects.
|
||
Since the sort and search facilities
|
||
are general, you have to specify the
|
||
ordering.
|
||
* Array Search Function:: The ‘bsearch’ function.
|
||
* Array Sort Function:: The ‘qsort’ function.
|
||
* Search/Sort Example:: An example program.
|
||
* Hash Search Function:: The ‘hsearch’ function.
|
||
* Tree Search Function:: The ‘tsearch’ function.
|
||
|
||
Pattern Matching
|
||
|
||
* Wildcard Matching:: Matching a wildcard pattern against a single string.
|
||
* Globbing:: Finding the files that match a wildcard pattern.
|
||
* Regular Expressions:: Matching regular expressions against strings.
|
||
* Word Expansion:: Expanding shell variables, nested commands,
|
||
arithmetic, and wildcards.
|
||
This is what the shell does with shell commands.
|
||
|
||
Globbing
|
||
|
||
* Calling Glob:: Basic use of ‘glob’.
|
||
* Flags for Globbing:: Flags that enable various options in ‘glob’.
|
||
* More Flags for Globbing:: GNU specific extensions to ‘glob’.
|
||
|
||
Regular Expressions
|
||
|
||
* POSIX Regexp Compilation:: Using ‘regcomp’ to prepare to match.
|
||
* Flags for POSIX Regexps:: Syntax variations for ‘regcomp’.
|
||
* Matching POSIX Regexps:: Using ‘regexec’ to match the compiled
|
||
pattern that you get from ‘regcomp’.
|
||
* Regexp Subexpressions:: Finding which parts of the string were matched.
|
||
* Subexpression Complications:: Find points of which parts were matched.
|
||
* Regexp Cleanup:: Freeing storage; reporting errors.
|
||
|
||
Word Expansion
|
||
|
||
* Expansion Stages:: What word expansion does to a string.
|
||
* Calling Wordexp:: How to call ‘wordexp’.
|
||
* Flags for Wordexp:: Options you can enable in ‘wordexp’.
|
||
* Wordexp Example:: A sample program that does word expansion.
|
||
* Tilde Expansion:: Details of how tilde expansion works.
|
||
* Variable Substitution:: Different types of variable substitution.
|
||
|
||
I/O Overview
|
||
|
||
* I/O Concepts:: Some basic information and terminology.
|
||
* File Names:: How to refer to a file.
|
||
|
||
I/O Concepts
|
||
|
||
* Streams and File Descriptors:: The GNU C Library provides two ways
|
||
to access the contents of files.
|
||
* File Position:: The number of bytes from the
|
||
beginning of the file.
|
||
|
||
File Names
|
||
|
||
* Directories:: Directories contain entries for files.
|
||
* File Name Resolution:: A file name specifies how to look up a file.
|
||
* File Name Errors:: Error conditions relating to file names.
|
||
* File Name Portability:: File name portability and syntax issues.
|
||
|
||
I/O on Streams
|
||
|
||
* Streams:: About the data type representing a stream.
|
||
* Standard Streams:: Streams to the standard input and output
|
||
devices are created for you.
|
||
* Opening Streams:: How to create a stream to talk to a file.
|
||
* Closing Streams:: Close a stream when you are finished with it.
|
||
* Streams and Threads:: Issues with streams in threaded programs.
|
||
* Streams and I18N:: Streams in internationalized applications.
|
||
* Simple Output:: Unformatted output by characters and lines.
|
||
* Character Input:: Unformatted input by characters and words.
|
||
* Line Input:: Reading a line or a record from a stream.
|
||
* Unreading:: Peeking ahead/pushing back input just read.
|
||
* Block Input/Output:: Input and output operations on blocks of data.
|
||
* Formatted Output:: ‘printf’ and related functions.
|
||
* Customizing Printf:: You can define new conversion specifiers for
|
||
‘printf’ and friends.
|
||
* Formatted Input:: ‘scanf’ and related functions.
|
||
* EOF and Errors:: How you can tell if an I/O error happens.
|
||
* Error Recovery:: What you can do about errors.
|
||
* Binary Streams:: Some systems distinguish between text files
|
||
and binary files.
|
||
* File Positioning:: About random-access streams.
|
||
* Portable Positioning:: Random access on peculiar ISO C systems.
|
||
* Stream Buffering:: How to control buffering of streams.
|
||
* Other Kinds of Streams:: Streams that do not necessarily correspond
|
||
to an open file.
|
||
* Formatted Messages:: Print strictly formatted messages.
|
||
|
||
Unreading
|
||
|
||
* Unreading Idea:: An explanation of unreading with pictures.
|
||
* How Unread:: How to call ‘ungetc’ to do unreading.
|
||
|
||
Formatted Output
|
||
|
||
* Formatted Output Basics:: Some examples to get you started.
|
||
* Output Conversion Syntax:: General syntax of conversion
|
||
specifications.
|
||
* Table of Output Conversions:: Summary of output conversions and
|
||
what they do.
|
||
* Integer Conversions:: Details about formatting of integers.
|
||
* Floating-Point Conversions:: Details about formatting of
|
||
floating-point numbers.
|
||
* Other Output Conversions:: Details about formatting of strings,
|
||
characters, pointers, and the like.
|
||
* Formatted Output Functions:: Descriptions of the actual functions.
|
||
* Dynamic Output:: Functions that allocate memory for the output.
|
||
* Variable Arguments Output:: ‘vprintf’ and friends.
|
||
* Parsing a Template String:: What kinds of args does a given template
|
||
call for?
|
||
* Example of Parsing:: Sample program using ‘parse_printf_format’.
|
||
|
||
Customizing Printf
|
||
|
||
* Registering New Conversions:: Using ‘register_printf_function’
|
||
to register a new output conversion.
|
||
* Conversion Specifier Options:: The handler must be able to get
|
||
the options specified in the
|
||
template when it is called.
|
||
* Defining the Output Handler:: Defining the handler and arginfo
|
||
functions that are passed as arguments
|
||
to ‘register_printf_function’.
|
||
* Printf Extension Example:: How to define a ‘printf’
|
||
handler function.
|
||
* Predefined Printf Handlers:: Predefined ‘printf’ handlers.
|
||
|
||
Formatted Input
|
||
|
||
* Formatted Input Basics:: Some basics to get you started.
|
||
* Input Conversion Syntax:: Syntax of conversion specifications.
|
||
* Table of Input Conversions:: Summary of input conversions and what they do.
|
||
* Numeric Input Conversions:: Details of conversions for reading numbers.
|
||
* String Input Conversions:: Details of conversions for reading strings.
|
||
* Dynamic String Input:: String conversions that ‘malloc’ the buffer.
|
||
* Other Input Conversions:: Details of miscellaneous other conversions.
|
||
* Formatted Input Functions:: Descriptions of the actual functions.
|
||
* Variable Arguments Input:: ‘vscanf’ and friends.
|
||
|
||
Stream Buffering
|
||
|
||
* Buffering Concepts:: Terminology is defined here.
|
||
* Flushing Buffers:: How to ensure that output buffers are flushed.
|
||
* Controlling Buffering:: How to specify what kind of buffering to use.
|
||
|
||
Other Kinds of Streams
|
||
|
||
* String Streams:: Streams that get data from or put data in
|
||
a string or memory buffer.
|
||
* Custom Streams:: Defining your own streams with an arbitrary
|
||
input data source and/or output data sink.
|
||
|
||
Custom Streams
|
||
|
||
* Streams and Cookies:: The “cookie” records where to fetch or
|
||
store data that is read or written.
|
||
* Hook Functions:: How you should define the four “hook
|
||
functions” that a custom stream needs.
|
||
|
||
Formatted Messages
|
||
|
||
* Printing Formatted Messages:: The ‘fmtmsg’ function.
|
||
* Adding Severity Classes:: Add more severity classes.
|
||
* Example:: How to use ‘fmtmsg’ and ‘addseverity’.
|
||
|
||
Low-Level I/O
|
||
|
||
* Opening and Closing Files:: How to open and close file
|
||
descriptors.
|
||
* I/O Primitives:: Reading and writing data.
|
||
* File Position Primitive:: Setting a descriptor’s file
|
||
position.
|
||
* Descriptors and Streams:: Converting descriptor to stream
|
||
or vice-versa.
|
||
* Stream/Descriptor Precautions:: Precautions needed if you use both
|
||
descriptors and streams.
|
||
* Scatter-Gather:: Fast I/O to discontinuous buffers.
|
||
* Copying File Data:: Copying data between files.
|
||
* Memory-mapped I/O:: Using files like memory.
|
||
* Waiting for I/O:: How to check for input or output
|
||
on multiple file descriptors.
|
||
* Synchronizing I/O:: Making sure all I/O actions completed.
|
||
* Asynchronous I/O:: Perform I/O in parallel.
|
||
* Control Operations:: Various other operations on file
|
||
descriptors.
|
||
* Duplicating Descriptors:: Fcntl commands for duplicating
|
||
file descriptors.
|
||
* Descriptor Flags:: Fcntl commands for manipulating
|
||
flags associated with file
|
||
descriptors.
|
||
* File Status Flags:: Fcntl commands for manipulating
|
||
flags associated with open files.
|
||
* File Locks:: Fcntl commands for implementing
|
||
file locking.
|
||
* Open File Description Locks:: Fcntl commands for implementing
|
||
open file description locking.
|
||
* Open File Description Locks Example:: An example of open file description lock
|
||
usage
|
||
* Interrupt Input:: Getting an asynchronous signal when
|
||
input arrives.
|
||
* IOCTLs:: Generic I/O Control operations.
|
||
|
||
Stream/Descriptor Precautions
|
||
|
||
* Linked Channels:: Dealing with channels sharing a file position.
|
||
* Independent Channels:: Dealing with separately opened, unlinked channels.
|
||
* Cleaning Streams:: Cleaning a stream makes it safe to use
|
||
another channel.
|
||
|
||
Asynchronous I/O
|
||
|
||
* Asynchronous Reads/Writes:: Asynchronous Read and Write Operations.
|
||
* Status of AIO Operations:: Getting the Status of AIO Operations.
|
||
* Synchronizing AIO Operations:: Getting into a consistent state.
|
||
* Cancel AIO Operations:: Cancellation of AIO Operations.
|
||
* Configuration of AIO:: How to optimize the AIO implementation.
|
||
|
||
File Status Flags
|
||
|
||
* Access Modes:: Whether the descriptor can read or write.
|
||
* Open-time Flags:: Details of ‘open’.
|
||
* Operating Modes:: Special modes to control I/O operations.
|
||
* Getting File Status Flags:: Fetching and changing these flags.
|
||
|
||
File System Interface
|
||
|
||
* Working Directory:: This is used to resolve relative
|
||
file names.
|
||
* Accessing Directories:: Finding out what files a directory
|
||
contains.
|
||
* Working with Directory Trees:: Apply actions to all files or a selectable
|
||
subset of a directory hierarchy.
|
||
* Hard Links:: Adding alternate names to a file.
|
||
* Symbolic Links:: A file that “points to” a file name.
|
||
* Deleting Files:: How to delete a file, and what that means.
|
||
* Renaming Files:: Changing a file’s name.
|
||
* Creating Directories:: A system call just for creating a directory.
|
||
* File Attributes:: Attributes of individual files.
|
||
* Making Special Files:: How to create special files.
|
||
* Temporary Files:: Naming and creating temporary files.
|
||
|
||
Accessing Directories
|
||
|
||
* Directory Entries:: Format of one directory entry.
|
||
* Opening a Directory:: How to open a directory stream.
|
||
* Reading/Closing Directory:: How to read directory entries from the stream.
|
||
* Simple Directory Lister:: A very simple directory listing program.
|
||
* Random Access Directory:: Rereading part of the directory
|
||
already read with the same stream.
|
||
* Scanning Directory Content:: Get entries for user selected subset of
|
||
contents in given directory.
|
||
* Simple Directory Lister Mark II:: Revised version of the program.
|
||
|
||
File Attributes
|
||
|
||
* Attribute Meanings:: The names of the file attributes,
|
||
and what their values mean.
|
||
* Reading Attributes:: How to read the attributes of a file.
|
||
* Testing File Type:: Distinguishing ordinary files,
|
||
directories, links...
|
||
* File Owner:: How ownership for new files is determined,
|
||
and how to change it.
|
||
* Permission Bits:: How information about a file’s access
|
||
mode is stored.
|
||
* Access Permission:: How the system decides who can access a file.
|
||
* Setting Permissions:: How permissions for new files are assigned,
|
||
and how to change them.
|
||
* Testing File Access:: How to find out if your process can
|
||
access a file.
|
||
* File Times:: About the time attributes of a file.
|
||
* File Size:: Manually changing the size of a file.
|
||
* Storage Allocation:: Allocate backing storage for files.
|
||
|
||
Pipes and FIFOs
|
||
|
||
* Creating a Pipe:: Making a pipe with the ‘pipe’ function.
|
||
* Pipe to a Subprocess:: Using a pipe to communicate with a
|
||
child process.
|
||
* FIFO Special Files:: Making a FIFO special file.
|
||
* Pipe Atomicity:: When pipe (or FIFO) I/O is atomic.
|
||
|
||
Sockets
|
||
|
||
* Socket Concepts:: Basic concepts you need to know about.
|
||
* Communication Styles::Stream communication, datagrams and other styles.
|
||
* Socket Addresses:: How socket names (“addresses”) work.
|
||
* Interface Naming:: Identifying specific network interfaces.
|
||
* Local Namespace:: Details about the local namespace.
|
||
* Internet Namespace:: Details about the Internet namespace.
|
||
* Misc Namespaces:: Other namespaces not documented fully here.
|
||
* Open/Close Sockets:: Creating sockets and destroying them.
|
||
* Connections:: Operations on sockets with connection state.
|
||
* Datagrams:: Operations on datagram sockets.
|
||
* Inetd:: Inetd is a daemon that starts servers on request.
|
||
The most convenient way to write a server
|
||
is to make it work with Inetd.
|
||
* Socket Options:: Miscellaneous low-level socket options.
|
||
* Networks Database:: Accessing the database of network names.
|
||
|
||
Socket Addresses
|
||
|
||
* Address Formats:: About ‘struct sockaddr’.
|
||
* Setting Address:: Binding an address to a socket.
|
||
* Reading Address:: Reading the address of a socket.
|
||
|
||
Local Namespace
|
||
|
||
* Concepts: Local Namespace Concepts. What you need to understand.
|
||
* Details: Local Namespace Details. Address format, symbolic names, etc.
|
||
* Example: Local Socket Example. Example of creating a socket.
|
||
|
||
Internet Namespace
|
||
|
||
* Internet Address Formats:: How socket addresses are specified in the
|
||
Internet namespace.
|
||
* Host Addresses:: All about host addresses of Internet host.
|
||
* Ports:: Internet port numbers.
|
||
* Services Database:: Ports may have symbolic names.
|
||
* Byte Order:: Different hosts may use different byte
|
||
ordering conventions; you need to
|
||
canonicalize host address and port number.
|
||
* Protocols Database:: Referring to protocols by name.
|
||
* Inet Example:: Putting it all together.
|
||
|
||
Host Addresses
|
||
|
||
* Abstract Host Addresses:: What a host number consists of.
|
||
* Data type: Host Address Data Type. Data type for a host number.
|
||
* Functions: Host Address Functions. Functions to operate on them.
|
||
* Names: Host Names. Translating host names to host numbers.
|
||
|
||
Open/Close Sockets
|
||
|
||
* Creating a Socket:: How to open a socket.
|
||
* Closing a Socket:: How to close a socket.
|
||
* Socket Pairs:: These are created like pipes.
|
||
|
||
Connections
|
||
|
||
* Connecting:: What the client program must do.
|
||
* Listening:: How a server program waits for requests.
|
||
* Accepting Connections:: What the server does when it gets a request.
|
||
* Who is Connected:: Getting the address of the
|
||
other side of a connection.
|
||
* Transferring Data:: How to send and receive data.
|
||
* Byte Stream Example:: An example program: a client for communicating
|
||
over a byte stream socket in the Internet namespace.
|
||
* Server Example:: A corresponding server program.
|
||
* Out-of-Band Data:: This is an advanced feature.
|
||
|
||
Transferring Data
|
||
|
||
* Sending Data:: Sending data with ‘send’.
|
||
* Receiving Data:: Reading data with ‘recv’.
|
||
* Socket Data Options:: Using ‘send’ and ‘recv’.
|
||
|
||
Datagrams
|
||
|
||
* Sending Datagrams:: Sending packets on a datagram socket.
|
||
* Receiving Datagrams:: Receiving packets on a datagram socket.
|
||
* Datagram Example:: An example program: packets sent over a
|
||
datagram socket in the local namespace.
|
||
* Example Receiver:: Another program, that receives those packets.
|
||
|
||
Inetd
|
||
|
||
* Inetd Servers::
|
||
* Configuring Inetd::
|
||
|
||
Socket Options
|
||
|
||
* Socket Option Functions:: The basic functions for setting and getting
|
||
socket options.
|
||
* Socket-Level Options:: Details of the options at the socket level.
|
||
|
||
Low-Level Terminal Interface
|
||
|
||
* Is It a Terminal:: How to determine if a file is a terminal
|
||
device, and what its name is.
|
||
* I/O Queues:: About flow control and typeahead.
|
||
* Canonical or Not:: Two basic styles of input processing.
|
||
* Terminal Modes:: How to examine and modify flags controlling
|
||
details of terminal I/O: echoing,
|
||
signals, editing. Posix.
|
||
* BSD Terminal Modes:: BSD compatible terminal mode setting
|
||
* Line Control:: Sending break sequences, clearing
|
||
terminal buffers ...
|
||
* Noncanon Example:: How to read single characters without echo.
|
||
* getpass:: Prompting the user for a passphrase.
|
||
* Pseudo-Terminals:: How to open a pseudo-terminal.
|
||
|
||
Terminal Modes
|
||
|
||
* Mode Data Types:: The data type ‘struct termios’ and
|
||
related types.
|
||
* Mode Functions:: Functions to read and set the terminal
|
||
attributes.
|
||
* Setting Modes:: The right way to set terminal attributes
|
||
reliably.
|
||
* Input Modes:: Flags controlling low-level input handling.
|
||
* Output Modes:: Flags controlling low-level output handling.
|
||
* Control Modes:: Flags controlling serial port behavior.
|
||
* Local Modes:: Flags controlling high-level input handling.
|
||
* Line Speed:: How to read and set the terminal line speed.
|
||
* Special Characters:: Characters that have special effects,
|
||
and how to change them.
|
||
* Noncanonical Input:: Controlling how long to wait for input.
|
||
|
||
Special Characters
|
||
|
||
* Editing Characters:: Special characters that terminate lines and
|
||
delete text, and other editing functions.
|
||
* Signal Characters:: Special characters that send or raise signals
|
||
to or for certain classes of processes.
|
||
* Start/Stop Characters:: Special characters that suspend or resume
|
||
suspended output.
|
||
* Other Special:: Other special characters for BSD systems:
|
||
they can discard output, and print status.
|
||
|
||
Pseudo-Terminals
|
||
|
||
* Allocation:: Allocating a pseudo terminal.
|
||
* Pseudo-Terminal Pairs:: How to open both sides of a
|
||
pseudo-terminal in a single operation.
|
||
|
||
Syslog
|
||
|
||
* Overview of Syslog:: Overview of a system’s Syslog facility
|
||
* Submitting Syslog Messages:: Functions to submit messages to Syslog
|
||
|
||
Submitting Syslog Messages
|
||
|
||
* openlog:: Open connection to Syslog
|
||
* syslog; vsyslog:: Submit message to Syslog
|
||
* closelog:: Close connection to Syslog
|
||
* setlogmask:: Cause certain messages to be ignored
|
||
* Syslog Example:: Example of all of the above
|
||
|
||
Mathematics
|
||
|
||
* Mathematical Constants:: Precise numeric values for often-used
|
||
constants.
|
||
* Trig Functions:: Sine, cosine, tangent, and friends.
|
||
* Inverse Trig Functions:: Arcsine, arccosine, etc.
|
||
* Exponents and Logarithms:: Also pow and sqrt.
|
||
* Hyperbolic Functions:: sinh, cosh, tanh, etc.
|
||
* Special Functions:: Bessel, gamma, erf.
|
||
* Errors in Math Functions:: Known Maximum Errors in Math Functions.
|
||
* Pseudo-Random Numbers:: Functions for generating pseudo-random
|
||
numbers.
|
||
* FP Function Optimizations:: Fast code or small code.
|
||
|
||
Pseudo-Random Numbers
|
||
|
||
* ISO Random:: ‘rand’ and friends.
|
||
* BSD Random:: ‘random’ and friends.
|
||
* SVID Random:: ‘drand48’ and friends.
|
||
|
||
Arithmetic
|
||
|
||
* Integers:: Basic integer types and concepts
|
||
* Integer Division:: Integer division with guaranteed rounding.
|
||
* Floating Point Numbers:: Basic concepts. IEEE 754.
|
||
* Floating Point Classes:: The five kinds of floating-point number.
|
||
* Floating Point Errors:: When something goes wrong in a calculation.
|
||
* Rounding:: Controlling how results are rounded.
|
||
* Control Functions:: Saving and restoring the FPU’s state.
|
||
* Arithmetic Functions:: Fundamental operations provided by the library.
|
||
* Complex Numbers:: The types. Writing complex constants.
|
||
* Operations on Complex:: Projection, conjugation, decomposition.
|
||
* Parsing of Numbers:: Converting strings to numbers.
|
||
* Printing of Floats:: Converting floating-point numbers to strings.
|
||
* System V Number Conversion:: An archaic way to convert numbers to strings.
|
||
|
||
Floating Point Errors
|
||
|
||
* FP Exceptions:: IEEE 754 math exceptions and how to detect them.
|
||
* Infinity and NaN:: Special values returned by calculations.
|
||
* Status bit operations:: Checking for exceptions after the fact.
|
||
* Math Error Reporting:: How the math functions report errors.
|
||
|
||
Arithmetic Functions
|
||
|
||
* Absolute Value:: Absolute values of integers and floats.
|
||
* Normalization Functions:: Extracting exponents and putting them back.
|
||
* Rounding Functions:: Rounding floats to integers.
|
||
* Remainder Functions:: Remainders on division, precisely defined.
|
||
* FP Bit Twiddling:: Sign bit adjustment. Adding epsilon.
|
||
* FP Comparison Functions:: Comparisons without risk of exceptions.
|
||
* Misc FP Arithmetic:: Max, min, positive difference, multiply-add.
|
||
|
||
Parsing of Numbers
|
||
|
||
* Parsing of Integers:: Functions for conversion of integer values.
|
||
* Parsing of Floats:: Functions for conversion of floating-point
|
||
values.
|
||
|
||
Date and Time
|
||
|
||
* Time Basics:: Concepts and definitions.
|
||
* Elapsed Time:: Data types to represent elapsed times
|
||
* Processor And CPU Time:: Time a program has spent executing.
|
||
* Calendar Time:: Manipulation of “real” dates and times.
|
||
* Setting an Alarm:: Sending a signal after a specified time.
|
||
* Sleeping:: Waiting for a period of time.
|
||
|
||
Processor And CPU Time
|
||
|
||
* CPU Time:: The ‘clock’ function.
|
||
* Processor Time:: The ‘times’ function.
|
||
|
||
Calendar Time
|
||
|
||
* Simple Calendar Time:: Facilities for manipulating calendar time.
|
||
* High-Resolution Calendar:: A time representation with greater precision.
|
||
* Broken-down Time:: Facilities for manipulating local time.
|
||
* High Accuracy Clock:: Maintaining a high accuracy system clock.
|
||
* Formatting Calendar Time:: Converting times to strings.
|
||
* Parsing Date and Time:: Convert textual time and date information back
|
||
into broken-down time values.
|
||
* TZ Variable:: How users specify the time zone.
|
||
* Time Zone Functions:: Functions to examine or specify the time zone.
|
||
* Time Functions Example:: An example program showing use of some of
|
||
the time functions.
|
||
|
||
Parsing Date and Time
|
||
|
||
* Low-Level Time String Parsing:: Interpret string according to given format.
|
||
* General Time String Parsing:: User-friendly function to parse data and
|
||
time strings.
|
||
|
||
Resource Usage And Limitation
|
||
|
||
* Resource Usage:: Measuring various resources used.
|
||
* Limits on Resources:: Specifying limits on resource usage.
|
||
* Priority:: Reading or setting process run priority.
|
||
* Memory Resources:: Querying memory available resources.
|
||
* Processor Resources:: Learn about the processors available.
|
||
|
||
Priority
|
||
|
||
* Absolute Priority:: The first tier of priority. Posix
|
||
* Realtime Scheduling:: Scheduling among the process nobility
|
||
* Basic Scheduling Functions:: Get/set scheduling policy, priority
|
||
* Traditional Scheduling:: Scheduling among the vulgar masses
|
||
* CPU Affinity:: Limiting execution to certain CPUs
|
||
|
||
Traditional Scheduling
|
||
|
||
* Traditional Scheduling Intro::
|
||
* Traditional Scheduling Functions::
|
||
|
||
Memory Resources
|
||
|
||
* Memory Subsystem:: Overview about traditional Unix memory handling.
|
||
* Query Memory Parameters:: How to get information about the memory
|
||
subsystem?
|
||
|
||
Non-Local Exits
|
||
|
||
* Intro: Non-Local Intro. When and how to use these facilities.
|
||
* Details: Non-Local Details. Functions for non-local exits.
|
||
* Non-Local Exits and Signals:: Portability issues.
|
||
* System V contexts:: Complete context control a la System V.
|
||
|
||
Signal Handling
|
||
|
||
* Concepts of Signals:: Introduction to the signal facilities.
|
||
* Standard Signals:: Particular kinds of signals with
|
||
standard names and meanings.
|
||
* Signal Actions:: Specifying what happens when a
|
||
particular signal is delivered.
|
||
* Defining Handlers:: How to write a signal handler function.
|
||
* Interrupted Primitives:: Signal handlers affect use of ‘open’,
|
||
‘read’, ‘write’ and other functions.
|
||
* Generating Signals:: How to send a signal to a process.
|
||
* Blocking Signals:: Making the system hold signals temporarily.
|
||
* Waiting for a Signal:: Suspending your program until a signal
|
||
arrives.
|
||
* Signal Stack:: Using a Separate Signal Stack.
|
||
* BSD Signal Handling:: Additional functions for backward
|
||
compatibility with BSD.
|
||
|
||
Concepts of Signals
|
||
|
||
* Kinds of Signals:: Some examples of what can cause a signal.
|
||
* Signal Generation:: Concepts of why and how signals occur.
|
||
* Delivery of Signal:: Concepts of what a signal does to the
|
||
process.
|
||
|
||
Standard Signals
|
||
|
||
* Program Error Signals:: Used to report serious program errors.
|
||
* Termination Signals:: Used to interrupt and/or terminate the
|
||
program.
|
||
* Alarm Signals:: Used to indicate expiration of timers.
|
||
* Asynchronous I/O Signals:: Used to indicate input is available.
|
||
* Job Control Signals:: Signals used to support job control.
|
||
* Operation Error Signals:: Used to report operational system errors.
|
||
* Miscellaneous Signals:: Miscellaneous Signals.
|
||
* Signal Messages:: Printing a message describing a signal.
|
||
|
||
Signal Actions
|
||
|
||
* Basic Signal Handling:: The simple ‘signal’ function.
|
||
* Advanced Signal Handling:: The more powerful ‘sigaction’ function.
|
||
* Signal and Sigaction:: How those two functions interact.
|
||
* Sigaction Function Example:: An example of using the sigaction function.
|
||
* Flags for Sigaction:: Specifying options for signal handling.
|
||
* Initial Signal Actions:: How programs inherit signal actions.
|
||
|
||
Defining Handlers
|
||
|
||
* Handler Returns:: Handlers that return normally, and what
|
||
this means.
|
||
* Termination in Handler:: How handler functions terminate a program.
|
||
* Longjmp in Handler:: Nonlocal transfer of control out of a
|
||
signal handler.
|
||
* Signals in Handler:: What happens when signals arrive while
|
||
the handler is already occupied.
|
||
* Merged Signals:: When a second signal arrives before the
|
||
first is handled.
|
||
* Nonreentrancy:: Do not call any functions unless you know they
|
||
are reentrant with respect to signals.
|
||
* Atomic Data Access:: A single handler can run in the middle of
|
||
reading or writing a single object.
|
||
|
||
Atomic Data Access
|
||
|
||
* Non-atomic Example:: A program illustrating interrupted access.
|
||
* Types: Atomic Types. Data types that guarantee no interruption.
|
||
* Usage: Atomic Usage. Proving that interruption is harmless.
|
||
|
||
Generating Signals
|
||
|
||
* Signaling Yourself:: A process can send a signal to itself.
|
||
* Signaling Another Process:: Send a signal to another process.
|
||
* Permission for kill:: Permission for using ‘kill’.
|
||
* Kill Example:: Using ‘kill’ for Communication.
|
||
|
||
Blocking Signals
|
||
|
||
* Why Block:: The purpose of blocking signals.
|
||
* Signal Sets:: How to specify which signals to
|
||
block.
|
||
* Process Signal Mask:: Blocking delivery of signals to your
|
||
process during normal execution.
|
||
* Testing for Delivery:: Blocking to Test for Delivery of
|
||
a Signal.
|
||
* Blocking for Handler:: Blocking additional signals while a
|
||
handler is being run.
|
||
* Checking for Pending Signals:: Checking for Pending Signals
|
||
* Remembering a Signal:: How you can get almost the same
|
||
effect as blocking a signal, by
|
||
handling it and setting a flag
|
||
to be tested later.
|
||
|
||
Waiting for a Signal
|
||
|
||
* Using Pause:: The simple way, using ‘pause’.
|
||
* Pause Problems:: Why the simple way is often not very good.
|
||
* Sigsuspend:: Reliably waiting for a specific signal.
|
||
|
||
Program Basics
|
||
|
||
* Program Arguments:: Parsing your program’s command-line arguments
|
||
* Environment Variables:: Less direct parameters affecting your program
|
||
* Auxiliary Vector:: Least direct parameters affecting your program
|
||
* System Calls:: Requesting service from the system
|
||
* Program Termination:: Telling the system you’re done; return status
|
||
|
||
Program Arguments
|
||
|
||
* Argument Syntax:: By convention, options start with a hyphen.
|
||
* Parsing Program Arguments:: Ways to parse program options and arguments.
|
||
|
||
Parsing Program Arguments
|
||
|
||
* Getopt:: Parsing program options using ‘getopt’.
|
||
* Argp:: Parsing program options using ‘argp_parse’.
|
||
* Suboptions:: Some programs need more detailed options.
|
||
* Suboptions Example:: This shows how it could be done for ‘mount’.
|
||
|
||
Environment Variables
|
||
|
||
* Environment Access:: How to get and set the values of
|
||
environment variables.
|
||
* Standard Environment:: These environment variables have
|
||
standard interpretations.
|
||
|
||
Program Termination
|
||
|
||
* Normal Termination:: If a program calls ‘exit’, a
|
||
process terminates normally.
|
||
* Exit Status:: The ‘exit status’ provides information
|
||
about why the process terminated.
|
||
* Cleanups on Exit:: A process can run its own cleanup
|
||
functions upon normal termination.
|
||
* Aborting a Program:: The ‘abort’ function causes
|
||
abnormal program termination.
|
||
* Termination Internals:: What happens when a process terminates.
|
||
|
||
Processes
|
||
|
||
* Running a Command:: The easy way to run another program.
|
||
* Process Creation Concepts:: An overview of the hard way to do it.
|
||
* Process Identification:: How to get the process ID of a process.
|
||
* Creating a Process:: How to fork a child process.
|
||
* Executing a File:: How to make a process execute another program.
|
||
* Process Completion:: How to tell when a child process has completed.
|
||
* Process Completion Status:: How to interpret the status value
|
||
returned from a child process.
|
||
* BSD Wait Functions:: More functions, for backward compatibility.
|
||
* Process Creation Example:: A complete example program.
|
||
|
||
Inter-Process Communication
|
||
|
||
* Semaphores:: Support for creating and managing semaphores
|
||
|
||
Job Control
|
||
|
||
* Concepts of Job Control:: Jobs can be controlled by a shell.
|
||
* Job Control is Optional:: Not all POSIX systems support job control.
|
||
* Controlling Terminal:: How a process gets its controlling terminal.
|
||
* Access to the Terminal:: How processes share the controlling terminal.
|
||
* Orphaned Process Groups:: Jobs left after the user logs out.
|
||
* Implementing a Shell:: What a shell must do to implement job control.
|
||
* Functions for Job Control:: Functions to control process groups.
|
||
|
||
Implementing a Shell
|
||
|
||
* Data Structures:: Introduction to the sample shell.
|
||
* Initializing the Shell:: What the shell must do to take
|
||
responsibility for job control.
|
||
* Launching Jobs:: Creating jobs to execute commands.
|
||
* Foreground and Background:: Putting a job in foreground of background.
|
||
* Stopped and Terminated Jobs:: Reporting job status.
|
||
* Continuing Stopped Jobs:: How to continue a stopped job in
|
||
the foreground or background.
|
||
* Missing Pieces:: Other parts of the shell.
|
||
|
||
Functions for Job Control
|
||
|
||
* Identifying the Terminal:: Determining the controlling terminal’s name.
|
||
* Process Group Functions:: Functions for manipulating process groups.
|
||
* Terminal Access Functions:: Functions for controlling terminal access.
|
||
|
||
Name Service Switch
|
||
|
||
* NSS Basics:: What is this NSS good for.
|
||
* NSS Configuration File:: Configuring NSS.
|
||
* NSS Module Internals:: How does it work internally.
|
||
* Extending NSS:: What to do to add services or databases.
|
||
|
||
NSS Configuration File
|
||
|
||
* Services in the NSS configuration:: Service names in the NSS configuration.
|
||
* Actions in the NSS configuration:: React appropriately to the lookup result.
|
||
* Notes on NSS Configuration File:: Things to take care about while
|
||
configuring NSS.
|
||
|
||
NSS Module Internals
|
||
|
||
* NSS Module Names:: Construction of the interface function of
|
||
the NSS modules.
|
||
* NSS Modules Interface:: Programming interface in the NSS module
|
||
functions.
|
||
|
||
Extending NSS
|
||
|
||
* Adding another Service to NSS:: What is to do to add a new service.
|
||
* NSS Module Function Internals:: Guidelines for writing new NSS
|
||
service functions.
|
||
|
||
Users and Groups
|
||
|
||
* User and Group IDs:: Each user has a unique numeric ID;
|
||
likewise for groups.
|
||
* Process Persona:: The user IDs and group IDs of a process.
|
||
* Why Change Persona:: Why a program might need to change
|
||
its user and/or group IDs.
|
||
* How Change Persona:: Changing the user and group IDs.
|
||
* Reading Persona:: How to examine the user and group IDs.
|
||
|
||
* Setting User ID:: Functions for setting the user ID.
|
||
* Setting Groups:: Functions for setting the group IDs.
|
||
|
||
* Enable/Disable Setuid:: Turning setuid access on and off.
|
||
* Setuid Program Example:: The pertinent parts of one sample program.
|
||
* Tips for Setuid:: How to avoid granting unlimited access.
|
||
|
||
* Who Logged In:: Getting the name of the user who logged in,
|
||
or of the real user ID of the current process.
|
||
|
||
* User Accounting Database:: Keeping information about users and various
|
||
actions in databases.
|
||
|
||
* User Database:: Functions and data structures for
|
||
accessing the user database.
|
||
* Group Database:: Functions and data structures for
|
||
accessing the group database.
|
||
* Database Example:: Example program showing the use of database
|
||
inquiry functions.
|
||
* Netgroup Database:: Functions for accessing the netgroup database.
|
||
|
||
User Accounting Database
|
||
|
||
* Manipulating the Database:: Scanning and modifying the user
|
||
accounting database.
|
||
* XPG Functions:: A standardized way for doing the same thing.
|
||
* Logging In and Out:: Functions from BSD that modify the user
|
||
accounting database.
|
||
|
||
User Database
|
||
|
||
* User Data Structure:: What each user record contains.
|
||
* Lookup User:: How to look for a particular user.
|
||
* Scanning All Users:: Scanning the list of all users, one by one.
|
||
* Writing a User Entry:: How a program can rewrite a user’s record.
|
||
|
||
Group Database
|
||
|
||
* Group Data Structure:: What each group record contains.
|
||
* Lookup Group:: How to look for a particular group.
|
||
* Scanning All Groups:: Scanning the list of all groups.
|
||
|
||
Netgroup Database
|
||
|
||
* Netgroup Data:: Data in the Netgroup database and where
|
||
it comes from.
|
||
* Lookup Netgroup:: How to look for a particular netgroup.
|
||
* Netgroup Membership:: How to test for netgroup membership.
|
||
|
||
System Management
|
||
|
||
* Host Identification:: Determining the name of the machine.
|
||
* Platform Type:: Determining operating system and basic
|
||
machine type
|
||
* Filesystem Handling:: Controlling/querying mounts
|
||
* System Parameters:: Getting and setting various system parameters
|
||
|
||
Filesystem Handling
|
||
|
||
* Mount Information:: What is or could be mounted?
|
||
* Mount-Unmount-Remount:: Controlling what is mounted and how
|
||
|
||
Mount Information
|
||
|
||
* fstab:: The ‘fstab’ file
|
||
* mtab:: The ‘mtab’ file
|
||
* Other Mount Information:: Other (non-libc) sources of mount information
|
||
|
||
System Configuration
|
||
|
||
* General Limits:: Constants and functions that describe
|
||
various process-related limits that have
|
||
one uniform value for any given machine.
|
||
* System Options:: Optional POSIX features.
|
||
* Version Supported:: Version numbers of POSIX.1 and POSIX.2.
|
||
* Sysconf:: Getting specific configuration values
|
||
of general limits and system options.
|
||
* Minimums:: Minimum values for general limits.
|
||
|
||
* Limits for Files:: Size limitations that pertain to individual files.
|
||
These can vary between file systems
|
||
or even from file to file.
|
||
* Options for Files:: Optional features that some files may support.
|
||
* File Minimums:: Minimum values for file limits.
|
||
* Pathconf:: Getting the limit values for a particular file.
|
||
|
||
* Utility Limits:: Capacity limits of some POSIX.2 utility programs.
|
||
* Utility Minimums:: Minimum allowable values of those limits.
|
||
|
||
* String Parameters:: Getting the default search path.
|
||
|
||
Sysconf
|
||
|
||
* Sysconf Definition:: Detailed specifications of ‘sysconf’.
|
||
* Constants for Sysconf:: The list of parameters ‘sysconf’ can read.
|
||
* Examples of Sysconf:: How to use ‘sysconf’ and the parameter
|
||
macros properly together.
|
||
|
||
Cryptographic Functions
|
||
|
||
* Passphrase Storage:: One-way hashing for passphrases.
|
||
* Unpredictable Bytes:: Randomness for cryptographic purposes.
|
||
|
||
Debugging Support
|
||
|
||
* Backtraces:: Obtaining and printing a back trace of the
|
||
current stack.
|
||
|
||
Threads
|
||
|
||
* ISO C Threads:: Threads based on the ISO C specification.
|
||
* POSIX Threads:: Threads based on the POSIX specification.
|
||
|
||
ISO C Threads
|
||
|
||
* ISO C Threads Return Values:: Symbolic constants that represent a
|
||
function’s return value.
|
||
* ISO C Thread Management:: Support for basic threading.
|
||
* Call Once:: Single-call functions and macros.
|
||
* ISO C Mutexes:: A low-level mechanism for mutual exclusion.
|
||
* ISO C Condition Variables:: High-level objects for thread synchronization.
|
||
* ISO C Thread-local Storage:: Functions to support thread-local storage.
|
||
|
||
POSIX Threads
|
||
|
||
* Thread-specific Data:: Support for creating and
|
||
managing thread-specific data
|
||
* Non-POSIX Extensions:: Additional functions to extend
|
||
POSIX Thread functionality
|
||
|
||
Non-POSIX Extensions
|
||
|
||
* Default Thread Attributes:: Setting default attributes for
|
||
threads in a process.
|
||
|
||
Internal Probes
|
||
|
||
* Memory Allocation Probes:: Probes in the memory allocation subsystem
|
||
* Mathematical Function Probes:: Probes in mathematical functions
|
||
* Non-local Goto Probes:: Probes in setjmp and longjmp
|
||
|
||
Tunables
|
||
|
||
* Tunable names:: The structure of a tunable name
|
||
* Memory Allocation Tunables:: Tunables in the memory allocation subsystem
|
||
* Elision Tunables:: Tunables in elision subsystem
|
||
* Hardware Capability Tunables:: Tunables that modify the hardware
|
||
capabilities seen by the GNU C Library
|
||
|
||
Language Features
|
||
|
||
* Consistency Checking:: Using ‘assert’ to abort if
|
||
something “impossible” happens.
|
||
* Variadic Functions:: Defining functions with varying numbers
|
||
of args.
|
||
* Null Pointer Constant:: The macro ‘NULL’.
|
||
* Important Data Types:: Data types for object sizes.
|
||
* Data Type Measurements:: Parameters of data type representations.
|
||
|
||
Variadic Functions
|
||
|
||
* Why Variadic:: Reasons for making functions take
|
||
variable arguments.
|
||
* How Variadic:: How to define and call variadic functions.
|
||
* Variadic Example:: A complete example.
|
||
|
||
How Variadic
|
||
|
||
* Variadic Prototypes:: How to make a prototype for a function
|
||
with variable arguments.
|
||
* Receiving Arguments:: Steps you must follow to access the
|
||
optional argument values.
|
||
* How Many Arguments:: How to decide whether there are more arguments.
|
||
* Calling Variadics:: Things you need to know about calling
|
||
variable arguments functions.
|
||
* Argument Macros:: Detailed specification of the macros
|
||
for accessing variable arguments.
|
||
|
||
Data Type Measurements
|
||
|
||
* Width of Type:: How many bits does an integer type hold?
|
||
* Range of Type:: What are the largest and smallest values
|
||
that an integer type can hold?
|
||
* Floating Type Macros:: Parameters that measure the floating point types.
|
||
* Structure Measurement:: Getting measurements on structure types.
|
||
|
||
Floating Type Macros
|
||
|
||
* Floating Point Concepts:: Definitions of terminology.
|
||
* Floating Point Parameters:: Details of specific macros.
|
||
* IEEE Floating Point:: The measurements for one common
|
||
representation.
|
||
|
||
Installation
|
||
|
||
* Configuring and compiling:: How to compile and test GNU libc.
|
||
* Running make install:: How to install it once you’ve got it
|
||
compiled.
|
||
* Tools for Compilation:: You’ll need these first.
|
||
* Linux:: Specific advice for GNU/Linux systems.
|
||
* Reporting Bugs:: So they’ll get fixed.
|
||
|
||
Maintenance
|
||
|
||
* Source Layout:: How to add new functions or header files
|
||
to the GNU C Library.
|
||
* Porting:: How to port the GNU C Library to
|
||
a new machine or operating system.
|
||
|
||
Source Layout
|
||
|
||
* Platform: Adding Platform-specific. Adding platform-specific
|
||
features.
|
||
|
||
Porting
|
||
|
||
* Hierarchy Conventions:: The layout of the ‘sysdeps’ hierarchy.
|
||
* Porting to Unix:: Porting the library to an average
|
||
Unix-like system.
|
||
|
||
Platform
|
||
|
||
* PowerPC:: Facilities Specific to the PowerPC Architecture
|
||
* RISC-V:: Facilities Specific to the RISC-V Architecture
|
||
|
||
|
||
File: libc.info, Node: Introduction, Next: Error Reporting, Prev: Top, Up: Top
|
||
|
||
1 Introduction
|
||
**************
|
||
|
||
The C language provides no built-in facilities for performing such
|
||
common operations as input/output, memory management, string
|
||
manipulation, and the like. Instead, these facilities are defined in a
|
||
standard “library”, which you compile and link with your programs.
|
||
|
||
The GNU C Library, described in this document, defines all of the
|
||
library functions that are specified by the ISO C standard, as well as
|
||
additional features specific to POSIX and other derivatives of the Unix
|
||
operating system, and extensions specific to GNU systems.
|
||
|
||
The purpose of this manual is to tell you how to use the facilities
|
||
of the GNU C Library. We have mentioned which features belong to which
|
||
standards to help you identify things that are potentially non-portable
|
||
to other systems. But the emphasis in this manual is not on strict
|
||
portability.
|
||
|
||
* Menu:
|
||
|
||
* Getting Started:: What this manual is for and how to use it.
|
||
* Standards and Portability:: Standards and sources upon which the GNU
|
||
C library is based.
|
||
* Using the Library:: Some practical uses for the library.
|
||
* Roadmap to the Manual:: Overview of the remaining chapters in
|
||
this manual.
|
||
|
||
|
||
File: libc.info, Node: Getting Started, Next: Standards and Portability, Up: Introduction
|
||
|
||
1.1 Getting Started
|
||
===================
|
||
|
||
This manual is written with the assumption that you are at least
|
||
somewhat familiar with the C programming language and basic programming
|
||
concepts. Specifically, familiarity with ISO standard C (*note ISO
|
||
C::), rather than “traditional” pre-ISO C dialects, is assumed.
|
||
|
||
The GNU C Library includes several “header files”, each of which
|
||
provides definitions and declarations for a group of related facilities;
|
||
this information is used by the C compiler when processing your program.
|
||
For example, the header file ‘stdio.h’ declares facilities for
|
||
performing input and output, and the header file ‘string.h’ declares
|
||
string processing utilities. The organization of this manual generally
|
||
follows the same division as the header files.
|
||
|
||
If you are reading this manual for the first time, you should read
|
||
all of the introductory material and skim the remaining chapters. There
|
||
are a _lot_ of functions in the GNU C Library and it’s not realistic to
|
||
expect that you will be able to remember exactly _how_ to use each and
|
||
every one of them. It’s more important to become generally familiar
|
||
with the kinds of facilities that the library provides, so that when you
|
||
are writing your programs you can recognize _when_ to make use of
|
||
library functions, and _where_ in this manual you can find more specific
|
||
information about them.
|
||
|
||
|
||
File: libc.info, Node: Standards and Portability, Next: Using the Library, Prev: Getting Started, Up: Introduction
|
||
|
||
1.2 Standards and Portability
|
||
=============================
|
||
|
||
This section discusses the various standards and other sources that the
|
||
GNU C Library is based upon. These sources include the ISO C and POSIX
|
||
standards, and the System V and Berkeley Unix implementations.
|
||
|
||
The primary focus of this manual is to tell you how to make effective
|
||
use of the GNU C Library facilities. But if you are concerned about
|
||
making your programs compatible with these standards, or portable to
|
||
operating systems other than GNU, this can affect how you use the
|
||
library. This section gives you an overview of these standards, so that
|
||
you will know what they are when they are mentioned in other parts of
|
||
the manual.
|
||
|
||
*Note Library Summary::, for an alphabetical list of the functions
|
||
and other symbols provided by the library. This list also states which
|
||
standards each function or symbol comes from.
|
||
|
||
* Menu:
|
||
|
||
* ISO C:: The international standard for the C
|
||
programming language.
|
||
* POSIX:: The ISO/IEC 9945 (aka IEEE 1003) standards
|
||
for operating systems.
|
||
* Berkeley Unix:: BSD and SunOS.
|
||
* SVID:: The System V Interface Description.
|
||
* XPG:: The X/Open Portability Guide.
|
||
|
||
|
||
File: libc.info, Node: ISO C, Next: POSIX, Up: Standards and Portability
|
||
|
||
1.2.1 ISO C
|
||
-----------
|
||
|
||
The GNU C Library is compatible with the C standard adopted by the
|
||
American National Standards Institute (ANSI): ‘American National
|
||
Standard X3.159-1989—“ANSI C”’ and later by the International
|
||
Standardization Organization (ISO): ‘ISO/IEC 9899:1990, “Programming
|
||
languages—C”’. We here refer to the standard as ISO C since this is the
|
||
more general standard in respect of ratification. The header files and
|
||
library facilities that make up the GNU C Library are a superset of
|
||
those specified by the ISO C standard.
|
||
|
||
If you are concerned about strict adherence to the ISO C standard,
|
||
you should use the ‘-ansi’ option when you compile your programs with
|
||
the GNU C compiler. This tells the compiler to define _only_ ISO
|
||
standard features from the library header files, unless you explicitly
|
||
ask for additional features. *Note Feature Test Macros::, for
|
||
information on how to do this.
|
||
|
||
Being able to restrict the library to include only ISO C features is
|
||
important because ISO C puts limitations on what names can be defined by
|
||
the library implementation, and the GNU extensions don’t fit these
|
||
limitations. *Note Reserved Names::, for more information about these
|
||
restrictions.
|
||
|
||
This manual does not attempt to give you complete details on the
|
||
differences between ISO C and older dialects. It gives advice on how to
|
||
write programs to work portably under multiple C dialects, but does not
|
||
aim for completeness.
|
||
|
||
|
||
File: libc.info, Node: POSIX, Next: Berkeley Unix, Prev: ISO C, Up: Standards and Portability
|
||
|
||
1.2.2 POSIX (The Portable Operating System Interface)
|
||
-----------------------------------------------------
|
||
|
||
The GNU C Library is also compatible with the ISO “POSIX” family of
|
||
standards, known more formally as the “Portable Operating System
|
||
Interface for Computer Environments” (ISO/IEC 9945). They were also
|
||
published as ANSI/IEEE Std 1003. POSIX is derived mostly from various
|
||
versions of the Unix operating system.
|
||
|
||
The library facilities specified by the POSIX standards are a
|
||
superset of those required by ISO C; POSIX specifies additional features
|
||
for ISO C functions, as well as specifying new additional functions. In
|
||
general, the additional requirements and functionality defined by the
|
||
POSIX standards are aimed at providing lower-level support for a
|
||
particular kind of operating system environment, rather than general
|
||
programming language support which can run in many diverse operating
|
||
system environments.
|
||
|
||
The GNU C Library implements all of the functions specified in
|
||
‘ISO/IEC 9945-1:1996, the POSIX System Application Program Interface’,
|
||
commonly referred to as POSIX.1. The primary extensions to the ISO C
|
||
facilities specified by this standard include file system interface
|
||
primitives (*note File System Interface::), device-specific terminal
|
||
control functions (*note Low-Level Terminal Interface::), and process
|
||
control functions (*note Processes::).
|
||
|
||
Some facilities from ‘ISO/IEC 9945-2:1993, the POSIX Shell and
|
||
Utilities standard’ (POSIX.2) are also implemented in the GNU C Library.
|
||
These include utilities for dealing with regular expressions and other
|
||
pattern matching facilities (*note Pattern Matching::).
|
||
|
||
* Menu:
|
||
|
||
* POSIX Safety Concepts:: Safety concepts from POSIX.
|
||
* Unsafe Features:: Features that make functions unsafe.
|
||
* Conditionally Safe Features:: Features that make functions unsafe
|
||
in the absence of workarounds.
|
||
* Other Safety Remarks:: Additional safety features and remarks.
|
||
|
||
|
||
File: libc.info, Node: POSIX Safety Concepts, Next: Unsafe Features, Up: POSIX
|
||
|
||
1.2.2.1 POSIX Safety Concepts
|
||
.............................
|
||
|
||
This manual documents various safety properties of GNU C Library
|
||
functions, in lines that follow their prototypes and look like:
|
||
|
||
Preliminary: | MT-Safe | AS-Safe | AC-Safe |
|
||
|
||
The properties are assessed according to the criteria set forth in
|
||
the POSIX standard for such safety contexts as Thread-, Async-Signal-
|
||
and Async-Cancel- -Safety. Intuitive definitions of these properties,
|
||
attempting to capture the meaning of the standard definitions, follow.
|
||
|
||
• ‘MT-Safe’ or Thread-Safe functions are safe to call in the presence
|
||
of other threads. MT, in MT-Safe, stands for Multi Thread.
|
||
|
||
Being MT-Safe does not imply a function is atomic, nor that it uses
|
||
any of the memory synchronization mechanisms POSIX exposes to
|
||
users. It is even possible that calling MT-Safe functions in
|
||
sequence does not yield an MT-Safe combination. For example,
|
||
having a thread call two MT-Safe functions one right after the
|
||
other does not guarantee behavior equivalent to atomic execution of
|
||
a combination of both functions, since concurrent calls in other
|
||
threads may interfere in a destructive way.
|
||
|
||
Whole-program optimizations that could inline functions across
|
||
library interfaces may expose unsafe reordering, and so performing
|
||
inlining across the GNU C Library interface is not recommended.
|
||
The documented MT-Safety status is not guaranteed under
|
||
whole-program optimization. However, functions defined in
|
||
user-visible headers are designed to be safe for inlining.
|
||
|
||
• ‘AS-Safe’ or Async-Signal-Safe functions are safe to call from
|
||
asynchronous signal handlers. AS, in AS-Safe, stands for
|
||
Asynchronous Signal.
|
||
|
||
Many functions that are AS-Safe may set ‘errno’, or modify the
|
||
floating-point environment, because their doing so does not make
|
||
them unsuitable for use in signal handlers. However, programs
|
||
could misbehave should asynchronous signal handlers modify this
|
||
thread-local state, and the signal handling machinery cannot be
|
||
counted on to preserve it. Therefore, signal handlers that call
|
||
functions that may set ‘errno’ or modify the floating-point
|
||
environment _must_ save their original values, and restore them
|
||
before returning.
|
||
|
||
• ‘AC-Safe’ or Async-Cancel-Safe functions are safe to call when
|
||
asynchronous cancellation is enabled. AC in AC-Safe stands for
|
||
Asynchronous Cancellation.
|
||
|
||
The POSIX standard defines only three functions to be AC-Safe,
|
||
namely ‘pthread_cancel’, ‘pthread_setcancelstate’, and
|
||
‘pthread_setcanceltype’. At present the GNU C Library provides no
|
||
guarantees beyond these three functions, but does document which
|
||
functions are presently AC-Safe. This documentation is provided
|
||
for use by the GNU C Library developers.
|
||
|
||
Just like signal handlers, cancellation cleanup routines must
|
||
configure the floating point environment they require. The
|
||
routines cannot assume a floating point environment, particularly
|
||
when asynchronous cancellation is enabled. If the configuration of
|
||
the floating point environment cannot be performed atomically then
|
||
it is also possible that the environment encountered is internally
|
||
inconsistent.
|
||
|
||
• ‘MT-Unsafe’, ‘AS-Unsafe’, ‘AC-Unsafe’ functions are not safe to
|
||
call within the safety contexts described above. Calling them
|
||
within such contexts invokes undefined behavior.
|
||
|
||
Functions not explicitly documented as safe in a safety context
|
||
should be regarded as Unsafe.
|
||
|
||
• ‘Preliminary’ safety properties are documented, indicating these
|
||
properties may _not_ be counted on in future releases of the GNU C
|
||
Library.
|
||
|
||
Such preliminary properties are the result of an assessment of the
|
||
properties of our current implementation, rather than of what is
|
||
mandated and permitted by current and future standards.
|
||
|
||
Although we strive to abide by the standards, in some cases our
|
||
implementation is safe even when the standard does not demand
|
||
safety, and in other cases our implementation does not meet the
|
||
standard safety requirements. The latter are most likely bugs; the
|
||
former, when marked as ‘Preliminary’, should not be counted on:
|
||
future standards may require changes that are not compatible with
|
||
the additional safety properties afforded by the current
|
||
implementation.
|
||
|
||
Furthermore, the POSIX standard does not offer a detailed
|
||
definition of safety. We assume that, by “safe to call”, POSIX
|
||
means that, as long as the program does not invoke undefined
|
||
behavior, the “safe to call” function behaves as specified, and
|
||
does not cause other functions to deviate from their specified
|
||
behavior. We have chosen to use its loose definitions of safety,
|
||
not because they are the best definitions to use, but because
|
||
choosing them harmonizes this manual with POSIX.
|
||
|
||
Please keep in mind that these are preliminary definitions and
|
||
annotations, and certain aspects of the definitions are still under
|
||
discussion and might be subject to clarification or change.
|
||
|
||
Over time, we envision evolving the preliminary safety notes into
|
||
stable commitments, as stable as those of our interfaces. As we
|
||
do, we will remove the ‘Preliminary’ keyword from safety notes. As
|
||
long as the keyword remains, however, they are not to be regarded
|
||
as a promise of future behavior.
|
||
|
||
Other keywords that appear in safety notes are defined in subsequent
|
||
sections.
|
||
|
||
|
||
File: libc.info, Node: Unsafe Features, Next: Conditionally Safe Features, Prev: POSIX Safety Concepts, Up: POSIX
|
||
|
||
1.2.2.2 Unsafe Features
|
||
.......................
|
||
|
||
Functions that are unsafe to call in certain contexts are annotated with
|
||
keywords that document their features that make them unsafe to call.
|
||
AS-Unsafe features in this section indicate the functions are never safe
|
||
to call when asynchronous signals are enabled. AC-Unsafe features
|
||
indicate they are never safe to call when asynchronous cancellation is
|
||
enabled. There are no MT-Unsafe marks in this section.
|
||
|
||
• ‘lock’
|
||
|
||
Functions marked with ‘lock’ as an AS-Unsafe feature may be
|
||
interrupted by a signal while holding a non-recursive lock. If the
|
||
signal handler calls another such function that takes the same
|
||
lock, the result is a deadlock.
|
||
|
||
Functions annotated with ‘lock’ as an AC-Unsafe feature may, if
|
||
cancelled asynchronously, fail to release a lock that would have
|
||
been released if their execution had not been interrupted by
|
||
asynchronous thread cancellation. Once a lock is left taken,
|
||
attempts to take that lock will block indefinitely.
|
||
|
||
• ‘corrupt’
|
||
|
||
Functions marked with ‘corrupt’ as an AS-Unsafe feature may corrupt
|
||
data structures and misbehave when they interrupt, or are
|
||
interrupted by, another such function. Unlike functions marked
|
||
with ‘lock’, these take recursive locks to avoid MT-Safety
|
||
problems, but this is not enough to stop a signal handler from
|
||
observing a partially-updated data structure. Further corruption
|
||
may arise from the interrupted function’s failure to notice updates
|
||
made by signal handlers.
|
||
|
||
Functions marked with ‘corrupt’ as an AC-Unsafe feature may leave
|
||
data structures in a corrupt, partially updated state. Subsequent
|
||
uses of the data structure may misbehave.
|
||
|
||
• ‘heap’
|
||
|
||
Functions marked with ‘heap’ may call heap memory management
|
||
functions from the ‘malloc’/‘free’ family of functions and are only
|
||
as safe as those functions. This note is thus equivalent to:
|
||
|
||
| AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
|
||
• ‘dlopen’
|
||
|
||
Functions marked with ‘dlopen’ use the dynamic loader to load
|
||
shared libraries into the current execution image. This involves
|
||
opening files, mapping them into memory, allocating additional
|
||
memory, resolving symbols, applying relocations and more, all of
|
||
this while holding internal dynamic loader locks.
|
||
|
||
The locks are enough for these functions to be AS- and AC-Unsafe,
|
||
but other issues may arise. At present this is a placeholder for
|
||
all potential safety issues raised by ‘dlopen’.
|
||
|
||
• ‘plugin’
|
||
|
||
Functions annotated with ‘plugin’ may run code from plugins that
|
||
may be external to the GNU C Library. Such plugin functions are
|
||
assumed to be MT-Safe, AS-Unsafe and AC-Unsafe. Examples of such
|
||
plugins are stack unwinding libraries, name service switch (NSS)
|
||
and character set conversion (iconv) back-ends.
|
||
|
||
Although the plugins mentioned as examples are all brought in by
|
||
means of dlopen, the ‘plugin’ keyword does not imply any direct
|
||
involvement of the dynamic loader or the ‘libdl’ interfaces, those
|
||
are covered by ‘dlopen’. For example, if one function loads a
|
||
module and finds the addresses of some of its functions, while
|
||
another just calls those already-resolved functions, the former
|
||
will be marked with ‘dlopen’, whereas the latter will get the
|
||
‘plugin’. When a single function takes all of these actions, then
|
||
it gets both marks.
|
||
|
||
• ‘i18n’
|
||
|
||
Functions marked with ‘i18n’ may call internationalization
|
||
functions of the ‘gettext’ family and will be only as safe as those
|
||
functions. This note is thus equivalent to:
|
||
|
||
| MT-Safe env | AS-Unsafe corrupt heap dlopen | AC-Unsafe corrupt |
|
||
|
||
• ‘timer’
|
||
|
||
Functions marked with ‘timer’ use the ‘alarm’ function or similar
|
||
to set a time-out for a system call or a long-running operation.
|
||
In a multi-threaded program, there is a risk that the time-out
|
||
signal will be delivered to a different thread, thus failing to
|
||
interrupt the intended thread. Besides being MT-Unsafe, such
|
||
functions are always AS-Unsafe, because calling them in signal
|
||
handlers may interfere with timers set in the interrupted code, and
|
||
AC-Unsafe, because there is no safe way to guarantee an earlier
|
||
timer will be reset in case of asynchronous cancellation.
|
||
|
||
|
||
File: libc.info, Node: Conditionally Safe Features, Next: Other Safety Remarks, Prev: Unsafe Features, Up: POSIX
|
||
|
||
1.2.2.3 Conditionally Safe Features
|
||
...................................
|
||
|
||
For some features that make functions unsafe to call in certain
|
||
contexts, there are known ways to avoid the safety problem other than
|
||
refraining from calling the function altogether. The keywords that
|
||
follow refer to such features, and each of their definitions indicate
|
||
how the whole program needs to be constrained in order to remove the
|
||
safety problem indicated by the keyword. Only when all the reasons that
|
||
make a function unsafe are observed and addressed, by applying the
|
||
documented constraints, does the function become safe to call in a
|
||
context.
|
||
|
||
• ‘init’
|
||
|
||
Functions marked with ‘init’ as an MT-Unsafe feature perform
|
||
MT-Unsafe initialization when they are first called.
|
||
|
||
Calling such a function at least once in single-threaded mode
|
||
removes this specific cause for the function to be regarded as
|
||
MT-Unsafe. If no other cause for that remains, the function can
|
||
then be safely called after other threads are started.
|
||
|
||
Functions marked with ‘init’ as an AS- or AC-Unsafe feature use the
|
||
internal ‘libc_once’ machinery or similar to initialize internal
|
||
data structures.
|
||
|
||
If a signal handler interrupts such an initializer, and calls any
|
||
function that also performs ‘libc_once’ initialization, it will
|
||
deadlock if the thread library has been loaded.
|
||
|
||
Furthermore, if an initializer is partially complete before it is
|
||
canceled or interrupted by a signal whose handler requires the same
|
||
initialization, some or all of the initialization may be performed
|
||
more than once, leaking resources or even resulting in corrupt
|
||
internal data.
|
||
|
||
Applications that need to call functions marked with ‘init’ as an
|
||
AS- or AC-Unsafe feature should ensure the initialization is
|
||
performed before configuring signal handlers or enabling
|
||
cancellation, so that the AS- and AC-Safety issues related with
|
||
‘libc_once’ do not arise.
|
||
|
||
• ‘race’
|
||
|
||
Functions annotated with ‘race’ as an MT-Safety issue operate on
|
||
objects in ways that may cause data races or similar forms of
|
||
destructive interference out of concurrent execution. In some
|
||
cases, the objects are passed to the functions by users; in others,
|
||
they are used by the functions to return values to users; in
|
||
others, they are not even exposed to users.
|
||
|
||
We consider access to objects passed as (indirect) arguments to
|
||
functions to be data race free. The assurance of data race free
|
||
objects is the caller’s responsibility. We will not mark a
|
||
function as MT-Unsafe or AS-Unsafe if it misbehaves when users fail
|
||
to take the measures required by POSIX to avoid data races when
|
||
dealing with such objects. As a general rule, if a function is
|
||
documented as reading from an object passed (by reference) to it,
|
||
or modifying it, users ought to use memory synchronization
|
||
primitives to avoid data races just as they would should they
|
||
perform the accesses themselves rather than by calling the library
|
||
function. ‘FILE’ streams are the exception to the general rule, in
|
||
that POSIX mandates the library to guard against data races in many
|
||
functions that manipulate objects of this specific opaque type. We
|
||
regard this as a convenience provided to users, rather than as a
|
||
general requirement whose expectations should extend to other
|
||
types.
|
||
|
||
In order to remind users that guarding certain arguments is their
|
||
responsibility, we will annotate functions that take objects of
|
||
certain types as arguments. We draw the line for objects passed by
|
||
users as follows: objects whose types are exposed to users, and
|
||
that users are expected to access directly, such as memory buffers,
|
||
strings, and various user-visible ‘struct’ types, do _not_ give
|
||
reason for functions to be annotated with ‘race’. It would be
|
||
noisy and redundant with the general requirement, and not many
|
||
would be surprised by the library’s lack of internal guards when
|
||
accessing objects that can be accessed directly by users.
|
||
|
||
As for objects that are opaque or opaque-like, in that they are to
|
||
be manipulated only by passing them to library functions (e.g.,
|
||
‘FILE’, ‘DIR’, ‘obstack’, ‘iconv_t’), there might be additional
|
||
expectations as to internal coordination of access by the library.
|
||
We will annotate, with ‘race’ followed by a colon and the argument
|
||
name, functions that take such objects but that do not take care of
|
||
synchronizing access to them by default. For example, ‘FILE’
|
||
stream ‘unlocked’ functions will be annotated, but those that
|
||
perform implicit locking on ‘FILE’ streams by default will not,
|
||
even though the implicit locking may be disabled on a per-stream
|
||
basis.
|
||
|
||
In either case, we will not regard as MT-Unsafe functions that may
|
||
access user-supplied objects in unsafe ways should users fail to
|
||
ensure the accesses are well defined. The notion prevails that
|
||
users are expected to safeguard against data races any
|
||
user-supplied objects that the library accesses on their behalf.
|
||
|
||
This user responsibility does not apply, however, to objects
|
||
controlled by the library itself, such as internal objects and
|
||
static buffers used to return values from certain calls. When the
|
||
library doesn’t guard them against concurrent uses, these cases are
|
||
regarded as MT-Unsafe and AS-Unsafe (although the ‘race’ mark under
|
||
AS-Unsafe will be omitted as redundant with the one under
|
||
MT-Unsafe). As in the case of user-exposed objects, the mark may
|
||
be followed by a colon and an identifier. The identifier groups
|
||
all functions that operate on a certain unguarded object; users may
|
||
avoid the MT-Safety issues related with unguarded concurrent access
|
||
to such internal objects by creating a non-recursive mutex related
|
||
with the identifier, and always holding the mutex when calling any
|
||
function marked as racy on that identifier, as they would have to
|
||
should the identifier be an object under user control. The
|
||
non-recursive mutex avoids the MT-Safety issue, but it trades one
|
||
AS-Safety issue for another, so use in asynchronous signals remains
|
||
undefined.
|
||
|
||
When the identifier relates to a static buffer used to hold return
|
||
values, the mutex must be held for as long as the buffer remains in
|
||
use by the caller. Many functions that return pointers to static
|
||
buffers offer reentrant variants that store return values in
|
||
caller-supplied buffers instead. In some cases, such as ‘tmpname’,
|
||
the variant is chosen not by calling an alternate entry point, but
|
||
by passing a non-‘NULL’ pointer to the buffer in which the returned
|
||
values are to be stored. These variants are generally preferable
|
||
in multi-threaded programs, although some of them are not MT-Safe
|
||
because of other internal buffers, also documented with ‘race’
|
||
notes.
|
||
|
||
• ‘const’
|
||
|
||
Functions marked with ‘const’ as an MT-Safety issue non-atomically
|
||
modify internal objects that are better regarded as constant,
|
||
because a substantial portion of the GNU C Library accesses them
|
||
without synchronization. Unlike ‘race’, that causes both readers
|
||
and writers of internal objects to be regarded as MT-Unsafe and
|
||
AS-Unsafe, this mark is applied to writers only. Writers remain
|
||
equally MT- and AS-Unsafe to call, but the then-mandatory constness
|
||
of objects they modify enables readers to be regarded as MT-Safe
|
||
and AS-Safe (as long as no other reasons for them to be unsafe
|
||
remain), since the lack of synchronization is not a problem when
|
||
the objects are effectively constant.
|
||
|
||
The identifier that follows the ‘const’ mark will appear by itself
|
||
as a safety note in readers. Programs that wish to work around
|
||
this safety issue, so as to call writers, may use a non-recursve
|
||
‘rwlock’ associated with the identifier, and guard _all_ calls to
|
||
functions marked with ‘const’ followed by the identifier with a
|
||
write lock, and _all_ calls to functions marked with the identifier
|
||
by itself with a read lock. The non-recursive locking removes the
|
||
MT-Safety problem, but it trades one AS-Safety problem for another,
|
||
so use in asynchronous signals remains undefined.
|
||
|
||
• ‘sig’
|
||
|
||
Functions marked with ‘sig’ as a MT-Safety issue (that implies an
|
||
identical AS-Safety issue, omitted for brevity) may temporarily
|
||
install a signal handler for internal purposes, which may interfere
|
||
with other uses of the signal, identified after a colon.
|
||
|
||
This safety problem can be worked around by ensuring that no other
|
||
uses of the signal will take place for the duration of the call.
|
||
Holding a non-recursive mutex while calling all functions that use
|
||
the same temporary signal; blocking that signal before the call and
|
||
resetting its handler afterwards is recommended.
|
||
|
||
There is no safe way to guarantee the original signal handler is
|
||
restored in case of asynchronous cancellation, therefore so-marked
|
||
functions are also AC-Unsafe.
|
||
|
||
Besides the measures recommended to work around the MT- and
|
||
AS-Safety problem, in order to avert the cancellation problem,
|
||
disabling asynchronous cancellation _and_ installing a cleanup
|
||
handler to restore the signal to the desired state and to release
|
||
the mutex are recommended.
|
||
|
||
• ‘term’
|
||
|
||
Functions marked with ‘term’ as an MT-Safety issue may change the
|
||
terminal settings in the recommended way, namely: call ‘tcgetattr’,
|
||
modify some flags, and then call ‘tcsetattr’; this creates a window
|
||
in which changes made by other threads are lost. Thus, functions
|
||
marked with ‘term’ are MT-Unsafe. The same window enables changes
|
||
made by asynchronous signals to be lost. These functions are also
|
||
AS-Unsafe, but the corresponding mark is omitted as redundant.
|
||
|
||
It is thus advisable for applications using the terminal to avoid
|
||
concurrent and reentrant interactions with it, by not using it in
|
||
signal handlers or blocking signals that might use it, and holding
|
||
a lock while calling these functions and interacting with the
|
||
terminal. This lock should also be used for mutual exclusion with
|
||
functions marked with ‘race:tcattr(fd)’, where FD is a file
|
||
descriptor for the controlling terminal. The caller may use a
|
||
single mutex for simplicity, or use one mutex per terminal, even if
|
||
referenced by different file descriptors.
|
||
|
||
Functions marked with ‘term’ as an AC-Safety issue are supposed to
|
||
restore terminal settings to their original state, after
|
||
temporarily changing them, but they may fail to do so if cancelled.
|
||
|
||
Besides the measures recommended to work around the MT- and
|
||
AS-Safety problem, in order to avert the cancellation problem,
|
||
disabling asynchronous cancellation _and_ installing a cleanup
|
||
handler to restore the terminal settings to the original state and
|
||
to release the mutex are recommended.
|
||
|
||
|
||
File: libc.info, Node: Other Safety Remarks, Prev: Conditionally Safe Features, Up: POSIX
|
||
|
||
1.2.2.4 Other Safety Remarks
|
||
............................
|
||
|
||
Additional keywords may be attached to functions, indicating features
|
||
that do not make a function unsafe to call, but that may need to be
|
||
taken into account in certain classes of programs:
|
||
|
||
• ‘locale’
|
||
|
||
Functions annotated with ‘locale’ as an MT-Safety issue read from
|
||
the locale object without any form of synchronization. Functions
|
||
annotated with ‘locale’ called concurrently with locale changes may
|
||
behave in ways that do not correspond to any of the locales active
|
||
during their execution, but an unpredictable mix thereof.
|
||
|
||
We do not mark these functions as MT- or AS-Unsafe, however,
|
||
because functions that modify the locale object are marked with
|
||
‘const:locale’ and regarded as unsafe. Being unsafe, the latter
|
||
are not to be called when multiple threads are running or
|
||
asynchronous signals are enabled, and so the locale can be
|
||
considered effectively constant in these contexts, which makes the
|
||
former safe.
|
||
|
||
• ‘env’
|
||
|
||
Functions marked with ‘env’ as an MT-Safety issue access the
|
||
environment with ‘getenv’ or similar, without any guards to ensure
|
||
safety in the presence of concurrent modifications.
|
||
|
||
We do not mark these functions as MT- or AS-Unsafe, however,
|
||
because functions that modify the environment are all marked with
|
||
‘const:env’ and regarded as unsafe. Being unsafe, the latter are
|
||
not to be called when multiple threads are running or asynchronous
|
||
signals are enabled, and so the environment can be considered
|
||
effectively constant in these contexts, which makes the former
|
||
safe.
|
||
|
||
• ‘hostid’
|
||
|
||
The function marked with ‘hostid’ as an MT-Safety issue reads from
|
||
the system-wide data structures that hold the “host ID” of the
|
||
machine. These data structures cannot generally be modified
|
||
atomically. Since it is expected that the “host ID” will not
|
||
normally change, the function that reads from it (‘gethostid’) is
|
||
regarded as safe, whereas the function that modifies it
|
||
(‘sethostid’) is marked with ‘const:hostid’, indicating it may
|
||
require special care if it is to be called. In this specific case,
|
||
the special care amounts to system-wide (not merely intra-process)
|
||
coordination.
|
||
|
||
• ‘sigintr’
|
||
|
||
Functions marked with ‘sigintr’ as an MT-Safety issue access the
|
||
‘_sigintr’ internal data structure without any guards to ensure
|
||
safety in the presence of concurrent modifications.
|
||
|
||
We do not mark these functions as MT- or AS-Unsafe, however,
|
||
because functions that modify the this data structure are all
|
||
marked with ‘const:sigintr’ and regarded as unsafe. Being unsafe,
|
||
the latter are not to be called when multiple threads are running
|
||
or asynchronous signals are enabled, and so the data structure can
|
||
be considered effectively constant in these contexts, which makes
|
||
the former safe.
|
||
|
||
• ‘fd’
|
||
|
||
Functions annotated with ‘fd’ as an AC-Safety issue may leak file
|
||
descriptors if asynchronous thread cancellation interrupts their
|
||
execution.
|
||
|
||
Functions that allocate or deallocate file descriptors will
|
||
generally be marked as such. Even if they attempted to protect the
|
||
file descriptor allocation and deallocation with cleanup regions,
|
||
allocating a new descriptor and storing its number where the
|
||
cleanup region could release it cannot be performed as a single
|
||
atomic operation. Similarly, releasing the descriptor and taking
|
||
it out of the data structure normally responsible for releasing it
|
||
cannot be performed atomically. There will always be a window in
|
||
which the descriptor cannot be released because it was not stored
|
||
in the cleanup handler argument yet, or it was already taken out
|
||
before releasing it. It cannot be taken out after release: an open
|
||
descriptor could mean either that the descriptor still has to be
|
||
closed, or that it already did so but the descriptor was
|
||
reallocated by another thread or signal handler.
|
||
|
||
Such leaks could be internally avoided, with some performance
|
||
penalty, by temporarily disabling asynchronous thread cancellation.
|
||
However, since callers of allocation or deallocation functions
|
||
would have to do this themselves, to avoid the same sort of leak in
|
||
their own layer, it makes more sense for the library to assume they
|
||
are taking care of it than to impose a performance penalty that is
|
||
redundant when the problem is solved in upper layers, and
|
||
insufficient when it is not.
|
||
|
||
This remark by itself does not cause a function to be regarded as
|
||
AC-Unsafe. However, cumulative effects of such leaks may pose a
|
||
problem for some programs. If this is the case, suspending
|
||
asynchronous cancellation for the duration of calls to such
|
||
functions is recommended.
|
||
|
||
• ‘mem’
|
||
|
||
Functions annotated with ‘mem’ as an AC-Safety issue may leak
|
||
memory if asynchronous thread cancellation interrupts their
|
||
execution.
|
||
|
||
The problem is similar to that of file descriptors: there is no
|
||
atomic interface to allocate memory and store its address in the
|
||
argument to a cleanup handler, or to release it and remove its
|
||
address from that argument, without at least temporarily disabling
|
||
asynchronous cancellation, which these functions do not do.
|
||
|
||
This remark does not by itself cause a function to be regarded as
|
||
generally AC-Unsafe. However, cumulative effects of such leaks may
|
||
be severe enough for some programs that disabling asynchronous
|
||
cancellation for the duration of calls to such functions may be
|
||
required.
|
||
|
||
• ‘cwd’
|
||
|
||
Functions marked with ‘cwd’ as an MT-Safety issue may temporarily
|
||
change the current working directory during their execution, which
|
||
may cause relative pathnames to be resolved in unexpected ways in
|
||
other threads or within asynchronous signal or cancellation
|
||
handlers.
|
||
|
||
This is not enough of a reason to mark so-marked functions as MT-
|
||
or AS-Unsafe, but when this behavior is optional (e.g., ‘nftw’ with
|
||
‘FTW_CHDIR’), avoiding the option may be a good alternative to
|
||
using full pathnames or file descriptor-relative (e.g. ‘openat’)
|
||
system calls.
|
||
|
||
• ‘!posix’
|
||
|
||
This remark, as an MT-, AS- or AC-Safety note to a function,
|
||
indicates the safety status of the function is known to differ from
|
||
the specified status in the POSIX standard. For example, POSIX
|
||
does not require a function to be Safe, but our implementation is,
|
||
or vice-versa.
|
||
|
||
For the time being, the absence of this remark does not imply the
|
||
safety properties we documented are identical to those mandated by
|
||
POSIX for the corresponding functions.
|
||
|
||
• ‘:identifier’
|
||
|
||
Annotations may sometimes be followed by identifiers, intended to
|
||
group several functions that e.g. access the data structures in an
|
||
unsafe way, as in ‘race’ and ‘const’, or to provide more specific
|
||
information, such as naming a signal in a function marked with
|
||
‘sig’. It is envisioned that it may be applied to ‘lock’ and
|
||
‘corrupt’ as well in the future.
|
||
|
||
In most cases, the identifier will name a set of functions, but it
|
||
may name global objects or function arguments, or identifiable
|
||
properties or logical components associated with them, with a
|
||
notation such as e.g. ‘:buf(arg)’ to denote a buffer associated
|
||
with the argument ARG, or ‘:tcattr(fd)’ to denote the terminal
|
||
attributes of a file descriptor FD.
|
||
|
||
The most common use for identifiers is to provide logical groups of
|
||
functions and arguments that need to be protected by the same
|
||
synchronization primitive in order to ensure safe operation in a
|
||
given context.
|
||
|
||
• ‘/condition’
|
||
|
||
Some safety annotations may be conditional, in that they only apply
|
||
if a boolean expression involving arguments, global variables or
|
||
even the underlying kernel evaluates to true. Such conditions as
|
||
‘/hurd’ or ‘/!linux!bsd’ indicate the preceding marker only applies
|
||
when the underlying kernel is the HURD, or when it is neither Linux
|
||
nor a BSD kernel, respectively. ‘/!ps’ and ‘/one_per_line’
|
||
indicate the preceding marker only applies when argument PS is
|
||
NULL, or global variable ONE_PER_LINE is nonzero.
|
||
|
||
When all marks that render a function unsafe are adorned with such
|
||
conditions, and none of the named conditions hold, then the
|
||
function can be regarded as safe.
|
||
|
||
|
||
File: libc.info, Node: Berkeley Unix, Next: SVID, Prev: POSIX, Up: Standards and Portability
|
||
|
||
1.2.3 Berkeley Unix
|
||
-------------------
|
||
|
||
The GNU C Library defines facilities from some versions of Unix which
|
||
are not formally standardized, specifically from the 4.2 BSD, 4.3 BSD,
|
||
and 4.4 BSD Unix systems (also known as “Berkeley Unix”) and from
|
||
“SunOS” (a popular 4.2 BSD derivative that includes some Unix System V
|
||
functionality). These systems support most of the ISO C and POSIX
|
||
facilities, and 4.4 BSD and newer releases of SunOS in fact support them
|
||
all.
|
||
|
||
The BSD facilities include symbolic links (*note Symbolic Links::),
|
||
the ‘select’ function (*note Waiting for I/O::), the BSD signal
|
||
functions (*note BSD Signal Handling::), and sockets (*note Sockets::).
|
||
|
||
|
||
File: libc.info, Node: SVID, Next: XPG, Prev: Berkeley Unix, Up: Standards and Portability
|
||
|
||
1.2.4 SVID (The System V Interface Description)
|
||
-----------------------------------------------
|
||
|
||
The “System V Interface Description” (SVID) is a document describing the
|
||
AT&T Unix System V operating system. It is to some extent a superset of
|
||
the POSIX standard (*note POSIX::).
|
||
|
||
The GNU C Library defines most of the facilities required by the SVID
|
||
that are not also required by the ISO C or POSIX standards, for
|
||
compatibility with System V Unix and other Unix systems (such as SunOS)
|
||
which include these facilities. However, many of the more obscure and
|
||
less generally useful facilities required by the SVID are not included.
|
||
(In fact, Unix System V itself does not provide them all.)
|
||
|
||
The supported facilities from System V include the methods for
|
||
inter-process communication and shared memory, the ‘hsearch’ and
|
||
‘drand48’ families of functions, ‘fmtmsg’ and several of the
|
||
mathematical functions.
|
||
|
||
|
||
File: libc.info, Node: XPG, Prev: SVID, Up: Standards and Portability
|
||
|
||
1.2.5 XPG (The X/Open Portability Guide)
|
||
----------------------------------------
|
||
|
||
The X/Open Portability Guide, published by the X/Open Company, Ltd., is
|
||
a more general standard than POSIX. X/Open owns the Unix copyright and
|
||
the XPG specifies the requirements for systems which are intended to be
|
||
a Unix system.
|
||
|
||
The GNU C Library complies to the X/Open Portability Guide, Issue
|
||
4.2, with all extensions common to XSI (X/Open System Interface)
|
||
compliant systems and also all X/Open UNIX extensions.
|
||
|
||
The additions on top of POSIX are mainly derived from functionality
|
||
available in System V and BSD systems. Some of the really bad mistakes
|
||
in System V systems were corrected, though. Since fulfilling the XPG
|
||
standard with the Unix extensions is a precondition for getting the Unix
|
||
brand chances are good that the functionality is available on commercial
|
||
systems.
|
||
|
||
|
||
File: libc.info, Node: Using the Library, Next: Roadmap to the Manual, Prev: Standards and Portability, Up: Introduction
|
||
|
||
1.3 Using the Library
|
||
=====================
|
||
|
||
This section describes some of the practical issues involved in using
|
||
the GNU C Library.
|
||
|
||
* Menu:
|
||
|
||
* Header Files:: How to include the header files in your
|
||
programs.
|
||
* Macro Definitions:: Some functions in the library may really
|
||
be implemented as macros.
|
||
* Reserved Names:: The C standard reserves some names for
|
||
the library, and some for users.
|
||
* Feature Test Macros:: How to control what names are defined.
|
||
|
||
|
||
File: libc.info, Node: Header Files, Next: Macro Definitions, Up: Using the Library
|
||
|
||
1.3.1 Header Files
|
||
------------------
|
||
|
||
Libraries for use by C programs really consist of two parts: “header
|
||
files” that define types and macros and declare variables and functions;
|
||
and the actual library or “archive” that contains the definitions of the
|
||
variables and functions.
|
||
|
||
(Recall that in C, a “declaration” merely provides information that a
|
||
function or variable exists and gives its type. For a function
|
||
declaration, information about the types of its arguments might be
|
||
provided as well. The purpose of declarations is to allow the compiler
|
||
to correctly process references to the declared variables and functions.
|
||
A “definition”, on the other hand, actually allocates storage for a
|
||
variable or says what a function does.)
|
||
|
||
In order to use the facilities in the GNU C Library, you should be
|
||
sure that your program source files include the appropriate header
|
||
files. This is so that the compiler has declarations of these
|
||
facilities available and can correctly process references to them. Once
|
||
your program has been compiled, the linker resolves these references to
|
||
the actual definitions provided in the archive file.
|
||
|
||
Header files are included into a program source file by the
|
||
‘#include’ preprocessor directive. The C language supports two forms of
|
||
this directive; the first,
|
||
|
||
#include "HEADER"
|
||
|
||
is typically used to include a header file HEADER that you write
|
||
yourself; this would contain definitions and declarations describing the
|
||
interfaces between the different parts of your particular application.
|
||
By contrast,
|
||
|
||
#include <file.h>
|
||
|
||
is typically used to include a header file ‘file.h’ that contains
|
||
definitions and declarations for a standard library. This file would
|
||
normally be installed in a standard place by your system administrator.
|
||
You should use this second form for the C library header files.
|
||
|
||
Typically, ‘#include’ directives are placed at the top of the C
|
||
source file, before any other code. If you begin your source files with
|
||
some comments explaining what the code in the file does (a good idea),
|
||
put the ‘#include’ directives immediately afterwards, following the
|
||
feature test macro definition (*note Feature Test Macros::).
|
||
|
||
For more information about the use of header files and ‘#include’
|
||
directives, *note (cpp.info)Header Files::.
|
||
|
||
The GNU C Library provides several header files, each of which
|
||
contains the type and macro definitions and variable and function
|
||
declarations for a group of related facilities. This means that your
|
||
programs may need to include several header files, depending on exactly
|
||
which facilities you are using.
|
||
|
||
Some library header files include other library header files
|
||
automatically. However, as a matter of programming style, you should
|
||
not rely on this; it is better to explicitly include all the header
|
||
files required for the library facilities you are using. The GNU C
|
||
Library header files have been written in such a way that it doesn’t
|
||
matter if a header file is accidentally included more than once;
|
||
including a header file a second time has no effect. Likewise, if your
|
||
program needs to include multiple header files, the order in which they
|
||
are included doesn’t matter.
|
||
|
||
*Compatibility Note:* Inclusion of standard header files in any order
|
||
and any number of times works in any ISO C implementation. However,
|
||
this has traditionally not been the case in many older C
|
||
implementations.
|
||
|
||
Strictly speaking, you don’t _have to_ include a header file to use a
|
||
function it declares; you could declare the function explicitly
|
||
yourself, according to the specifications in this manual. But it is
|
||
usually better to include the header file because it may define types
|
||
and macros that are not otherwise available and because it may define
|
||
more efficient macro replacements for some functions. It is also a sure
|
||
way to have the correct declaration.
|
||
|
||
|
||
File: libc.info, Node: Macro Definitions, Next: Reserved Names, Prev: Header Files, Up: Using the Library
|
||
|
||
1.3.2 Macro Definitions of Functions
|
||
------------------------------------
|
||
|
||
If we describe something as a function in this manual, it may have a
|
||
macro definition as well. This normally has no effect on how your
|
||
program runs—the macro definition does the same thing as the function
|
||
would. In particular, macro equivalents for library functions evaluate
|
||
arguments exactly once, in the same way that a function call would. The
|
||
main reason for these macro definitions is that sometimes they can
|
||
produce an inline expansion that is considerably faster than an actual
|
||
function call.
|
||
|
||
Taking the address of a library function works even if it is also
|
||
defined as a macro. This is because, in this context, the name of the
|
||
function isn’t followed by the left parenthesis that is syntactically
|
||
necessary to recognize a macro call.
|
||
|
||
You might occasionally want to avoid using the macro definition of a
|
||
function—perhaps to make your program easier to debug. There are two
|
||
ways you can do this:
|
||
|
||
• You can avoid a macro definition in a specific use by enclosing the
|
||
name of the function in parentheses. This works because the name
|
||
of the function doesn’t appear in a syntactic context where it is
|
||
recognizable as a macro call.
|
||
|
||
• You can suppress any macro definition for a whole source file by
|
||
using the ‘#undef’ preprocessor directive, unless otherwise stated
|
||
explicitly in the description of that facility.
|
||
|
||
For example, suppose the header file ‘stdlib.h’ declares a function
|
||
named ‘abs’ with
|
||
|
||
extern int abs (int);
|
||
|
||
and also provides a macro definition for ‘abs’. Then, in:
|
||
|
||
#include <stdlib.h>
|
||
int f (int *i) { return abs (++*i); }
|
||
|
||
the reference to ‘abs’ might refer to either a macro or a function. On
|
||
the other hand, in each of the following examples the reference is to a
|
||
function and not a macro.
|
||
|
||
#include <stdlib.h>
|
||
int g (int *i) { return (abs) (++*i); }
|
||
|
||
#undef abs
|
||
int h (int *i) { return abs (++*i); }
|
||
|
||
Since macro definitions that double for a function behave in exactly
|
||
the same way as the actual function version, there is usually no need
|
||
for any of these methods. In fact, removing macro definitions usually
|
||
just makes your program slower.
|
||
|
||
|
||
File: libc.info, Node: Reserved Names, Next: Feature Test Macros, Prev: Macro Definitions, Up: Using the Library
|
||
|
||
1.3.3 Reserved Names
|
||
--------------------
|
||
|
||
The names of all library types, macros, variables and functions that
|
||
come from the ISO C standard are reserved unconditionally; your program
|
||
*may not* redefine these names. All other library names are reserved if
|
||
your program explicitly includes the header file that defines or
|
||
declares them. There are several reasons for these restrictions:
|
||
|
||
• Other people reading your code could get very confused if you were
|
||
using a function named ‘exit’ to do something completely different
|
||
from what the standard ‘exit’ function does, for example.
|
||
Preventing this situation helps to make your programs easier to
|
||
understand and contributes to modularity and maintainability.
|
||
|
||
• It avoids the possibility of a user accidentally redefining a
|
||
library function that is called by other library functions. If
|
||
redefinition were allowed, those other functions would not work
|
||
properly.
|
||
|
||
• It allows the compiler to do whatever special optimizations it
|
||
pleases on calls to these functions, without the possibility that
|
||
they may have been redefined by the user. Some library facilities,
|
||
such as those for dealing with variadic arguments (*note Variadic
|
||
Functions::) and non-local exits (*note Non-Local Exits::),
|
||
actually require a considerable amount of cooperation on the part
|
||
of the C compiler, and with respect to the implementation, it might
|
||
be easier for the compiler to treat these as built-in parts of the
|
||
language.
|
||
|
||
In addition to the names documented in this manual, reserved names
|
||
include all external identifiers (global functions and variables) that
|
||
begin with an underscore (‘_’) and all identifiers regardless of use
|
||
that begin with either two underscores or an underscore followed by a
|
||
capital letter are reserved names. This is so that the library and
|
||
header files can define functions, variables, and macros for internal
|
||
purposes without risk of conflict with names in user programs.
|
||
|
||
Some additional classes of identifier names are reserved for future
|
||
extensions to the C language or the POSIX.1 environment. While using
|
||
these names for your own purposes right now might not cause a problem,
|
||
they do raise the possibility of conflict with future versions of the C
|
||
or POSIX standards, so you should avoid these names.
|
||
|
||
• Names beginning with a capital ‘E’ followed a digit or uppercase
|
||
letter may be used for additional error code names. *Note Error
|
||
Reporting::.
|
||
|
||
• Names that begin with either ‘is’ or ‘to’ followed by a lowercase
|
||
letter may be used for additional character testing and conversion
|
||
functions. *Note Character Handling::.
|
||
|
||
• Names that begin with ‘LC_’ followed by an uppercase letter may be
|
||
used for additional macros specifying locale attributes. *Note
|
||
Locales::.
|
||
|
||
• Names of all existing mathematics functions (*note Mathematics::)
|
||
suffixed with ‘f’ or ‘l’ are reserved for corresponding functions
|
||
that operate on ‘float’ and ‘long double’ arguments, respectively.
|
||
|
||
• Names that begin with ‘SIG’ followed by an uppercase letter are
|
||
reserved for additional signal names. *Note Standard Signals::.
|
||
|
||
• Names that begin with ‘SIG_’ followed by an uppercase letter are
|
||
reserved for additional signal actions. *Note Basic Signal
|
||
Handling::.
|
||
|
||
• Names beginning with ‘str’, ‘mem’, or ‘wcs’ followed by a lowercase
|
||
letter are reserved for additional string and array functions.
|
||
*Note String and Array Utilities::.
|
||
|
||
• Names that end with ‘_t’ are reserved for additional type names.
|
||
|
||
In addition, some individual header files reserve names beyond those
|
||
that they actually define. You only need to worry about these
|
||
restrictions if your program includes that particular header file.
|
||
|
||
• The header file ‘dirent.h’ reserves names prefixed with ‘d_’.
|
||
|
||
• The header file ‘fcntl.h’ reserves names prefixed with ‘l_’, ‘F_’,
|
||
‘O_’, and ‘S_’.
|
||
|
||
• The header file ‘grp.h’ reserves names prefixed with ‘gr_’.
|
||
|
||
• The header file ‘limits.h’ reserves names suffixed with ‘_MAX’.
|
||
|
||
• The header file ‘pwd.h’ reserves names prefixed with ‘pw_’.
|
||
|
||
• The header file ‘signal.h’ reserves names prefixed with ‘sa_’ and
|
||
‘SA_’.
|
||
|
||
• The header file ‘sys/stat.h’ reserves names prefixed with ‘st_’ and
|
||
‘S_’.
|
||
|
||
• The header file ‘sys/times.h’ reserves names prefixed with ‘tms_’.
|
||
|
||
• The header file ‘termios.h’ reserves names prefixed with ‘c_’, ‘V’,
|
||
‘I’, ‘O’, and ‘TC’; and names prefixed with ‘B’ followed by a
|
||
digit.
|
||
|
||
|
||
File: libc.info, Node: Feature Test Macros, Prev: Reserved Names, Up: Using the Library
|
||
|
||
1.3.4 Feature Test Macros
|
||
-------------------------
|
||
|
||
The exact set of features available when you compile a source file is
|
||
controlled by which “feature test macros” you define.
|
||
|
||
If you compile your programs using ‘gcc -ansi’, you get only the
|
||
ISO C library features, unless you explicitly request additional
|
||
features by defining one or more of the feature macros. *Note GNU CC
|
||
Command Options: (gcc)Invoking GCC, for more information about GCC
|
||
options.
|
||
|
||
You should define these macros by using ‘#define’ preprocessor
|
||
directives at the top of your source code files. These directives
|
||
_must_ come before any ‘#include’ of a system header file. It is best
|
||
to make them the very first thing in the file, preceded only by
|
||
comments. You could also use the ‘-D’ option to GCC, but it’s better if
|
||
you make the source files indicate their own meaning in a self-contained
|
||
way.
|
||
|
||
This system exists to allow the library to conform to multiple
|
||
standards. Although the different standards are often described as
|
||
supersets of each other, they are usually incompatible because larger
|
||
standards require functions with names that smaller ones reserve to the
|
||
user program. This is not mere pedantry — it has been a problem in
|
||
practice. For instance, some non-GNU programs define functions named
|
||
‘getline’ that have nothing to do with this library’s ‘getline’. They
|
||
would not be compilable if all features were enabled indiscriminately.
|
||
|
||
This should not be used to verify that a program conforms to a
|
||
limited standard. It is insufficient for this purpose, as it will not
|
||
protect you from including header files outside the standard, or relying
|
||
on semantics undefined within the standard.
|
||
|
||
-- Macro: _POSIX_SOURCE
|
||
|
||
If you define this macro, then the functionality from the POSIX.1
|
||
standard (IEEE Standard 1003.1) is available, as well as all of the
|
||
ISO C facilities.
|
||
|
||
The state of ‘_POSIX_SOURCE’ is irrelevant if you define the macro
|
||
‘_POSIX_C_SOURCE’ to a positive integer.
|
||
|
||
-- Macro: _POSIX_C_SOURCE
|
||
|
||
Define this macro to a positive integer to control which POSIX
|
||
functionality is made available. The greater the value of this
|
||
macro, the more functionality is made available.
|
||
|
||
If you define this macro to a value greater than or equal to ‘1’,
|
||
then the functionality from the 1990 edition of the POSIX.1
|
||
standard (IEEE Standard 1003.1-1990) is made available.
|
||
|
||
If you define this macro to a value greater than or equal to ‘2’,
|
||
then the functionality from the 1992 edition of the POSIX.2
|
||
standard (IEEE Standard 1003.2-1992) is made available.
|
||
|
||
If you define this macro to a value greater than or equal to
|
||
‘199309L’, then the functionality from the 1993 edition of the
|
||
POSIX.1b standard (IEEE Standard 1003.1b-1993) is made available.
|
||
|
||
If you define this macro to a value greater than or equal to
|
||
‘199506L’, then the functionality from the 1995 edition of the
|
||
POSIX.1c standard (IEEE Standard 1003.1c-1995) is made available.
|
||
|
||
If you define this macro to a value greater than or equal to
|
||
‘200112L’, then the functionality from the 2001 edition of the
|
||
POSIX standard (IEEE Standard 1003.1-2001) is made available.
|
||
|
||
If you define this macro to a value greater than or equal to
|
||
‘200809L’, then the functionality from the 2008 edition of the
|
||
POSIX standard (IEEE Standard 1003.1-2008) is made available.
|
||
|
||
Greater values for ‘_POSIX_C_SOURCE’ will enable future extensions.
|
||
The POSIX standards process will define these values as necessary,
|
||
and the GNU C Library should support them some time after they
|
||
become standardized. The 1996 edition of POSIX.1 (ISO/IEC 9945-1:
|
||
1996) states that if you define ‘_POSIX_C_SOURCE’ to a value
|
||
greater than or equal to ‘199506L’, then the functionality from the
|
||
1996 edition is made available. In general, in the GNU C Library,
|
||
bugfixes to the standards are included when specifying the base
|
||
version; e.g., POSIX.1-2004 will always be included with a value of
|
||
‘200112L’.
|
||
|
||
-- Macro: _XOPEN_SOURCE
|
||
-- Macro: _XOPEN_SOURCE_EXTENDED
|
||
|
||
If you define this macro, functionality described in the X/Open
|
||
Portability Guide is included. This is a superset of the POSIX.1
|
||
and POSIX.2 functionality and in fact ‘_POSIX_SOURCE’ and
|
||
‘_POSIX_C_SOURCE’ are automatically defined.
|
||
|
||
As the unification of all Unices, functionality only available in
|
||
BSD and SVID is also included.
|
||
|
||
If the macro ‘_XOPEN_SOURCE_EXTENDED’ is also defined, even more
|
||
functionality is available. The extra functions will make all
|
||
functions available which are necessary for the X/Open Unix brand.
|
||
|
||
If the macro ‘_XOPEN_SOURCE’ has the value 500 this includes all
|
||
functionality described so far plus some new definitions from the
|
||
Single Unix Specification, version 2. The value 600 (corresponding
|
||
to the sixth revision) includes definitions from SUSv3, and using
|
||
700 (the seventh revision) includes definitions from SUSv4.
|
||
|
||
-- Macro: _LARGEFILE_SOURCE
|
||
|
||
If this macro is defined some extra functions are available which
|
||
rectify a few shortcomings in all previous standards.
|
||
Specifically, the functions ‘fseeko’ and ‘ftello’ are available.
|
||
Without these functions the difference between the ISO C interface
|
||
(‘fseek’, ‘ftell’) and the low-level POSIX interface (‘lseek’)
|
||
would lead to problems.
|
||
|
||
This macro was introduced as part of the Large File Support
|
||
extension (LFS).
|
||
|
||
-- Macro: _LARGEFILE64_SOURCE
|
||
|
||
If you define this macro an additional set of functions is made
|
||
available which enables 32 bit systems to use files of sizes beyond
|
||
the usual limit of 2GB. This interface is not available if the
|
||
system does not support files that large. On systems where the
|
||
natural file size limit is greater than 2GB (i.e., on 64 bit
|
||
systems) the new functions are identical to the replaced functions.
|
||
|
||
The new functionality is made available by a new set of types and
|
||
functions which replace the existing ones. The names of these new
|
||
objects contain ‘64’ to indicate the intention, e.g., ‘off_t’ vs.
|
||
‘off64_t’ and ‘fseeko’ vs. ‘fseeko64’.
|
||
|
||
This macro was introduced as part of the Large File Support
|
||
extension (LFS). It is a transition interface for the period when
|
||
64 bit offsets are not generally used (see ‘_FILE_OFFSET_BITS’).
|
||
|
||
-- Macro: _FILE_OFFSET_BITS
|
||
|
||
This macro determines which file system interface shall be used,
|
||
one replacing the other. Whereas ‘_LARGEFILE64_SOURCE’ makes the
|
||
64 bit interface available as an additional interface,
|
||
‘_FILE_OFFSET_BITS’ allows the 64 bit interface to replace the old
|
||
interface.
|
||
|
||
If ‘_FILE_OFFSET_BITS’ is undefined, or if it is defined to the
|
||
value ‘32’, nothing changes. The 32 bit interface is used and
|
||
types like ‘off_t’ have a size of 32 bits on 32 bit systems.
|
||
|
||
If the macro is defined to the value ‘64’, the large file interface
|
||
replaces the old interface. I.e., the functions are not made
|
||
available under different names (as they are with
|
||
‘_LARGEFILE64_SOURCE’). Instead the old function names now
|
||
reference the new functions, e.g., a call to ‘fseeko’ now indeed
|
||
calls ‘fseeko64’.
|
||
|
||
This macro should only be selected if the system provides
|
||
mechanisms for handling large files. On 64 bit systems this macro
|
||
has no effect since the ‘*64’ functions are identical to the normal
|
||
functions.
|
||
|
||
This macro was introduced as part of the Large File Support
|
||
extension (LFS).
|
||
|
||
-- Macro: _ISOC99_SOURCE
|
||
|
||
If this macro is defined, features from ISO C99 are included.
|
||
Since these features are included by default, this macro is mostly
|
||
relevant when the compiler uses an earlier language version.
|
||
|
||
-- Macro: _ISOC11_SOURCE
|
||
|
||
If this macro is defined, ISO C11 extensions to ISO C99 are
|
||
included.
|
||
|
||
-- Macro: __STDC_WANT_LIB_EXT2__
|
||
|
||
If you define this macro to the value ‘1’, features from ISO/IEC TR
|
||
24731-2:2010 (Dynamic Allocation Functions) are enabled. Only some
|
||
of the features from this TR are supported by the GNU C Library.
|
||
|
||
-- Macro: __STDC_WANT_IEC_60559_BFP_EXT__
|
||
|
||
If you define this macro, features from ISO/IEC TS 18661-1:2014
|
||
(Floating-point extensions for C: Binary floating-point arithmetic)
|
||
are enabled. Only some of the features from this TS are supported
|
||
by the GNU C Library.
|
||
|
||
-- Macro: __STDC_WANT_IEC_60559_FUNCS_EXT__
|
||
|
||
If you define this macro, features from ISO/IEC TS 18661-4:2015
|
||
(Floating-point extensions for C: Supplementary functions) are
|
||
enabled. Only some of the features from this TS are supported by
|
||
the GNU C Library.
|
||
|
||
-- Macro: __STDC_WANT_IEC_60559_TYPES_EXT__
|
||
|
||
If you define this macro, features from ISO/IEC TS 18661-3:2015
|
||
(Floating-point extensions for C: Interchange and extended types)
|
||
are enabled. Only some of the features from this TS are supported
|
||
by the GNU C Library.
|
||
|
||
-- Macro: _GNU_SOURCE
|
||
|
||
If you define this macro, everything is included: ISO C89, ISO C99,
|
||
POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions. In
|
||
the cases where POSIX.1 conflicts with BSD, the POSIX definitions
|
||
take precedence.
|
||
|
||
-- Macro: _DEFAULT_SOURCE
|
||
|
||
If you define this macro, most features are included apart from
|
||
X/Open, LFS and GNU extensions: the effect is to enable features
|
||
from the 2008 edition of POSIX, as well as certain BSD and SVID
|
||
features without a separate feature test macro to control them.
|
||
|
||
Be aware that compiler options also affect included features:
|
||
|
||
• If you use a strict conformance option, features beyond those
|
||
from the compiler’s language version will be disabled, though
|
||
feature test macros may be used to enable them.
|
||
|
||
• Features enabled by compiler options are not overridden by
|
||
feature test macros.
|
||
|
||
-- Macro: _ATFILE_SOURCE
|
||
|
||
If this macro is defined, additional ‘*at’ interfaces are included.
|
||
|
||
-- Macro: _FORTIFY_SOURCE
|
||
|
||
If this macro is defined to 1, security hardening is added to
|
||
various library functions. If defined to 2, even stricter checks
|
||
are applied.
|
||
|
||
-- Macro: _REENTRANT
|
||
-- Macro: _THREAD_SAFE
|
||
|
||
These macros are obsolete. They have the same effect as defining
|
||
‘_POSIX_C_SOURCE’ with the value ‘199506L’.
|
||
|
||
Some very old C libraries required one of these macros to be
|
||
defined for basic functionality (e.g. ‘getchar’) to be thread-safe.
|
||
|
||
We recommend you use ‘_GNU_SOURCE’ in new programs. If you don’t
|
||
specify the ‘-ansi’ option to GCC, or other conformance options such as
|
||
‘-std=c99’, and don’t define any of these macros explicitly, the effect
|
||
is the same as defining ‘_DEFAULT_SOURCE’ to 1.
|
||
|
||
When you define a feature test macro to request a larger class of
|
||
features, it is harmless to define in addition a feature test macro for
|
||
a subset of those features. For example, if you define
|
||
‘_POSIX_C_SOURCE’, then defining ‘_POSIX_SOURCE’ as well has no effect.
|
||
Likewise, if you define ‘_GNU_SOURCE’, then defining either
|
||
‘_POSIX_SOURCE’ or ‘_POSIX_C_SOURCE’ as well has no effect.
|
||
|
||
|
||
File: libc.info, Node: Roadmap to the Manual, Prev: Using the Library, Up: Introduction
|
||
|
||
1.4 Roadmap to the Manual
|
||
=========================
|
||
|
||
Here is an overview of the contents of the remaining chapters of this
|
||
manual.
|
||
|
||
• *note Error Reporting::, describes how errors detected by the
|
||
library are reported.
|
||
|
||
• *note Memory::, describes the GNU C Library’s facilities for
|
||
managing and using virtual and real memory, including dynamic
|
||
allocation of virtual memory. If you do not know in advance how
|
||
much memory your program needs, you can allocate it dynamically
|
||
instead, and manipulate it via pointers.
|
||
|
||
• *note Character Handling::, contains information about character
|
||
classification functions (such as ‘isspace’) and functions for
|
||
performing case conversion.
|
||
|
||
• *note String and Array Utilities::, has descriptions of functions
|
||
for manipulating strings (null-terminated character arrays) and
|
||
general byte arrays, including operations such as copying and
|
||
comparison.
|
||
|
||
• *note Character Set Handling::, contains information about
|
||
manipulating characters and strings using character sets larger
|
||
than will fit in the usual ‘char’ data type.
|
||
|
||
• *note Locales::, describes how selecting a particular country or
|
||
language affects the behavior of the library. For example, the
|
||
locale affects collation sequences for strings and how monetary
|
||
values are formatted.
|
||
|
||
• *note Searching and Sorting::, contains information about functions
|
||
for searching and sorting arrays. You can use these functions on
|
||
any kind of array by providing an appropriate comparison function.
|
||
|
||
• *note Pattern Matching::, presents functions for matching regular
|
||
expressions and shell file name patterns, and for expanding words
|
||
as the shell does.
|
||
|
||
• *note I/O Overview::, gives an overall look at the input and output
|
||
facilities in the library, and contains information about basic
|
||
concepts such as file names.
|
||
|
||
• *note I/O on Streams::, describes I/O operations involving streams
|
||
(or ‘FILE *’ objects). These are the normal C library functions
|
||
from ‘stdio.h’.
|
||
|
||
• *note Low-Level I/O::, contains information about I/O operations on
|
||
file descriptors. File descriptors are a lower-level mechanism
|
||
specific to the Unix family of operating systems.
|
||
|
||
• *note File System Interface::, has descriptions of operations on
|
||
entire files, such as functions for deleting and renaming them and
|
||
for creating new directories. This chapter also contains
|
||
information about how you can access the attributes of a file, such
|
||
as its owner and file protection modes.
|
||
|
||
• *note Pipes and FIFOs::, contains information about simple
|
||
interprocess communication mechanisms. Pipes allow communication
|
||
between two related processes (such as between a parent and child),
|
||
while FIFOs allow communication between processes sharing a common
|
||
file system on the same machine.
|
||
|
||
• *note Sockets::, describes a more complicated interprocess
|
||
communication mechanism that allows processes running on different
|
||
machines to communicate over a network. This chapter also contains
|
||
information about Internet host addressing and how to use the
|
||
system network databases.
|
||
|
||
• *note Low-Level Terminal Interface::, describes how you can change
|
||
the attributes of a terminal device. If you want to disable echo
|
||
of characters typed by the user, for example, read this chapter.
|
||
|
||
• *note Mathematics::, contains information about the math library
|
||
functions. These include things like random-number generators and
|
||
remainder functions on integers as well as the usual trigonometric
|
||
and exponential functions on floating-point numbers.
|
||
|
||
• *note Low-Level Arithmetic Functions: Arithmetic, describes
|
||
functions for simple arithmetic, analysis of floating-point values,
|
||
and reading numbers from strings.
|
||
|
||
• *note Date and Time::, describes functions for measuring both
|
||
calendar time and CPU time, as well as functions for setting alarms
|
||
and timers.
|
||
|
||
• *note Non-Local Exits::, contains descriptions of the ‘setjmp’ and
|
||
‘longjmp’ functions. These functions provide a facility for
|
||
‘goto’-like jumps which can jump from one function to another.
|
||
|
||
• *note Signal Handling::, tells you all about signals—what they are,
|
||
how to establish a handler that is called when a particular kind of
|
||
signal is delivered, and how to prevent signals from arriving
|
||
during critical sections of your program.
|
||
|
||
• *note Program Basics::, tells how your programs can access their
|
||
command-line arguments and environment variables.
|
||
|
||
• *note Processes::, contains information about how to start new
|
||
processes and run programs.
|
||
|
||
• *note Job Control::, describes functions for manipulating process
|
||
groups and the controlling terminal. This material is probably
|
||
only of interest if you are writing a shell or other program which
|
||
handles job control specially.
|
||
|
||
• *note Name Service Switch::, describes the services which are
|
||
available for looking up names in the system databases, how to
|
||
determine which service is used for which database, and how these
|
||
services are implemented so that contributors can design their own
|
||
services.
|
||
|
||
• *note User Database::, and *note Group Database::, tell you how to
|
||
access the system user and group databases.
|
||
|
||
• *note System Management::, describes functions for controlling and
|
||
getting information about the hardware and software configuration
|
||
your program is executing under.
|
||
|
||
• *note System Configuration::, tells you how you can get information
|
||
about various operating system limits. Most of these parameters
|
||
are provided for compatibility with POSIX.
|
||
|
||
• *note Language Features::, contains information about library
|
||
support for standard parts of the C language, including things like
|
||
the ‘sizeof’ operator and the symbolic constant ‘NULL’, how to
|
||
write functions accepting variable numbers of arguments, and
|
||
constants describing the ranges and other properties of the
|
||
numerical types. There is also a simple debugging mechanism which
|
||
allows you to put assertions in your code, and have diagnostic
|
||
messages printed if the tests fail.
|
||
|
||
• *note Library Summary::, gives a summary of all the functions,
|
||
variables, and macros in the library, with complete data types and
|
||
function prototypes, and says what standard or system each is
|
||
derived from.
|
||
|
||
• *note Installation::, explains how to build and install the GNU C
|
||
Library on your system, and how to report any bugs you might find.
|
||
|
||
• *note Maintenance::, explains how to add new functions or port the
|
||
library to a new system.
|
||
|
||
If you already know the name of the facility you are interested in,
|
||
you can look it up in *note Library Summary::. This gives you a summary
|
||
of its syntax and a pointer to where you can find a more detailed
|
||
description. This appendix is particularly useful if you just want to
|
||
verify the order and type of arguments to a function, for example. It
|
||
also tells you what standard or system each function, variable, or macro
|
||
is derived from.
|
||
|
||
|
||
File: libc.info, Node: Error Reporting, Next: Memory, Prev: Introduction, Up: Top
|
||
|
||
2 Error Reporting
|
||
*****************
|
||
|
||
Many functions in the GNU C Library detect and report error conditions,
|
||
and sometimes your programs need to check for these error conditions.
|
||
For example, when you open an input file, you should verify that the
|
||
file was actually opened correctly, and print an error message or take
|
||
other appropriate action if the call to the library function failed.
|
||
|
||
This chapter describes how the error reporting facility works. Your
|
||
program should include the header file ‘errno.h’ to use this facility.
|
||
|
||
* Menu:
|
||
|
||
* Checking for Errors:: How errors are reported by library functions.
|
||
* Error Codes:: Error code macros; all of these expand
|
||
into integer constant values.
|
||
* Error Messages:: Mapping error codes onto error messages.
|
||
|
||
|
||
File: libc.info, Node: Checking for Errors, Next: Error Codes, Up: Error Reporting
|
||
|
||
2.1 Checking for Errors
|
||
=======================
|
||
|
||
Most library functions return a special value to indicate that they have
|
||
failed. The special value is typically ‘-1’, a null pointer, or a
|
||
constant such as ‘EOF’ that is defined for that purpose. But this
|
||
return value tells you only that an error has occurred. To find out
|
||
what kind of error it was, you need to look at the error code stored in
|
||
the variable ‘errno’. This variable is declared in the header file
|
||
‘errno.h’.
|
||
|
||
-- Variable: volatile int errno
|
||
|
||
The variable ‘errno’ contains the system error number. You can
|
||
change the value of ‘errno’.
|
||
|
||
Since ‘errno’ is declared ‘volatile’, it might be changed
|
||
asynchronously by a signal handler; see *note Defining Handlers::.
|
||
However, a properly written signal handler saves and restores the
|
||
value of ‘errno’, so you generally do not need to worry about this
|
||
possibility except when writing signal handlers.
|
||
|
||
The initial value of ‘errno’ at program startup is zero. In many
|
||
cases, when a library function encounters an error, it will set
|
||
‘errno’ to a non-zero value to indicate what specific error
|
||
condition occurred. The documentation for each function lists the
|
||
error conditions that are possible for that function. Not all
|
||
library functions use this mechanism; some return an error code
|
||
directly, instead.
|
||
|
||
*Warning:* Many library functions may set ‘errno’ to some
|
||
meaningless non-zero value even if they did not encounter any
|
||
errors, and even if they return error codes directly. Therefore,
|
||
it is usually incorrect to check _whether_ an error occurred by
|
||
inspecting the value of ‘errno’. The proper way to check for error
|
||
is documented for each function.
|
||
|
||
*Portability Note:* ISO C specifies ‘errno’ as a “modifiable
|
||
lvalue” rather than as a variable, permitting it to be implemented
|
||
as a macro. For example, its expansion might involve a function
|
||
call, like ‘*__errno_location ()’. In fact, that is what it is on
|
||
GNU/Linux and GNU/Hurd systems. The GNU C Library, on each system,
|
||
does whatever is right for the particular system.
|
||
|
||
There are a few library functions, like ‘sqrt’ and ‘atan’, that
|
||
return a perfectly legitimate value in case of an error, but also
|
||
set ‘errno’. For these functions, if you want to check to see
|
||
whether an error occurred, the recommended method is to set ‘errno’
|
||
to zero before calling the function, and then check its value
|
||
afterward.
|
||
|
||
All the error codes have symbolic names; they are macros defined in
|
||
‘errno.h’. The names start with ‘E’ and an upper-case letter or digit;
|
||
you should consider names of this form to be reserved names. *Note
|
||
Reserved Names::.
|
||
|
||
The error code values are all positive integers and are all distinct,
|
||
with one exception: ‘EWOULDBLOCK’ and ‘EAGAIN’ are the same. Since the
|
||
values are distinct, you can use them as labels in a ‘switch’ statement;
|
||
just don’t use both ‘EWOULDBLOCK’ and ‘EAGAIN’. Your program should not
|
||
make any other assumptions about the specific values of these symbolic
|
||
constants.
|
||
|
||
The value of ‘errno’ doesn’t necessarily have to correspond to any of
|
||
these macros, since some library functions might return other error
|
||
codes of their own for other situations. The only values that are
|
||
guaranteed to be meaningful for a particular library function are the
|
||
ones that this manual lists for that function.
|
||
|
||
Except on GNU/Hurd systems, almost any system call can return
|
||
‘EFAULT’ if it is given an invalid pointer as an argument. Since this
|
||
could only happen as a result of a bug in your program, and since it
|
||
will not happen on GNU/Hurd systems, we have saved space by not
|
||
mentioning ‘EFAULT’ in the descriptions of individual functions.
|
||
|
||
In some Unix systems, many system calls can also return ‘EFAULT’ if
|
||
given as an argument a pointer into the stack, and the kernel for some
|
||
obscure reason fails in its attempt to extend the stack. If this ever
|
||
happens, you should probably try using statically or dynamically
|
||
allocated memory instead of stack memory on that system.
|
||
|
||
|
||
File: libc.info, Node: Error Codes, Next: Error Messages, Prev: Checking for Errors, Up: Error Reporting
|
||
|
||
2.2 Error Codes
|
||
===============
|
||
|
||
The error code macros are defined in the header file ‘errno.h’. All of
|
||
them expand into integer constant values. Some of these error codes
|
||
can’t occur on GNU systems, but they can occur using the GNU C Library
|
||
on other systems.
|
||
|
||
-- Macro: int EPERM
|
||
|
||
“Operation not permitted.” Only the owner of the file (or other
|
||
resource) or processes with special privileges can perform the
|
||
operation.
|
||
|
||
-- Macro: int ENOENT
|
||
|
||
“No such file or directory.” This is a “file doesn’t exist” error
|
||
for ordinary files that are referenced in contexts where they are
|
||
expected to already exist.
|
||
|
||
-- Macro: int ESRCH
|
||
|
||
“No such process.” No process matches the specified process ID.
|
||
|
||
-- Macro: int EINTR
|
||
|
||
“Interrupted system call.” An asynchronous signal occurred and
|
||
prevented completion of the call. When this happens, you should
|
||
try the call again.
|
||
|
||
You can choose to have functions resume after a signal that is
|
||
handled, rather than failing with ‘EINTR’; see *note Interrupted
|
||
Primitives::.
|
||
|
||
-- Macro: int EIO
|
||
|
||
“Input/output error.” Usually used for physical read or write
|
||
errors.
|
||
|
||
-- Macro: int ENXIO
|
||
|
||
“No such device or address.” The system tried to use the device
|
||
represented by a file you specified, and it couldn’t find the
|
||
device. This can mean that the device file was installed
|
||
incorrectly, or that the physical device is missing or not
|
||
correctly attached to the computer.
|
||
|
||
-- Macro: int E2BIG
|
||
|
||
“Argument list too long.” Used when the arguments passed to a new
|
||
program being executed with one of the ‘exec’ functions (*note
|
||
Executing a File::) occupy too much memory space. This condition
|
||
never arises on GNU/Hurd systems.
|
||
|
||
-- Macro: int ENOEXEC
|
||
|
||
“Exec format error.” Invalid executable file format. This
|
||
condition is detected by the ‘exec’ functions; see *note Executing
|
||
a File::.
|
||
|
||
-- Macro: int EBADF
|
||
|
||
“Bad file descriptor.” For example, I/O on a descriptor that has
|
||
been closed or reading from a descriptor open only for writing (or
|
||
vice versa).
|
||
|
||
-- Macro: int ECHILD
|
||
|
||
“No child processes.” This error happens on operations that are
|
||
supposed to manipulate child processes, when there aren’t any
|
||
processes to manipulate.
|
||
|
||
-- Macro: int EDEADLK
|
||
|
||
“Resource deadlock avoided.” Allocating a system resource would
|
||
have resulted in a deadlock situation. The system does not
|
||
guarantee that it will notice all such situations. This error
|
||
means you got lucky and the system noticed; it might just hang.
|
||
*Note File Locks::, for an example.
|
||
|
||
-- Macro: int ENOMEM
|
||
|
||
“Cannot allocate memory.” The system cannot allocate more virtual
|
||
memory because its capacity is full.
|
||
|
||
-- Macro: int EACCES
|
||
|
||
“Permission denied.” The file permissions do not allow the
|
||
attempted operation.
|
||
|
||
-- Macro: int EFAULT
|
||
|
||
“Bad address.” An invalid pointer was detected. On GNU/Hurd
|
||
systems, this error never happens; you get a signal instead.
|
||
|
||
-- Macro: int ENOTBLK
|
||
|
||
“Block device required.” A file that isn’t a block special file was
|
||
given in a situation that requires one. For example, trying to
|
||
mount an ordinary file as a file system in Unix gives this error.
|
||
|
||
-- Macro: int EBUSY
|
||
|
||
“Device or resource busy.” A system resource that can’t be shared
|
||
is already in use. For example, if you try to delete a file that
|
||
is the root of a currently mounted filesystem, you get this error.
|
||
|
||
-- Macro: int EEXIST
|
||
|
||
“File exists.” An existing file was specified in a context where it
|
||
only makes sense to specify a new file.
|
||
|
||
-- Macro: int EXDEV
|
||
|
||
“Invalid cross-device link.” An attempt to make an improper link
|
||
across file systems was detected. This happens not only when you
|
||
use ‘link’ (*note Hard Links::) but also when you rename a file
|
||
with ‘rename’ (*note Renaming Files::).
|
||
|
||
-- Macro: int ENODEV
|
||
|
||
“No such device.” The wrong type of device was given to a function
|
||
that expects a particular sort of device.
|
||
|
||
-- Macro: int ENOTDIR
|
||
|
||
“Not a directory.” A file that isn’t a directory was specified when
|
||
a directory is required.
|
||
|
||
-- Macro: int EISDIR
|
||
|
||
“Is a directory.” You cannot open a directory for writing, or
|
||
create or remove hard links to it.
|
||
|
||
-- Macro: int EINVAL
|
||
|
||
“Invalid argument.” This is used to indicate various kinds of
|
||
problems with passing the wrong argument to a library function.
|
||
|
||
-- Macro: int EMFILE
|
||
|
||
“Too many open files.” The current process has too many files open
|
||
and can’t open any more. Duplicate descriptors do count toward
|
||
this limit.
|
||
|
||
In BSD and GNU, the number of open files is controlled by a
|
||
resource limit that can usually be increased. If you get this
|
||
error, you might want to increase the ‘RLIMIT_NOFILE’ limit or make
|
||
it unlimited; *note Limits on Resources::.
|
||
|
||
-- Macro: int ENFILE
|
||
|
||
“Too many open files in system.” There are too many distinct file
|
||
openings in the entire system. Note that any number of linked
|
||
channels count as just one file opening; see *note Linked
|
||
Channels::. This error never occurs on GNU/Hurd systems.
|
||
|
||
-- Macro: int ENOTTY
|
||
|
||
“Inappropriate ioctl for device.” Inappropriate I/O control
|
||
operation, such as trying to set terminal modes on an ordinary
|
||
file.
|
||
|
||
-- Macro: int ETXTBSY
|
||
|
||
“Text file busy.” An attempt to execute a file that is currently
|
||
open for writing, or write to a file that is currently being
|
||
executed. Often using a debugger to run a program is considered
|
||
having it open for writing and will cause this error. (The name
|
||
stands for “text file busy”.) This is not an error on GNU/Hurd
|
||
systems; the text is copied as necessary.
|
||
|
||
-- Macro: int EFBIG
|
||
|
||
“File too large.” The size of a file would be larger than allowed
|
||
by the system.
|
||
|
||
-- Macro: int ENOSPC
|
||
|
||
“No space left on device.” Write operation on a file failed because
|
||
the disk is full.
|
||
|
||
-- Macro: int ESPIPE
|
||
|
||
“Illegal seek.” Invalid seek operation (such as on a pipe).
|
||
|
||
-- Macro: int EROFS
|
||
|
||
“Read-only file system.” An attempt was made to modify something on
|
||
a read-only file system.
|
||
|
||
-- Macro: int EMLINK
|
||
|
||
“Too many links.” The link count of a single file would become too
|
||
large. ‘rename’ can cause this error if the file being renamed
|
||
already has as many links as it can take (*note Renaming Files::).
|
||
|
||
-- Macro: int EPIPE
|
||
|
||
“Broken pipe.” There is no process reading from the other end of a
|
||
pipe. Every library function that returns this error code also
|
||
generates a ‘SIGPIPE’ signal; this signal terminates the program if
|
||
not handled or blocked. Thus, your program will never actually see
|
||
‘EPIPE’ unless it has handled or blocked ‘SIGPIPE’.
|
||
|
||
-- Macro: int EDOM
|
||
|
||
“Numerical argument out of domain.” Used by mathematical functions
|
||
when an argument value does not fall into the domain over which the
|
||
function is defined.
|
||
|
||
-- Macro: int ERANGE
|
||
|
||
“Numerical result out of range.” Used by mathematical functions
|
||
when the result value is not representable because of overflow or
|
||
underflow.
|
||
|
||
-- Macro: int EAGAIN
|
||
|
||
“Resource temporarily unavailable.” The call might work if you try
|
||
again later. The macro ‘EWOULDBLOCK’ is another name for ‘EAGAIN’;
|
||
they are always the same in the GNU C Library.
|
||
|
||
This error can happen in a few different situations:
|
||
|
||
• An operation that would block was attempted on an object that
|
||
has non-blocking mode selected. Trying the same operation
|
||
again will block until some external condition makes it
|
||
possible to read, write, or connect (whatever the operation).
|
||
You can use ‘select’ to find out when the operation will be
|
||
possible; *note Waiting for I/O::.
|
||
|
||
*Portability Note:* In many older Unix systems, this condition
|
||
was indicated by ‘EWOULDBLOCK’, which was a distinct error
|
||
code different from ‘EAGAIN’. To make your program portable,
|
||
you should check for both codes and treat them the same.
|
||
|
||
• A temporary resource shortage made an operation impossible.
|
||
‘fork’ can return this error. It indicates that the shortage
|
||
is expected to pass, so your program can try the call again
|
||
later and it may succeed. It is probably a good idea to delay
|
||
for a few seconds before trying it again, to allow time for
|
||
other processes to release scarce resources. Such shortages
|
||
are usually fairly serious and affect the whole system, so
|
||
usually an interactive program should report the error to the
|
||
user and return to its command loop.
|
||
|
||
-- Macro: int EWOULDBLOCK
|
||
|
||
“Operation would block.” In the GNU C Library, this is another name
|
||
for ‘EAGAIN’ (above). The values are always the same, on every
|
||
operating system.
|
||
|
||
C libraries in many older Unix systems have ‘EWOULDBLOCK’ as a
|
||
separate error code.
|
||
|
||
-- Macro: int EINPROGRESS
|
||
|
||
“Operation now in progress.” An operation that cannot complete
|
||
immediately was initiated on an object that has non-blocking mode
|
||
selected. Some functions that must always block (such as
|
||
‘connect’; *note Connecting::) never return ‘EAGAIN’. Instead,
|
||
they return ‘EINPROGRESS’ to indicate that the operation has begun
|
||
and will take some time. Attempts to manipulate the object before
|
||
the call completes return ‘EALREADY’. You can use the ‘select’
|
||
function to find out when the pending operation has completed;
|
||
*note Waiting for I/O::.
|
||
|
||
-- Macro: int EALREADY
|
||
|
||
“Operation already in progress.” An operation is already in
|
||
progress on an object that has non-blocking mode selected.
|
||
|
||
-- Macro: int ENOTSOCK
|
||
|
||
“Socket operation on non-socket.” A file that isn’t a socket was
|
||
specified when a socket is required.
|
||
|
||
-- Macro: int EMSGSIZE
|
||
|
||
“Message too long.” The size of a message sent on a socket was
|
||
larger than the supported maximum size.
|
||
|
||
-- Macro: int EPROTOTYPE
|
||
|
||
“Protocol wrong type for socket.” The socket type does not support
|
||
the requested communications protocol.
|
||
|
||
-- Macro: int ENOPROTOOPT
|
||
|
||
“Protocol not available.” You specified a socket option that
|
||
doesn’t make sense for the particular protocol being used by the
|
||
socket. *Note Socket Options::.
|
||
|
||
-- Macro: int EPROTONOSUPPORT
|
||
|
||
“Protocol not supported.” The socket domain does not support the
|
||
requested communications protocol (perhaps because the requested
|
||
protocol is completely invalid). *Note Creating a Socket::.
|
||
|
||
-- Macro: int ESOCKTNOSUPPORT
|
||
|
||
“Socket type not supported.” The socket type is not supported.
|
||
|
||
-- Macro: int EOPNOTSUPP
|
||
|
||
“Operation not supported.” The operation you requested is not
|
||
supported. Some socket functions don’t make sense for all types of
|
||
sockets, and others may not be implemented for all communications
|
||
protocols. On GNU/Hurd systems, this error can happen for many
|
||
calls when the object does not support the particular operation; it
|
||
is a generic indication that the server knows nothing to do for
|
||
that call.
|
||
|
||
-- Macro: int EPFNOSUPPORT
|
||
|
||
“Protocol family not supported.” The socket communications protocol
|
||
family you requested is not supported.
|
||
|
||
-- Macro: int EAFNOSUPPORT
|
||
|
||
“Address family not supported by protocol.” The address family
|
||
specified for a socket is not supported; it is inconsistent with
|
||
the protocol being used on the socket. *Note Sockets::.
|
||
|
||
-- Macro: int EADDRINUSE
|
||
|
||
“Address already in use.” The requested socket address is already
|
||
in use. *Note Socket Addresses::.
|
||
|
||
-- Macro: int EADDRNOTAVAIL
|
||
|
||
“Cannot assign requested address.” The requested socket address is
|
||
not available; for example, you tried to give a socket a name that
|
||
doesn’t match the local host name. *Note Socket Addresses::.
|
||
|
||
-- Macro: int ENETDOWN
|
||
|
||
“Network is down.” A socket operation failed because the network
|
||
was down.
|
||
|
||
-- Macro: int ENETUNREACH
|
||
|
||
“Network is unreachable.” A socket operation failed because the
|
||
subnet containing the remote host was unreachable.
|
||
|
||
-- Macro: int ENETRESET
|
||
|
||
“Network dropped connection on reset.” A network connection was
|
||
reset because the remote host crashed.
|
||
|
||
-- Macro: int ECONNABORTED
|
||
|
||
“Software caused connection abort.” A network connection was
|
||
aborted locally.
|
||
|
||
-- Macro: int ECONNRESET
|
||
|
||
“Connection reset by peer.” A network connection was closed for
|
||
reasons outside the control of the local host, such as by the
|
||
remote machine rebooting or an unrecoverable protocol violation.
|
||
|
||
-- Macro: int ENOBUFS
|
||
|
||
“No buffer space available.” The kernel’s buffers for I/O
|
||
operations are all in use. In GNU, this error is always synonymous
|
||
with ‘ENOMEM’; you may get one or the other from network
|
||
operations.
|
||
|
||
-- Macro: int EISCONN
|
||
|
||
“Transport endpoint is already connected.” You tried to connect a
|
||
socket that is already connected. *Note Connecting::.
|
||
|
||
-- Macro: int ENOTCONN
|
||
|
||
“Transport endpoint is not connected.” The socket is not connected
|
||
to anything. You get this error when you try to transmit data over
|
||
a socket, without first specifying a destination for the data. For
|
||
a connectionless socket (for datagram protocols, such as UDP), you
|
||
get ‘EDESTADDRREQ’ instead.
|
||
|
||
-- Macro: int EDESTADDRREQ
|
||
|
||
“Destination address required.” No default destination address was
|
||
set for the socket. You get this error when you try to transmit
|
||
data over a connectionless socket, without first specifying a
|
||
destination for the data with ‘connect’.
|
||
|
||
-- Macro: int ESHUTDOWN
|
||
|
||
“Cannot send after transport endpoint shutdown.” The socket has
|
||
already been shut down.
|
||
|
||
-- Macro: int ETOOMANYREFS
|
||
|
||
“Too many references: cannot splice.”
|
||
|
||
-- Macro: int ETIMEDOUT
|
||
|
||
“Connection timed out.” A socket operation with a specified timeout
|
||
received no response during the timeout period.
|
||
|
||
-- Macro: int ECONNREFUSED
|
||
|
||
“Connection refused.” A remote host refused to allow the network
|
||
connection (typically because it is not running the requested
|
||
service).
|
||
|
||
-- Macro: int ELOOP
|
||
|
||
“Too many levels of symbolic links.” Too many levels of symbolic
|
||
links were encountered in looking up a file name. This often
|
||
indicates a cycle of symbolic links.
|
||
|
||
-- Macro: int ENAMETOOLONG
|
||
|
||
“File name too long.” Filename too long (longer than ‘PATH_MAX’;
|
||
*note Limits for Files::) or host name too long (in ‘gethostname’
|
||
or ‘sethostname’; *note Host Identification::).
|
||
|
||
-- Macro: int EHOSTDOWN
|
||
|
||
“Host is down.” The remote host for a requested network connection
|
||
is down.
|
||
|
||
-- Macro: int EHOSTUNREACH
|
||
|
||
“No route to host.” The remote host for a requested network
|
||
connection is not reachable.
|
||
|
||
-- Macro: int ENOTEMPTY
|
||
|
||
“Directory not empty.” Directory not empty, where an empty
|
||
directory was expected. Typically, this error occurs when you are
|
||
trying to delete a directory.
|
||
|
||
-- Macro: int EPROCLIM
|
||
|
||
“Too many processes.” This means that the per-user limit on new
|
||
process would be exceeded by an attempted ‘fork’. *Note Limits on
|
||
Resources::, for details on the ‘RLIMIT_NPROC’ limit.
|
||
|
||
-- Macro: int EUSERS
|
||
|
||
“Too many users.” The file quota system is confused because there
|
||
are too many users.
|
||
|
||
-- Macro: int EDQUOT
|
||
|
||
“Disk quota exceeded.” The user’s disk quota was exceeded.
|
||
|
||
-- Macro: int ESTALE
|
||
|
||
“Stale file handle.” This indicates an internal confusion in the
|
||
file system which is due to file system rearrangements on the
|
||
server host for NFS file systems or corruption in other file
|
||
systems. Repairing this condition usually requires unmounting,
|
||
possibly repairing and remounting the file system.
|
||
|
||
-- Macro: int EREMOTE
|
||
|
||
“Object is remote.” An attempt was made to NFS-mount a remote file
|
||
system with a file name that already specifies an NFS-mounted file.
|
||
(This is an error on some operating systems, but we expect it to
|
||
work properly on GNU/Hurd systems, making this error code
|
||
impossible.)
|
||
|
||
-- Macro: int EBADRPC
|
||
|
||
“RPC struct is bad.”
|
||
|
||
-- Macro: int ERPCMISMATCH
|
||
|
||
“RPC version wrong.”
|
||
|
||
-- Macro: int EPROGUNAVAIL
|
||
|
||
“RPC program not available.”
|
||
|
||
-- Macro: int EPROGMISMATCH
|
||
|
||
“RPC program version wrong.”
|
||
|
||
-- Macro: int EPROCUNAVAIL
|
||
|
||
“RPC bad procedure for program.”
|
||
|
||
-- Macro: int ENOLCK
|
||
|
||
“No locks available.” This is used by the file locking facilities;
|
||
see *note File Locks::. This error is never generated by GNU/Hurd
|
||
systems, but it can result from an operation to an NFS server
|
||
running another operating system.
|
||
|
||
-- Macro: int EFTYPE
|
||
|
||
“Inappropriate file type or format.” The file was the wrong type
|
||
for the operation, or a data file had the wrong format.
|
||
|
||
On some systems ‘chmod’ returns this error if you try to set the
|
||
sticky bit on a non-directory file; *note Setting Permissions::.
|
||
|
||
-- Macro: int EAUTH
|
||
|
||
“Authentication error.”
|
||
|
||
-- Macro: int ENEEDAUTH
|
||
|
||
“Need authenticator.”
|
||
|
||
-- Macro: int ENOSYS
|
||
|
||
“Function not implemented.” This indicates that the function called
|
||
is not implemented at all, either in the C library itself or in the
|
||
operating system. When you get this error, you can be sure that
|
||
this particular function will always fail with ‘ENOSYS’ unless you
|
||
install a new version of the C library or the operating system.
|
||
|
||
-- Macro: int ENOTSUP
|
||
|
||
“Not supported.” A function returns this error when certain
|
||
parameter values are valid, but the functionality they request is
|
||
not available. This can mean that the function does not implement
|
||
a particular command or option value or flag bit at all. For
|
||
functions that operate on some object given in a parameter, such as
|
||
a file descriptor or a port, it might instead mean that only _that
|
||
specific object_ (file descriptor, port, etc.) is unable to
|
||
support the other parameters given; different file descriptors
|
||
might support different ranges of parameter values.
|
||
|
||
If the entire function is not available at all in the
|
||
implementation, it returns ‘ENOSYS’ instead.
|
||
|
||
-- Macro: int EILSEQ
|
||
|
||
“Invalid or incomplete multibyte or wide character.” While decoding
|
||
a multibyte character the function came along an invalid or an
|
||
incomplete sequence of bytes or the given wide character is
|
||
invalid.
|
||
|
||
-- Macro: int EBACKGROUND
|
||
|
||
“Inappropriate operation for background process.” On GNU/Hurd
|
||
systems, servers supporting the ‘term’ protocol return this error
|
||
for certain operations when the caller is not in the foreground
|
||
process group of the terminal. Users do not usually see this error
|
||
because functions such as ‘read’ and ‘write’ translate it into a
|
||
‘SIGTTIN’ or ‘SIGTTOU’ signal. *Note Job Control::, for
|
||
information on process groups and these signals.
|
||
|
||
-- Macro: int EDIED
|
||
|
||
“Translator died.” On GNU/Hurd systems, opening a file returns this
|
||
error when the file is translated by a program and the translator
|
||
program dies while starting up, before it has connected to the
|
||
file.
|
||
|
||
-- Macro: int ED
|
||
|
||
“?.” The experienced user will know what is wrong.
|
||
|
||
-- Macro: int EGREGIOUS
|
||
|
||
“You really blew it this time.” You did *what*?
|
||
|
||
-- Macro: int EIEIO
|
||
|
||
“Computer bought the farm.” Go home and have a glass of warm,
|
||
dairy-fresh milk.
|
||
|
||
-- Macro: int EGRATUITOUS
|
||
|
||
“Gratuitous error.” This error code has no purpose.
|
||
|
||
-- Macro: int EBADMSG
|
||
|
||
“Bad message.”
|
||
|
||
-- Macro: int EIDRM
|
||
|
||
“Identifier removed.”
|
||
|
||
-- Macro: int EMULTIHOP
|
||
|
||
“Multihop attempted.”
|
||
|
||
-- Macro: int ENODATA
|
||
|
||
“No data available.”
|
||
|
||
-- Macro: int ENOLINK
|
||
|
||
“Link has been severed.”
|
||
|
||
-- Macro: int ENOMSG
|
||
|
||
“No message of desired type.”
|
||
|
||
-- Macro: int ENOSR
|
||
|
||
“Out of streams resources.”
|
||
|
||
-- Macro: int ENOSTR
|
||
|
||
“Device not a stream.”
|
||
|
||
-- Macro: int EOVERFLOW
|
||
|
||
“Value too large for defined data type.”
|
||
|
||
-- Macro: int EPROTO
|
||
|
||
“Protocol error.”
|
||
|
||
-- Macro: int ETIME
|
||
|
||
“Timer expired.”
|
||
|
||
-- Macro: int ECANCELED
|
||
|
||
“Operation canceled.” An asynchronous operation was canceled before
|
||
it completed. *Note Asynchronous I/O::. When you call
|
||
‘aio_cancel’, the normal result is for the operations affected to
|
||
complete with this error; *note Cancel AIO Operations::.
|
||
|
||
-- Macro: int EOWNERDEAD
|
||
|
||
“Owner died.”
|
||
|
||
-- Macro: int ENOTRECOVERABLE
|
||
|
||
“State not recoverable.”
|
||
|
||
_The following error codes are defined by the Linux/i386 kernel.
|
||
They are not yet documented._
|
||
|
||
-- Macro: int ERESTART
|
||
|
||
“Interrupted system call should be restarted.”
|
||
|
||
-- Macro: int ECHRNG
|
||
|
||
“Channel number out of range.”
|
||
|
||
-- Macro: int EL2NSYNC
|
||
|
||
“Level 2 not synchronized.”
|
||
|
||
-- Macro: int EL3HLT
|
||
|
||
“Level 3 halted.”
|
||
|
||
-- Macro: int EL3RST
|
||
|
||
“Level 3 reset.”
|
||
|
||
-- Macro: int ELNRNG
|
||
|
||
“Link number out of range.”
|
||
|
||
-- Macro: int EUNATCH
|
||
|
||
“Protocol driver not attached.”
|
||
|
||
-- Macro: int ENOCSI
|
||
|
||
“No CSI structure available.”
|
||
|
||
-- Macro: int EL2HLT
|
||
|
||
“Level 2 halted.”
|
||
|
||
-- Macro: int EBADE
|
||
|
||
“Invalid exchange.”
|
||
|
||
-- Macro: int EBADR
|
||
|
||
“Invalid request descriptor.”
|
||
|
||
-- Macro: int EXFULL
|
||
|
||
“Exchange full.”
|
||
|
||
-- Macro: int ENOANO
|
||
|
||
“No anode.”
|
||
|
||
-- Macro: int EBADRQC
|
||
|
||
“Invalid request code.”
|
||
|
||
-- Macro: int EBADSLT
|
||
|
||
“Invalid slot.”
|
||
|
||
-- Macro: int EDEADLOCK
|
||
|
||
“File locking deadlock error.”
|
||
|
||
-- Macro: int EBFONT
|
||
|
||
“Bad font file format.”
|
||
|
||
-- Macro: int ENONET
|
||
|
||
“Machine is not on the network.”
|
||
|
||
-- Macro: int ENOPKG
|
||
|
||
“Package not installed.”
|
||
|
||
-- Macro: int EADV
|
||
|
||
“Advertise error.”
|
||
|
||
-- Macro: int ESRMNT
|
||
|
||
“Srmount error.”
|
||
|
||
-- Macro: int ECOMM
|
||
|
||
“Communication error on send.”
|
||
|
||
-- Macro: int EDOTDOT
|
||
|
||
“RFS specific error.”
|
||
|
||
-- Macro: int ENOTUNIQ
|
||
|
||
“Name not unique on network.”
|
||
|
||
-- Macro: int EBADFD
|
||
|
||
“File descriptor in bad state.”
|
||
|
||
-- Macro: int EREMCHG
|
||
|
||
“Remote address changed.”
|
||
|
||
-- Macro: int ELIBACC
|
||
|
||
“Can not access a needed shared library.”
|
||
|
||
-- Macro: int ELIBBAD
|
||
|
||
“Accessing a corrupted shared library.”
|
||
|
||
-- Macro: int ELIBSCN
|
||
|
||
“.lib section in a.out corrupted.”
|
||
|
||
-- Macro: int ELIBMAX
|
||
|
||
“Attempting to link in too many shared libraries.”
|
||
|
||
-- Macro: int ELIBEXEC
|
||
|
||
“Cannot exec a shared library directly.”
|
||
|
||
-- Macro: int ESTRPIPE
|
||
|
||
“Streams pipe error.”
|
||
|
||
-- Macro: int EUCLEAN
|
||
|
||
“Structure needs cleaning.”
|
||
|
||
-- Macro: int ENOTNAM
|
||
|
||
“Not a XENIX named type file.”
|
||
|
||
-- Macro: int ENAVAIL
|
||
|
||
“No XENIX semaphores available.”
|
||
|
||
-- Macro: int EISNAM
|
||
|
||
“Is a named type file.”
|
||
|
||
-- Macro: int EREMOTEIO
|
||
|
||
“Remote I/O error.”
|
||
|
||
-- Macro: int ENOMEDIUM
|
||
|
||
“No medium found.”
|
||
|
||
-- Macro: int EMEDIUMTYPE
|
||
|
||
“Wrong medium type.”
|
||
|
||
-- Macro: int ENOKEY
|
||
|
||
“Required key not available.”
|
||
|
||
-- Macro: int EKEYEXPIRED
|
||
|
||
“Key has expired.”
|
||
|
||
-- Macro: int EKEYREVOKED
|
||
|
||
“Key has been revoked.”
|
||
|
||
-- Macro: int EKEYREJECTED
|
||
|
||
“Key was rejected by service.”
|
||
|
||
-- Macro: int ERFKILL
|
||
|
||
“Operation not possible due to RF-kill.”
|
||
|
||
-- Macro: int EHWPOISON
|
||
|
||
“Memory page has hardware error.”
|
||
|
||
|
||
File: libc.info, Node: Error Messages, Prev: Error Codes, Up: Error Reporting
|
||
|
||
2.3 Error Messages
|
||
==================
|
||
|
||
The library has functions and variables designed to make it easy for
|
||
your program to report informative error messages in the customary
|
||
format about the failure of a library call. The functions ‘strerror’
|
||
and ‘perror’ give you the standard error message for a given error code;
|
||
the variable ‘program_invocation_short_name’ gives you convenient access
|
||
to the name of the program that encountered the error.
|
||
|
||
-- Function: char * strerror (int ERRNUM)
|
||
|
||
Preliminary: | MT-Unsafe race:strerror | AS-Unsafe heap i18n |
|
||
AC-Unsafe mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘strerror’ function maps the error code (*note Checking for
|
||
Errors::) specified by the ERRNUM argument to a descriptive error
|
||
message string. The return value is a pointer to this string.
|
||
|
||
The value ERRNUM normally comes from the variable ‘errno’.
|
||
|
||
You should not modify the string returned by ‘strerror’. Also, if
|
||
you make subsequent calls to ‘strerror’, the string might be
|
||
overwritten. (But it’s guaranteed that no library function ever
|
||
calls ‘strerror’ behind your back.)
|
||
|
||
The function ‘strerror’ is declared in ‘string.h’.
|
||
|
||
-- Function: char * strerror_r (int ERRNUM, char *BUF, size_t N)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe i18n | AC-Unsafe | *Note POSIX
|
||
Safety Concepts::.
|
||
|
||
The ‘strerror_r’ function works like ‘strerror’ but instead of
|
||
returning the error message in a statically allocated buffer shared
|
||
by all threads in the process, it returns a private copy for the
|
||
thread. This might be either some permanent global data or a
|
||
message string in the user supplied buffer starting at BUF with the
|
||
length of N bytes.
|
||
|
||
At most N characters are written (including the NUL byte) so it is
|
||
up to the user to select a buffer large enough.
|
||
|
||
This function should always be used in multi-threaded programs
|
||
since there is no way to guarantee the string returned by
|
||
‘strerror’ really belongs to the last call of the current thread.
|
||
|
||
The function ‘strerror_r’ is a GNU extension and it is declared in
|
||
‘string.h’.
|
||
|
||
-- Function: void perror (const char *MESSAGE)
|
||
|
||
Preliminary: | MT-Safe race:stderr | AS-Unsafe corrupt i18n heap
|
||
lock | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety
|
||
Concepts::.
|
||
|
||
This function prints an error message to the stream ‘stderr’; see
|
||
*note Standard Streams::. The orientation of ‘stderr’ is not
|
||
changed.
|
||
|
||
If you call ‘perror’ with a MESSAGE that is either a null pointer
|
||
or an empty string, ‘perror’ just prints the error message
|
||
corresponding to ‘errno’, adding a trailing newline.
|
||
|
||
If you supply a non-null MESSAGE argument, then ‘perror’ prefixes
|
||
its output with this string. It adds a colon and a space character
|
||
to separate the MESSAGE from the error string corresponding to
|
||
‘errno’.
|
||
|
||
The function ‘perror’ is declared in ‘stdio.h’.
|
||
|
||
‘strerror’ and ‘perror’ produce the exact same message for any given
|
||
error code; the precise text varies from system to system. With the GNU
|
||
C Library, the messages are fairly short; there are no multi-line
|
||
messages or embedded newlines. Each error message begins with a capital
|
||
letter and does not include any terminating punctuation.
|
||
|
||
Many programs that don’t read input from the terminal are designed to
|
||
exit if any system call fails. By convention, the error message from
|
||
such a program should start with the program’s name, sans directories.
|
||
You can find that name in the variable ‘program_invocation_short_name’;
|
||
the full file name is stored the variable ‘program_invocation_name’.
|
||
|
||
-- Variable: char * program_invocation_name
|
||
|
||
This variable’s value is the name that was used to invoke the
|
||
program running in the current process. It is the same as
|
||
‘argv[0]’. Note that this is not necessarily a useful file name;
|
||
often it contains no directory names. *Note Program Arguments::.
|
||
|
||
This variable is a GNU extension and is declared in ‘errno.h’.
|
||
|
||
-- Variable: char * program_invocation_short_name
|
||
|
||
This variable’s value is the name that was used to invoke the
|
||
program running in the current process, with directory names
|
||
removed. (That is to say, it is the same as
|
||
‘program_invocation_name’ minus everything up to the last slash, if
|
||
any.)
|
||
|
||
This variable is a GNU extension and is declared in ‘errno.h’.
|
||
|
||
The library initialization code sets up both of these variables
|
||
before calling ‘main’.
|
||
|
||
*Portability Note:* If you want your program to work with non-GNU
|
||
libraries, you must save the value of ‘argv[0]’ in ‘main’, and then
|
||
strip off the directory names yourself. We added these extensions to
|
||
make it possible to write self-contained error-reporting subroutines
|
||
that require no explicit cooperation from ‘main’.
|
||
|
||
Here is an example showing how to handle failure to open a file
|
||
correctly. The function ‘open_sesame’ tries to open the named file for
|
||
reading and returns a stream if successful. The ‘fopen’ library
|
||
function returns a null pointer if it couldn’t open the file for some
|
||
reason. In that situation, ‘open_sesame’ constructs an appropriate
|
||
error message using the ‘strerror’ function, and terminates the program.
|
||
If we were going to make some other library calls before passing the
|
||
error code to ‘strerror’, we’d have to save it in a local variable
|
||
instead, because those other library functions might overwrite ‘errno’
|
||
in the meantime.
|
||
|
||
#define _GNU_SOURCE
|
||
|
||
#include <errno.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
|
||
FILE *
|
||
open_sesame (char *name)
|
||
{
|
||
FILE *stream;
|
||
|
||
errno = 0;
|
||
stream = fopen (name, "r");
|
||
if (stream == NULL)
|
||
{
|
||
fprintf (stderr, "%s: Couldn't open file %s; %s\n",
|
||
program_invocation_short_name, name, strerror (errno));
|
||
exit (EXIT_FAILURE);
|
||
}
|
||
else
|
||
return stream;
|
||
}
|
||
|
||
Using ‘perror’ has the advantage that the function is portable and
|
||
available on all systems implementing ISO C. But often the text ‘perror’
|
||
generates is not what is wanted and there is no way to extend or change
|
||
what ‘perror’ does. The GNU coding standard, for instance, requires
|
||
error messages to be preceded by the program name and programs which
|
||
read some input files should provide information about the input file
|
||
name and the line number in case an error is encountered while reading
|
||
the file. For these occasions there are two functions available which
|
||
are widely used throughout the GNU project. These functions are
|
||
declared in ‘error.h’.
|
||
|
||
-- Function: void error (int STATUS, int ERRNUM, const char *FORMAT,
|
||
...)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap i18n |
|
||
AC-Safe | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘error’ function can be used to report general problems during
|
||
program execution. The FORMAT argument is a format string just
|
||
like those given to the ‘printf’ family of functions. The
|
||
arguments required for the format can follow the FORMAT parameter.
|
||
Just like ‘perror’, ‘error’ also can report an error code in
|
||
textual form. But unlike ‘perror’ the error value is explicitly
|
||
passed to the function in the ERRNUM parameter. This eliminates
|
||
the problem mentioned above that the error reporting function must
|
||
be called immediately after the function causing the error since
|
||
otherwise ‘errno’ might have a different value.
|
||
|
||
‘error’ prints first the program name. If the application defined
|
||
a global variable ‘error_print_progname’ and points it to a
|
||
function this function will be called to print the program name.
|
||
Otherwise the string from the global variable ‘program_name’ is
|
||
used. The program name is followed by a colon and a space which in
|
||
turn is followed by the output produced by the format string. If
|
||
the ERRNUM parameter is non-zero the format string output is
|
||
followed by a colon and a space, followed by the error message for
|
||
the error code ERRNUM. In any case is the output terminated with a
|
||
newline.
|
||
|
||
The output is directed to the ‘stderr’ stream. If the ‘stderr’
|
||
wasn’t oriented before the call it will be narrow-oriented
|
||
afterwards.
|
||
|
||
The function will return unless the STATUS parameter has a non-zero
|
||
value. In this case the function will call ‘exit’ with the STATUS
|
||
value for its parameter and therefore never return. If ‘error’
|
||
returns, the global variable ‘error_message_count’ is incremented
|
||
by one to keep track of the number of errors reported.
|
||
|
||
-- Function: void error_at_line (int STATUS, int ERRNUM, const char
|
||
*FNAME, unsigned int LINENO, const char *FORMAT, ...)
|
||
|
||
Preliminary: | MT-Unsafe race:error_at_line/error_one_per_line
|
||
locale | AS-Unsafe corrupt heap i18n | AC-Unsafe
|
||
corrupt/error_one_per_line | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘error_at_line’ function is very similar to the ‘error’
|
||
function. The only differences are the additional parameters FNAME
|
||
and LINENO. The handling of the other parameters is identical to
|
||
that of ‘error’ except that between the program name and the string
|
||
generated by the format string additional text is inserted.
|
||
|
||
Directly following the program name a colon, followed by the file
|
||
name pointed to by FNAME, another colon, and the value of LINENO is
|
||
printed.
|
||
|
||
This additional output of course is meant to be used to locate an
|
||
error in an input file (like a programming language source code
|
||
file etc).
|
||
|
||
If the global variable ‘error_one_per_line’ is set to a non-zero
|
||
value ‘error_at_line’ will avoid printing consecutive messages for
|
||
the same file and line. Repetition which are not directly
|
||
following each other are not caught.
|
||
|
||
Just like ‘error’ this function only returns if STATUS is zero.
|
||
Otherwise ‘exit’ is called with the non-zero value. If ‘error’
|
||
returns, the global variable ‘error_message_count’ is incremented
|
||
by one to keep track of the number of errors reported.
|
||
|
||
As mentioned above, the ‘error’ and ‘error_at_line’ functions can be
|
||
customized by defining a variable named ‘error_print_progname’.
|
||
|
||
-- Variable: void (*error_print_progname) (void)
|
||
|
||
If the ‘error_print_progname’ variable is defined to a non-zero
|
||
value the function pointed to is called by ‘error’ or
|
||
‘error_at_line’. It is expected to print the program name or do
|
||
something similarly useful.
|
||
|
||
The function is expected to print to the ‘stderr’ stream and must
|
||
be able to handle whatever orientation the stream has.
|
||
|
||
The variable is global and shared by all threads.
|
||
|
||
-- Variable: unsigned int error_message_count
|
||
|
||
The ‘error_message_count’ variable is incremented whenever one of
|
||
the functions ‘error’ or ‘error_at_line’ returns. The variable is
|
||
global and shared by all threads.
|
||
|
||
-- Variable: int error_one_per_line
|
||
|
||
The ‘error_one_per_line’ variable influences only ‘error_at_line’.
|
||
Normally the ‘error_at_line’ function creates output for every
|
||
invocation. If ‘error_one_per_line’ is set to a non-zero value
|
||
‘error_at_line’ keeps track of the last file name and line number
|
||
for which an error was reported and avoids directly following
|
||
messages for the same file and line. This variable is global and
|
||
shared by all threads.
|
||
|
||
A program which read some input file and reports errors in it could look
|
||
like this:
|
||
|
||
{
|
||
char *line = NULL;
|
||
size_t len = 0;
|
||
unsigned int lineno = 0;
|
||
|
||
error_message_count = 0;
|
||
while (! feof_unlocked (fp))
|
||
{
|
||
ssize_t n = getline (&line, &len, fp);
|
||
if (n <= 0)
|
||
/* End of file or error. */
|
||
break;
|
||
++lineno;
|
||
|
||
/* Process the line. */
|
||
...
|
||
|
||
if (Detect error in line)
|
||
error_at_line (0, errval, filename, lineno,
|
||
"some error text %s", some_variable);
|
||
}
|
||
|
||
if (error_message_count != 0)
|
||
error (EXIT_FAILURE, 0, "%u errors found", error_message_count);
|
||
}
|
||
|
||
‘error’ and ‘error_at_line’ are clearly the functions of choice and
|
||
enable the programmer to write applications which follow the GNU coding
|
||
standard. The GNU C Library additionally contains functions which are
|
||
used in BSD for the same purpose. These functions are declared in
|
||
‘err.h’. It is generally advised to not use these functions. They are
|
||
included only for compatibility.
|
||
|
||
-- Function: void warn (const char *FORMAT, ...)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap i18n |
|
||
AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘warn’ function is roughly equivalent to a call like
|
||
error (0, errno, format, the parameters)
|
||
except that the global variables ‘error’ respects and modifies are
|
||
not used.
|
||
|
||
-- Function: void vwarn (const char *FORMAT, va_list AP)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap i18n |
|
||
AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘vwarn’ function is just like ‘warn’ except that the parameters
|
||
for the handling of the format string FORMAT are passed in as a
|
||
value of type ‘va_list’.
|
||
|
||
-- Function: void warnx (const char *FORMAT, ...)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
|
||
corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘warnx’ function is roughly equivalent to a call like
|
||
error (0, 0, format, the parameters)
|
||
except that the global variables ‘error’ respects and modifies are
|
||
not used. The difference to ‘warn’ is that no error number string
|
||
is printed.
|
||
|
||
-- Function: void vwarnx (const char *FORMAT, va_list AP)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
|
||
corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘vwarnx’ function is just like ‘warnx’ except that the
|
||
parameters for the handling of the format string FORMAT are passed
|
||
in as a value of type ‘va_list’.
|
||
|
||
-- Function: void err (int STATUS, const char *FORMAT, ...)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap i18n |
|
||
AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘err’ function is roughly equivalent to a call like
|
||
error (status, errno, format, the parameters)
|
||
except that the global variables ‘error’ respects and modifies are
|
||
not used and that the program is exited even if STATUS is zero.
|
||
|
||
-- Function: void verr (int STATUS, const char *FORMAT, va_list AP)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap i18n |
|
||
AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘verr’ function is just like ‘err’ except that the parameters
|
||
for the handling of the format string FORMAT are passed in as a
|
||
value of type ‘va_list’.
|
||
|
||
-- Function: void errx (int STATUS, const char *FORMAT, ...)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
|
||
corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘errx’ function is roughly equivalent to a call like
|
||
error (status, 0, format, the parameters)
|
||
except that the global variables ‘error’ respects and modifies are
|
||
not used and that the program is exited even if STATUS is zero.
|
||
The difference to ‘err’ is that no error number string is printed.
|
||
|
||
-- Function: void verrx (int STATUS, const char *FORMAT, va_list AP)
|
||
|
||
Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe
|
||
corrupt lock mem | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘verrx’ function is just like ‘errx’ except that the parameters
|
||
for the handling of the format string FORMAT are passed in as a
|
||
value of type ‘va_list’.
|
||
|
||
|
||
File: libc.info, Node: Memory, Next: Character Handling, Prev: Error Reporting, Up: Top
|
||
|
||
3 Virtual Memory Allocation And Paging
|
||
**************************************
|
||
|
||
This chapter describes how processes manage and use memory in a system
|
||
that uses the GNU C Library.
|
||
|
||
The GNU C Library has several functions for dynamically allocating
|
||
virtual memory in various ways. They vary in generality and in
|
||
efficiency. The library also provides functions for controlling paging
|
||
and allocation of real memory.
|
||
|
||
* Menu:
|
||
|
||
* Memory Concepts:: An introduction to concepts and terminology.
|
||
* Memory Allocation:: Allocating storage for your program data
|
||
* Resizing the Data Segment:: ‘brk’, ‘sbrk’
|
||
* Memory Protection:: Controlling access to memory regions.
|
||
* Locking Pages:: Preventing page faults
|
||
|
||
Memory mapped I/O is not discussed in this chapter. *Note
|
||
Memory-mapped I/O::.
|
||
|
||
|
||
File: libc.info, Node: Memory Concepts, Next: Memory Allocation, Up: Memory
|
||
|
||
3.1 Process Memory Concepts
|
||
===========================
|
||
|
||
One of the most basic resources a process has available to it is memory.
|
||
There are a lot of different ways systems organize memory, but in a
|
||
typical one, each process has one linear virtual address space, with
|
||
addresses running from zero to some huge maximum. It need not be
|
||
contiguous; i.e., not all of these addresses actually can be used to
|
||
store data.
|
||
|
||
The virtual memory is divided into pages (4 kilobytes is typical).
|
||
Backing each page of virtual memory is a page of real memory (called a
|
||
“frame”) or some secondary storage, usually disk space. The disk space
|
||
might be swap space or just some ordinary disk file. Actually, a page
|
||
of all zeroes sometimes has nothing at all backing it – there’s just a
|
||
flag saying it is all zeroes.
|
||
|
||
The same frame of real memory or backing store can back multiple
|
||
virtual pages belonging to multiple processes. This is normally the
|
||
case, for example, with virtual memory occupied by GNU C Library code.
|
||
The same real memory frame containing the ‘printf’ function backs a
|
||
virtual memory page in each of the existing processes that has a
|
||
‘printf’ call in its program.
|
||
|
||
In order for a program to access any part of a virtual page, the page
|
||
must at that moment be backed by (“connected to”) a real frame. But
|
||
because there is usually a lot more virtual memory than real memory, the
|
||
pages must move back and forth between real memory and backing store
|
||
regularly, coming into real memory when a process needs to access them
|
||
and then retreating to backing store when not needed anymore. This
|
||
movement is called “paging”.
|
||
|
||
When a program attempts to access a page which is not at that moment
|
||
backed by real memory, this is known as a “page fault”. When a page
|
||
fault occurs, the kernel suspends the process, places the page into a
|
||
real page frame (this is called “paging in” or “faulting in”), then
|
||
resumes the process so that from the process’ point of view, the page
|
||
was in real memory all along. In fact, to the process, all pages always
|
||
seem to be in real memory. Except for one thing: the elapsed execution
|
||
time of an instruction that would normally be a few nanoseconds is
|
||
suddenly much, much, longer (because the kernel normally has to do I/O
|
||
to complete the page-in). For programs sensitive to that, the functions
|
||
described in *note Locking Pages:: can control it.
|
||
|
||
Within each virtual address space, a process has to keep track of
|
||
what is at which addresses, and that process is called memory
|
||
allocation. Allocation usually brings to mind meting out scarce
|
||
resources, but in the case of virtual memory, that’s not a major goal,
|
||
because there is generally much more of it than anyone needs. Memory
|
||
allocation within a process is mainly just a matter of making sure that
|
||
the same byte of memory isn’t used to store two different things.
|
||
|
||
Processes allocate memory in two major ways: by exec and
|
||
programmatically. Actually, forking is a third way, but it’s not very
|
||
interesting. *Note Creating a Process::.
|
||
|
||
Exec is the operation of creating a virtual address space for a
|
||
process, loading its basic program into it, and executing the program.
|
||
It is done by the “exec” family of functions (e.g. ‘execl’). The
|
||
operation takes a program file (an executable), it allocates space to
|
||
load all the data in the executable, loads it, and transfers control to
|
||
it. That data is most notably the instructions of the program (the
|
||
“text”), but also literals and constants in the program and even some
|
||
variables: C variables with the static storage class (*note Memory
|
||
Allocation and C::).
|
||
|
||
Once that program begins to execute, it uses programmatic allocation
|
||
to gain additional memory. In a C program with the GNU C Library, there
|
||
are two kinds of programmatic allocation: automatic and dynamic. *Note
|
||
Memory Allocation and C::.
|
||
|
||
Memory-mapped I/O is another form of dynamic virtual memory
|
||
allocation. Mapping memory to a file means declaring that the contents
|
||
of certain range of a process’ addresses shall be identical to the
|
||
contents of a specified regular file. The system makes the virtual
|
||
memory initially contain the contents of the file, and if you modify the
|
||
memory, the system writes the same modification to the file. Note that
|
||
due to the magic of virtual memory and page faults, there is no reason
|
||
for the system to do I/O to read the file, or allocate real memory for
|
||
its contents, until the program accesses the virtual memory. *Note
|
||
Memory-mapped I/O::.
|
||
|
||
Just as it programmatically allocates memory, the program can
|
||
programmatically deallocate (“free”) it. You can’t free the memory that
|
||
was allocated by exec. When the program exits or execs, you might say
|
||
that all its memory gets freed, but since in both cases the address
|
||
space ceases to exist, the point is really moot. *Note Program
|
||
Termination::.
|
||
|
||
A process’ virtual address space is divided into segments. A segment
|
||
is a contiguous range of virtual addresses. Three important segments
|
||
are:
|
||
|
||
•
|
||
The “text segment” contains a program’s instructions and literals
|
||
and static constants. It is allocated by exec and stays the same
|
||
size for the life of the virtual address space.
|
||
|
||
• The “data segment” is working storage for the program. It can be
|
||
preallocated and preloaded by exec and the process can extend or
|
||
shrink it by calling functions as described in *Note Resizing the
|
||
Data Segment::. Its lower end is fixed.
|
||
|
||
• The “stack segment” contains a program stack. It grows as the
|
||
stack grows, but doesn’t shrink when the stack shrinks.
|
||
|
||
|
||
File: libc.info, Node: Memory Allocation, Next: Resizing the Data Segment, Prev: Memory Concepts, Up: Memory
|
||
|
||
3.2 Allocating Storage For Program Data
|
||
=======================================
|
||
|
||
This section covers how ordinary programs manage storage for their data,
|
||
including the famous ‘malloc’ function and some fancier facilities
|
||
special to the GNU C Library and GNU Compiler.
|
||
|
||
* Menu:
|
||
|
||
* Memory Allocation and C:: How to get different kinds of allocation in C.
|
||
* The GNU Allocator:: An overview of the GNU ‘malloc’
|
||
implementation.
|
||
* Unconstrained Allocation:: The ‘malloc’ facility allows fully general
|
||
dynamic allocation.
|
||
* Allocation Debugging:: Finding memory leaks and not freed memory.
|
||
* Replacing malloc:: Using your own ‘malloc’-style allocator.
|
||
* Obstacks:: Obstacks are less general than malloc
|
||
but more efficient and convenient.
|
||
* Variable Size Automatic:: Allocation of variable-sized blocks
|
||
of automatic storage that are freed when the
|
||
calling function returns.
|
||
|
||
|
||
File: libc.info, Node: Memory Allocation and C, Next: The GNU Allocator, Up: Memory Allocation
|
||
|
||
3.2.1 Memory Allocation in C Programs
|
||
-------------------------------------
|
||
|
||
The C language supports two kinds of memory allocation through the
|
||
variables in C programs:
|
||
|
||
• “Static allocation” is what happens when you declare a static or
|
||
global variable. Each static or global variable defines one block
|
||
of space, of a fixed size. The space is allocated once, when your
|
||
program is started (part of the exec operation), and is never
|
||
freed.
|
||
|
||
• “Automatic allocation” happens when you declare an automatic
|
||
variable, such as a function argument or a local variable. The
|
||
space for an automatic variable is allocated when the compound
|
||
statement containing the declaration is entered, and is freed when
|
||
that compound statement is exited.
|
||
|
||
In GNU C, the size of the automatic storage can be an expression
|
||
that varies. In other C implementations, it must be a constant.
|
||
|
||
A third important kind of memory allocation, “dynamic allocation”, is
|
||
not supported by C variables but is available via GNU C Library
|
||
functions.
|
||
|
||
3.2.1.1 Dynamic Memory Allocation
|
||
.................................
|
||
|
||
“Dynamic memory allocation” is a technique in which programs determine
|
||
as they are running where to store some information. You need dynamic
|
||
allocation when the amount of memory you need, or how long you continue
|
||
to need it, depends on factors that are not known before the program
|
||
runs.
|
||
|
||
For example, you may need a block to store a line read from an input
|
||
file; since there is no limit to how long a line can be, you must
|
||
allocate the memory dynamically and make it dynamically larger as you
|
||
read more of the line.
|
||
|
||
Or, you may need a block for each record or each definition in the
|
||
input data; since you can’t know in advance how many there will be, you
|
||
must allocate a new block for each record or definition as you read it.
|
||
|
||
When you use dynamic allocation, the allocation of a block of memory
|
||
is an action that the program requests explicitly. You call a function
|
||
or macro when you want to allocate space, and specify the size with an
|
||
argument. If you want to free the space, you do so by calling another
|
||
function or macro. You can do these things whenever you want, as often
|
||
as you want.
|
||
|
||
Dynamic allocation is not supported by C variables; there is no
|
||
storage class “dynamic”, and there can never be a C variable whose value
|
||
is stored in dynamically allocated space. The only way to get
|
||
dynamically allocated memory is via a system call (which is generally
|
||
via a GNU C Library function call), and the only way to refer to
|
||
dynamically allocated space is through a pointer. Because it is less
|
||
convenient, and because the actual process of dynamic allocation
|
||
requires more computation time, programmers generally use dynamic
|
||
allocation only when neither static nor automatic allocation will serve.
|
||
|
||
For example, if you want to allocate dynamically some space to hold a
|
||
‘struct foobar’, you cannot declare a variable of type ‘struct foobar’
|
||
whose contents are the dynamically allocated space. But you can declare
|
||
a variable of pointer type ‘struct foobar *’ and assign it the address
|
||
of the space. Then you can use the operators ‘*’ and ‘->’ on this
|
||
pointer variable to refer to the contents of the space:
|
||
|
||
{
|
||
struct foobar *ptr
|
||
= (struct foobar *) malloc (sizeof (struct foobar));
|
||
ptr->name = x;
|
||
ptr->next = current_foobar;
|
||
current_foobar = ptr;
|
||
}
|
||
|
||
|
||
File: libc.info, Node: The GNU Allocator, Next: Unconstrained Allocation, Prev: Memory Allocation and C, Up: Memory Allocation
|
||
|
||
3.2.2 The GNU Allocator
|
||
-----------------------
|
||
|
||
The ‘malloc’ implementation in the GNU C Library is derived from
|
||
ptmalloc (pthreads malloc), which in turn is derived from dlmalloc (Doug
|
||
Lea malloc). This malloc may allocate memory in two different ways
|
||
depending on their size and certain parameters that may be controlled by
|
||
users. The most common way is to allocate portions of memory (called
|
||
chunks) from a large contiguous area of memory and manage these areas to
|
||
optimize their use and reduce wastage in the form of unusable chunks.
|
||
Traditionally the system heap was set up to be the one large memory area
|
||
but the GNU C Library ‘malloc’ implementation maintains multiple such
|
||
areas to optimize their use in multi-threaded applications. Each such
|
||
area is internally referred to as an “arena”.
|
||
|
||
As opposed to other versions, the ‘malloc’ in the GNU C Library does
|
||
not round up chunk sizes to powers of two, neither for large nor for
|
||
small sizes. Neighboring chunks can be coalesced on a ‘free’ no matter
|
||
what their size is. This makes the implementation suitable for all
|
||
kinds of allocation patterns without generally incurring high memory
|
||
waste through fragmentation. The presence of multiple arenas allows
|
||
multiple threads to allocate memory simultaneously in separate arenas,
|
||
thus improving performance.
|
||
|
||
The other way of memory allocation is for very large blocks, i.e.
|
||
much larger than a page. These requests are allocated with ‘mmap’
|
||
(anonymous or via ‘/dev/zero’; *note Memory-mapped I/O::)). This has
|
||
the great advantage that these chunks are returned to the system
|
||
immediately when they are freed. Therefore, it cannot happen that a
|
||
large chunk becomes “locked” in between smaller ones and even after
|
||
calling ‘free’ wastes memory. The size threshold for ‘mmap’ to be used
|
||
is dynamic and gets adjusted according to allocation patterns of the
|
||
program. ‘mallopt’ can be used to statically adjust the threshold using
|
||
‘M_MMAP_THRESHOLD’ and the use of ‘mmap’ can be disabled completely with
|
||
‘M_MMAP_MAX’; *note Malloc Tunable Parameters::.
|
||
|
||
A more detailed technical description of the GNU Allocator is
|
||
maintained in the GNU C Library wiki. See
|
||
<https://sourceware.org/glibc/wiki/MallocInternals>.
|
||
|
||
It is possible to use your own custom ‘malloc’ instead of the
|
||
built-in allocator provided by the GNU C Library. *Note Replacing
|
||
malloc::.
|
||
|
||
|
||
File: libc.info, Node: Unconstrained Allocation, Next: Allocation Debugging, Prev: The GNU Allocator, Up: Memory Allocation
|
||
|
||
3.2.3 Unconstrained Allocation
|
||
------------------------------
|
||
|
||
The most general dynamic allocation facility is ‘malloc’. It allows you
|
||
to allocate blocks of memory of any size at any time, make them bigger
|
||
or smaller at any time, and free the blocks individually at any time (or
|
||
never).
|
||
|
||
* Menu:
|
||
|
||
* Basic Allocation:: Simple use of ‘malloc’.
|
||
* Malloc Examples:: Examples of ‘malloc’. ‘xmalloc’.
|
||
* Freeing after Malloc:: Use ‘free’ to free a block you
|
||
got with ‘malloc’.
|
||
* Changing Block Size:: Use ‘realloc’ to make a block
|
||
bigger or smaller.
|
||
* Allocating Cleared Space:: Use ‘calloc’ to allocate a
|
||
block and clear it.
|
||
* Aligned Memory Blocks:: Allocating specially aligned memory.
|
||
* Malloc Tunable Parameters:: Use ‘mallopt’ to adjust allocation
|
||
parameters.
|
||
* Heap Consistency Checking:: Automatic checking for errors.
|
||
* Hooks for Malloc:: You can use these hooks for debugging
|
||
programs that use ‘malloc’.
|
||
* Statistics of Malloc:: Getting information about how much
|
||
memory your program is using.
|
||
* Summary of Malloc:: Summary of ‘malloc’ and related functions.
|
||
|
||
|
||
File: libc.info, Node: Basic Allocation, Next: Malloc Examples, Up: Unconstrained Allocation
|
||
|
||
3.2.3.1 Basic Memory Allocation
|
||
...............................
|
||
|
||
To allocate a block of memory, call ‘malloc’. The prototype for this
|
||
function is in ‘stdlib.h’.
|
||
|
||
-- Function: void * malloc (size_t SIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
This function returns a pointer to a newly allocated block SIZE
|
||
bytes long, or a null pointer if the block could not be allocated.
|
||
|
||
The contents of the block are undefined; you must initialize it
|
||
yourself (or use ‘calloc’ instead; *note Allocating Cleared Space::).
|
||
Normally you would cast the value as a pointer to the kind of object
|
||
that you want to store in the block. Here we show an example of doing
|
||
so, and of initializing the space with zeros using the library function
|
||
‘memset’ (*note Copying Strings and Arrays::):
|
||
|
||
struct foo *ptr;
|
||
...
|
||
ptr = (struct foo *) malloc (sizeof (struct foo));
|
||
if (ptr == 0) abort ();
|
||
memset (ptr, 0, sizeof (struct foo));
|
||
|
||
You can store the result of ‘malloc’ into any pointer variable
|
||
without a cast, because ISO C automatically converts the type ‘void *’
|
||
to another type of pointer when necessary. But the cast is necessary in
|
||
contexts other than assignment operators or if you might want your code
|
||
to run in traditional C.
|
||
|
||
Remember that when allocating space for a string, the argument to
|
||
‘malloc’ must be one plus the length of the string. This is because a
|
||
string is terminated with a null character that doesn’t count in the
|
||
“length” of the string but does need space. For example:
|
||
|
||
char *ptr;
|
||
...
|
||
ptr = (char *) malloc (length + 1);
|
||
|
||
*Note Representation of Strings::, for more information about this.
|
||
|
||
|
||
File: libc.info, Node: Malloc Examples, Next: Freeing after Malloc, Prev: Basic Allocation, Up: Unconstrained Allocation
|
||
|
||
3.2.3.2 Examples of ‘malloc’
|
||
............................
|
||
|
||
If no more space is available, ‘malloc’ returns a null pointer. You
|
||
should check the value of _every_ call to ‘malloc’. It is useful to
|
||
write a subroutine that calls ‘malloc’ and reports an error if the value
|
||
is a null pointer, returning only if the value is nonzero. This
|
||
function is conventionally called ‘xmalloc’. Here it is:
|
||
|
||
void *
|
||
xmalloc (size_t size)
|
||
{
|
||
void *value = malloc (size);
|
||
if (value == 0)
|
||
fatal ("virtual memory exhausted");
|
||
return value;
|
||
}
|
||
|
||
Here is a real example of using ‘malloc’ (by way of ‘xmalloc’). The
|
||
function ‘savestring’ will copy a sequence of characters into a newly
|
||
allocated null-terminated string:
|
||
|
||
char *
|
||
savestring (const char *ptr, size_t len)
|
||
{
|
||
char *value = (char *) xmalloc (len + 1);
|
||
value[len] = '\0';
|
||
return (char *) memcpy (value, ptr, len);
|
||
}
|
||
|
||
The block that ‘malloc’ gives you is guaranteed to be aligned so that
|
||
it can hold any type of data. On GNU systems, the address is always a
|
||
multiple of eight on 32-bit systems, and a multiple of 16 on 64-bit
|
||
systems. Only rarely is any higher boundary (such as a page boundary)
|
||
necessary; for those cases, use ‘aligned_alloc’ or ‘posix_memalign’
|
||
(*note Aligned Memory Blocks::).
|
||
|
||
Note that the memory located after the end of the block is likely to
|
||
be in use for something else; perhaps a block already allocated by
|
||
another call to ‘malloc’. If you attempt to treat the block as longer
|
||
than you asked for it to be, you are liable to destroy the data that
|
||
‘malloc’ uses to keep track of its blocks, or you may destroy the
|
||
contents of another block. If you have already allocated a block and
|
||
discover you want it to be bigger, use ‘realloc’ (*note Changing Block
|
||
Size::).
|
||
|
||
|
||
File: libc.info, Node: Freeing after Malloc, Next: Changing Block Size, Prev: Malloc Examples, Up: Unconstrained Allocation
|
||
|
||
3.2.3.3 Freeing Memory Allocated with ‘malloc’
|
||
..............................................
|
||
|
||
When you no longer need a block that you got with ‘malloc’, use the
|
||
function ‘free’ to make the block available to be allocated again. The
|
||
prototype for this function is in ‘stdlib.h’.
|
||
|
||
-- Function: void free (void *PTR)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘free’ function deallocates the block of memory pointed at by
|
||
PTR.
|
||
|
||
Freeing a block alters the contents of the block. *Do not expect to
|
||
find any data (such as a pointer to the next block in a chain of blocks)
|
||
in the block after freeing it.* Copy whatever you need out of the block
|
||
before freeing it! Here is an example of the proper way to free all the
|
||
blocks in a chain, and the strings that they point to:
|
||
|
||
struct chain
|
||
{
|
||
struct chain *next;
|
||
char *name;
|
||
}
|
||
|
||
void
|
||
free_chain (struct chain *chain)
|
||
{
|
||
while (chain != 0)
|
||
{
|
||
struct chain *next = chain->next;
|
||
free (chain->name);
|
||
free (chain);
|
||
chain = next;
|
||
}
|
||
}
|
||
|
||
Occasionally, ‘free’ can actually return memory to the operating
|
||
system and make the process smaller. Usually, all it can do is allow a
|
||
later call to ‘malloc’ to reuse the space. In the meantime, the space
|
||
remains in your program as part of a free-list used internally by
|
||
‘malloc’.
|
||
|
||
There is no point in freeing blocks at the end of a program, because
|
||
all of the program’s space is given back to the system when the process
|
||
terminates.
|
||
|
||
|
||
File: libc.info, Node: Changing Block Size, Next: Allocating Cleared Space, Prev: Freeing after Malloc, Up: Unconstrained Allocation
|
||
|
||
3.2.3.4 Changing the Size of a Block
|
||
....................................
|
||
|
||
Often you do not know for certain how big a block you will ultimately
|
||
need at the time you must begin to use the block. For example, the
|
||
block might be a buffer that you use to hold a line being read from a
|
||
file; no matter how long you make the buffer initially, you may
|
||
encounter a line that is longer.
|
||
|
||
You can make the block longer by calling ‘realloc’ or ‘reallocarray’.
|
||
These functions are declared in ‘stdlib.h’.
|
||
|
||
-- Function: void * realloc (void *PTR, size_t NEWSIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘realloc’ function changes the size of the block whose address
|
||
is PTR to be NEWSIZE.
|
||
|
||
Since the space after the end of the block may be in use, ‘realloc’
|
||
may find it necessary to copy the block to a new address where more
|
||
free space is available. The value of ‘realloc’ is the new address
|
||
of the block. If the block needs to be moved, ‘realloc’ copies the
|
||
old contents.
|
||
|
||
If you pass a null pointer for PTR, ‘realloc’ behaves just like
|
||
‘malloc (NEWSIZE)’. This can be convenient, but beware that older
|
||
implementations (before ISO C) may not support this behavior, and
|
||
will probably crash when ‘realloc’ is passed a null pointer.
|
||
|
||
-- Function: void * reallocarray (void *PTR, size_t NMEMB, size_t SIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘reallocarray’ function changes the size of the block whose
|
||
address is PTR to be long enough to contain a vector of NMEMB
|
||
elements, each of size SIZE. It is equivalent to ‘realloc (PTR,
|
||
NMEMB * SIZE)’, except that ‘reallocarray’ fails safely if the
|
||
multiplication overflows, by setting ‘errno’ to ‘ENOMEM’, returning
|
||
a null pointer, and leaving the original block unchanged.
|
||
|
||
‘reallocarray’ should be used instead of ‘realloc’ when the new
|
||
size of the allocated block is the result of a multiplication that
|
||
might overflow.
|
||
|
||
*Portability Note:* This function is not part of any standard. It
|
||
was first introduced in OpenBSD 5.6.
|
||
|
||
Like ‘malloc’, ‘realloc’ and ‘reallocarray’ may return a null pointer
|
||
if no memory space is available to make the block bigger. When this
|
||
happens, the original block is untouched; it has not been modified or
|
||
relocated.
|
||
|
||
In most cases it makes no difference what happens to the original
|
||
block when ‘realloc’ fails, because the application program cannot
|
||
continue when it is out of memory, and the only thing to do is to give a
|
||
fatal error message. Often it is convenient to write and use a
|
||
subroutine, conventionally called ‘xrealloc’, that takes care of the
|
||
error message as ‘xmalloc’ does for ‘malloc’:
|
||
|
||
void *
|
||
xrealloc (void *ptr, size_t size)
|
||
{
|
||
void *value = realloc (ptr, size);
|
||
if (value == 0)
|
||
fatal ("Virtual memory exhausted");
|
||
return value;
|
||
}
|
||
|
||
You can also use ‘realloc’ or ‘reallocarray’ to make a block smaller.
|
||
The reason you would do this is to avoid tying up a lot of memory space
|
||
when only a little is needed. In several allocation implementations,
|
||
making a block smaller sometimes necessitates copying it, so it can fail
|
||
if no other space is available.
|
||
|
||
If the new size you specify is the same as the old size, ‘realloc’
|
||
and ‘reallocarray’ are guaranteed to change nothing and return the same
|
||
address that you gave.
|
||
|
||
|
||
File: libc.info, Node: Allocating Cleared Space, Next: Aligned Memory Blocks, Prev: Changing Block Size, Up: Unconstrained Allocation
|
||
|
||
3.2.3.5 Allocating Cleared Space
|
||
................................
|
||
|
||
The function ‘calloc’ allocates memory and clears it to zero. It is
|
||
declared in ‘stdlib.h’.
|
||
|
||
-- Function: void * calloc (size_t COUNT, size_t ELTSIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
This function allocates a block long enough to contain a vector of
|
||
COUNT elements, each of size ELTSIZE. Its contents are cleared to
|
||
zero before ‘calloc’ returns.
|
||
|
||
You could define ‘calloc’ as follows:
|
||
|
||
void *
|
||
calloc (size_t count, size_t eltsize)
|
||
{
|
||
size_t size = count * eltsize;
|
||
void *value = malloc (size);
|
||
if (value != 0)
|
||
memset (value, 0, size);
|
||
return value;
|
||
}
|
||
|
||
But in general, it is not guaranteed that ‘calloc’ calls ‘malloc’
|
||
internally. Therefore, if an application provides its own
|
||
‘malloc’/‘realloc’/‘free’ outside the C library, it should always define
|
||
‘calloc’, too.
|
||
|
||
|
||
File: libc.info, Node: Aligned Memory Blocks, Next: Malloc Tunable Parameters, Prev: Allocating Cleared Space, Up: Unconstrained Allocation
|
||
|
||
3.2.3.6 Allocating Aligned Memory Blocks
|
||
........................................
|
||
|
||
The address of a block returned by ‘malloc’ or ‘realloc’ in GNU systems
|
||
is always a multiple of eight (or sixteen on 64-bit systems). If you
|
||
need a block whose address is a multiple of a higher power of two than
|
||
that, use ‘aligned_alloc’ or ‘posix_memalign’. ‘aligned_alloc’ and
|
||
‘posix_memalign’ are declared in ‘stdlib.h’.
|
||
|
||
-- Function: void * aligned_alloc (size_t ALIGNMENT, size_t SIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘aligned_alloc’ function allocates a block of SIZE bytes whose
|
||
address is a multiple of ALIGNMENT. The ALIGNMENT must be a power
|
||
of two and SIZE must be a multiple of ALIGNMENT.
|
||
|
||
The ‘aligned_alloc’ function returns a null pointer on error and
|
||
sets ‘errno’ to one of the following values:
|
||
|
||
‘ENOMEM’
|
||
There was insufficient memory available to satisfy the
|
||
request.
|
||
|
||
‘EINVAL’
|
||
ALIGNMENT is not a power of two.
|
||
|
||
This function was introduced in ISO C11 and hence may have
|
||
better portability to modern non-POSIX systems than
|
||
‘posix_memalign’.
|
||
|
||
-- Function: void * memalign (size_t BOUNDARY, size_t SIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘memalign’ function allocates a block of SIZE bytes whose
|
||
address is a multiple of BOUNDARY. The BOUNDARY must be a power of
|
||
two! The function ‘memalign’ works by allocating a somewhat larger
|
||
block, and then returning an address within the block that is on
|
||
the specified boundary.
|
||
|
||
The ‘memalign’ function returns a null pointer on error and sets
|
||
‘errno’ to one of the following values:
|
||
|
||
‘ENOMEM’
|
||
There was insufficient memory available to satisfy the
|
||
request.
|
||
|
||
‘EINVAL’
|
||
BOUNDARY is not a power of two.
|
||
|
||
The ‘memalign’ function is obsolete and ‘aligned_alloc’ or
|
||
‘posix_memalign’ should be used instead.
|
||
|
||
-- Function: int posix_memalign (void **MEMPTR, size_t ALIGNMENT,
|
||
size_t SIZE)
|
||
|
||
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem |
|
||
*Note POSIX Safety Concepts::.
|
||
|
||
The ‘posix_memalign’ function is similar to the ‘memalign’ function
|
||
in that it returns a buffer of SIZE bytes aligned to a multiple of
|
||
ALIGNMENT. But it adds one requirement to the parameter ALIGNMENT:
|
||
the value must be a power of two multiple of ‘sizeof (void *)’.
|
||
|
||
If the function succeeds in allocation memory a pointer to the
|
||
allocated memory is returned in ‘*MEMPTR’ and the return value is
|
||
zero. Otherwise the function returns an error value indicating the
|
||
problem. The possible error values returned are:
|
||
|
||
‘ENOMEM’
|
||
There was insufficient memory available to satisfy the
|
||
request.
|
||
|
||
‘EINVAL’
|
||
ALIGNMENT is not a power of two multiple of ‘sizeof (void *)’.
|
||
|
||
This function was introduced in POSIX 1003.1d. Although this
|
||
function is superseded by ‘aligned_alloc’, it is more portable to
|
||
older POSIX systems that do not support ISO C11.
|
||
|
||
-- Function: void * valloc (size_t SIZE)
|
||
|
||
Preliminary: | MT-Unsafe init | AS-Unsafe init lock | AC-Unsafe
|
||
init lock fd mem | *Note POSIX Safety Concepts::.
|
||
|
||
Using ‘valloc’ is like using ‘memalign’ and passing the page size
|
||
as the value of the first argument. It is implemented like this:
|
||
|
||
void *
|
||
valloc (size_t size)
|
||
{
|
||
return memalign (getpagesize (), size);
|
||
}
|
||
|
||
*note Query Memory Parameters:: for more information about the
|
||
memory subsystem.
|
||
|
||
The ‘valloc’ function is obsolete and ‘aligned_alloc’ or
|
||
‘posix_memalign’ should be used instead.
|
||
|
||
|
||
File: libc.info, Node: Malloc Tunable Parameters, Next: Heap Consistency Checking, Prev: Aligned Memory Blocks, Up: Unconstrained Allocation
|
||
|
||
3.2.3.7 Malloc Tunable Parameters
|
||
.................................
|
||
|
||
You can adjust some parameters for dynamic memory allocation with the
|
||
‘mallopt’ function. This function is the general SVID/XPG interface,
|
||
defined in ‘malloc.h’.
|
||
|
||
-- Function: int mallopt (int PARAM, int VALUE)
|
||
Preliminary: | MT-Unsafe init const:mallopt | AS-Unsafe init lock |
|
||
AC-Unsafe init lock | *Note POSIX Safety Concepts::.
|
||
|
||
When calling ‘mallopt’, the PARAM argument specifies the parameter
|
||
to be set, and VALUE the new value to be set. Possible choices for
|
||
PARAM, as defined in ‘malloc.h’, are:
|
||
|
||
‘M_MMAP_MAX’
|
||
The maximum number of chunks to allocate with ‘mmap’. Setting
|
||
this to zero disables all use of ‘mmap’.
|
||
|
||
The default value of this parameter is ‘65536’.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_MMAP_MAX_’ to the
|
||
desired value.
|
||
|
||
‘M_MMAP_THRESHOLD’
|
||
All chunks larger than this value are allocated outside the
|
||
normal heap, using the ‘mmap’ system call. This way it is
|
||
guaranteed that the memory for these chunks can be returned to
|
||
the system on ‘free’. Note that requests smaller than this
|
||
threshold might still be allocated via ‘mmap’.
|
||
|
||
If this parameter is not set, the default value is set as 128
|
||
KiB and the threshold is adjusted dynamically to suit the
|
||
allocation patterns of the program. If the parameter is set,
|
||
the dynamic adjustment is disabled and the value is set
|
||
statically to the input value.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_MMAP_THRESHOLD_’ to
|
||
the desired value.
|
||
|
||
‘M_PERTURB’
|
||
If non-zero, memory blocks are filled with values depending on
|
||
some low order bits of this parameter when they are allocated
|
||
(except when allocated by ‘calloc’) and freed. This can be
|
||
used to debug the use of uninitialized or freed heap memory.
|
||
Note that this option does not guarantee that the freed block
|
||
will have any specific values. It only guarantees that the
|
||
content the block had before it was freed will be overwritten.
|
||
|
||
The default value of this parameter is ‘0’.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_MMAP_PERTURB_’ to the
|
||
desired value.
|
||
|
||
‘M_TOP_PAD’
|
||
This parameter determines the amount of extra memory to obtain
|
||
from the system when an arena needs to be extended. It also
|
||
specifies the number of bytes to retain when shrinking an
|
||
arena. This provides the necessary hysteresis in heap size
|
||
such that excessive amounts of system calls can be avoided.
|
||
|
||
The default value of this parameter is ‘0’.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_TOP_PAD_’ to the
|
||
desired value.
|
||
|
||
‘M_TRIM_THRESHOLD’
|
||
This is the minimum size (in bytes) of the top-most,
|
||
releasable chunk that will trigger a system call in order to
|
||
return memory to the system.
|
||
|
||
If this parameter is not set, the default value is set as 128
|
||
KiB and the threshold is adjusted dynamically to suit the
|
||
allocation patterns of the program. If the parameter is set,
|
||
the dynamic adjustment is disabled and the value is set
|
||
statically to the provided input.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_TRIM_THRESHOLD_’ to
|
||
the desired value.
|
||
|
||
‘M_ARENA_TEST’
|
||
This parameter specifies the number of arenas that can be
|
||
created before the test on the limit to the number of arenas
|
||
is conducted. The value is ignored if ‘M_ARENA_MAX’ is set.
|
||
|
||
The default value of this parameter is 2 on 32-bit systems and
|
||
8 on 64-bit systems.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_ARENA_TEST’ to the
|
||
desired value.
|
||
|
||
‘M_ARENA_MAX’
|
||
This parameter sets the number of arenas to use regardless of
|
||
the number of cores in the system.
|
||
|
||
The default value of this tunable is ‘0’, meaning that the
|
||
limit on the number of arenas is determined by the number of
|
||
CPU cores online. For 32-bit systems the limit is twice the
|
||
number of cores online and on 64-bit systems, it is eight
|
||
times the number of cores online. Note that the default value
|
||
is not derived from the default value of M_ARENA_TEST and is
|
||
computed independently.
|
||
|
||
This parameter can also be set for the process at startup by
|
||
setting the environment variable ‘MALLOC_ARENA_MAX’ to the
|
||
desired value.
|
||
|
||
|
||
File: libc.info, Node: Heap Consistency Checking, Next: Hooks for Malloc, Prev: Malloc Tunable Parameters, Up: Unconstrained Allocation
|
||
|
||
3.2.3.8 Heap Consistency Checking
|
||
.................................
|
||
|
||
You can ask ‘malloc’ to check the consistency of dynamic memory by using
|
||
the ‘mcheck’ function. This function is a GNU extension, declared in
|
||
‘mcheck.h’.
|
||
|
||
-- Function: int mcheck (void (*ABORTFN) (enum mcheck_status STATUS))
|
||
|
||
Preliminary: | MT-Unsafe race:mcheck const:malloc_hooks | AS-Unsafe
|
||
corrupt | AC-Unsafe corrupt | *Note POSIX Safety Concepts::.
|
||
|
||
Calling ‘mcheck’ tells ‘malloc’ to perform occasional consistency
|
||
checks. These will catch things such as writing past the end of a
|
||
block that was allocated with ‘malloc’.
|
||
|
||
The ABORTFN argument is the function to call when an inconsistency
|
||
is found. If you supply a null pointer, then ‘mcheck’ uses a
|
||
default function which prints a message and calls ‘abort’ (*note
|
||
Aborting a Program::). The function you supply is called with one
|
||
argument, which says what sort of inconsistency was detected; its
|
||
type is described below.
|
||
|
||
It is too late to begin allocation checking once you have allocated
|
||
anything with ‘malloc’. So ‘mcheck’ does nothing in that case.
|
||
The function returns ‘-1’ if you call it too late, and ‘0’
|
||
otherwise (when it is successful).
|
||
|
||
The easiest way to arrange to call ‘mcheck’ early enough is to use
|
||
the option ‘-lmcheck’ when you link your program; then you don’t
|
||
need to modify your program source at all. Alternatively you might
|
||
use a debugger to insert a call to ‘mcheck’ whenever the program is
|
||
started, for example these gdb commands will automatically call
|
||
‘mcheck’ whenever the program starts:
|
||
|
||
(gdb) break main
|
||
Breakpoint 1, main (argc=2, argv=0xbffff964) at whatever.c:10
|
||
(gdb) command 1
|
||
Type commands for when breakpoint 1 is hit, one per line.
|
||
End with a line saying just "end".
|
||
>call mcheck(0)
|
||
>continue
|
||
>end
|
||
(gdb) ...
|
||
|
||
This will however only work if no initialization function of any
|
||
object involved calls any of the ‘malloc’ functions since ‘mcheck’
|
||
must be called before the first such function.
|
||
|
||
-- Function: enum mcheck_status mprobe (void *POINTER)
|
||
Preliminary: | MT-Unsafe race:mcheck const:malloc_hooks | AS-Unsafe
|
||
corrupt | AC-Unsafe corrupt | *Note POSIX Safety Concepts::.
|
||
|
||
The ‘mprobe’ function lets you explicitly check for inconsistencies
|
||
in a particular allocated block. You must have already called
|
||
‘mcheck’ at the beginning of the program, to do its occasional
|
||
checks; calling ‘mprobe’ requests an additional consistency check
|
||
to be done at the time of the call.
|
||
|
||
The argument POINTER must be a pointer returned by ‘malloc’ or
|
||
‘realloc’. ‘mprobe’ returns a value that says what inconsistency,
|
||
if any, was found. The values are described below.
|
||
|
||
-- Data Type: enum mcheck_status
|
||
This enumerated type describes what kind of inconsistency was
|
||
detected in an allocated block, if any. Here are the possible
|
||
values:
|
||
|
||
‘MCHECK_DISABLED’
|
||
‘mcheck’ was not called before the first allocation. No
|
||
consistency checking can be done.
|
||
‘MCHECK_OK’
|
||
No inconsistency detected.
|
||
‘MCHECK_HEAD’
|
||
The data immediately before the block was modified. This
|
||
commonly happens when an array index or pointer is decremented
|
||
too far.
|
||
‘MCHECK_TAIL’
|
||
The data immediately after the block was modified. This
|
||
commonly happens when an array index or pointer is incremented
|
||
too far.
|
||
‘MCHECK_FREE’
|
||
The block was already freed.
|
||
|
||
Another possibility to check for and guard against bugs in the use of
|
||
‘malloc’, ‘realloc’ and ‘free’ is to set the environment variable
|
||
‘MALLOC_CHECK_’. When ‘MALLOC_CHECK_’ is set to a non-zero value, a
|
||
special (less efficient) implementation is used which is designed to be
|
||
tolerant against simple errors, such as double calls of ‘free’ with the
|
||
same argument, or overruns of a single byte (off-by-one bugs). Not all
|
||
such errors can be protected against, however, and memory leaks can
|
||
result.
|
||
|
||
Any detected heap corruption results in immediate termination of the
|
||
process.
|
||
|
||
There is one problem with ‘MALLOC_CHECK_’: in SUID or SGID binaries
|
||
it could possibly be exploited since diverging from the normal programs
|
||
behavior it now writes something to the standard error descriptor.
|
||
Therefore the use of ‘MALLOC_CHECK_’ is disabled by default for SUID and
|
||
SGID binaries. It can be enabled again by the system administrator by
|
||
adding a file ‘/etc/suid-debug’ (the content is not important it could
|
||
be empty).
|
||
|
||
So, what’s the difference between using ‘MALLOC_CHECK_’ and linking
|
||
with ‘-lmcheck’? ‘MALLOC_CHECK_’ is orthogonal with respect to
|
||
‘-lmcheck’. ‘-lmcheck’ has been added for backward compatibility. Both
|
||
‘MALLOC_CHECK_’ and ‘-lmcheck’ should uncover the same bugs - but using
|
||
‘MALLOC_CHECK_’ you don’t need to recompile your application.
|
||
|