This is libc.info, produced by makeinfo version 5.2 from libc.texinfo.
|
|
This file documents the GNU C Library.
|
|
This is ‘The GNU C Library Reference Manual’, for version 2.25.
|
|
Copyright © 1993–2017 Free Software Foundation, Inc.
|
|
Permission is granted to copy, distribute and/or modify this document
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
any later version published by the Free Software Foundation; with the
|
Invariant Sections being “Free Software Needs Free Documentation” and
|
“GNU Lesser General Public License”, the Front-Cover texts being “A GNU
|
Manual”, and with the Back-Cover Texts as in (a) below. A copy of the
|
license is included in the section entitled "GNU Free Documentation
|
License".
|
|
(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
|
modify this GNU manual. Buying copies from the FSF supports it in
|
developing GNU and promoting software freedom.”
|
INFO-DIR-SECTION Software libraries
|
START-INFO-DIR-ENTRY
|
* Libc: (libc). C library.
|
END-INFO-DIR-ENTRY
|
|
INFO-DIR-SECTION GNU C library functions and macros
|
START-INFO-DIR-ENTRY
|
* ALTWERASE: (libc)Local Modes.
|
* ARGP_ERR_UNKNOWN: (libc)Argp Parser Functions.
|
* ARG_MAX: (libc)General Limits.
|
* BC_BASE_MAX: (libc)Utility Limits.
|
* BC_DIM_MAX: (libc)Utility Limits.
|
* BC_SCALE_MAX: (libc)Utility Limits.
|
* BC_STRING_MAX: (libc)Utility Limits.
|
* BRKINT: (libc)Input Modes.
|
* BUFSIZ: (libc)Controlling Buffering.
|
* CCTS_OFLOW: (libc)Control Modes.
|
* CHILD_MAX: (libc)General Limits.
|
* CIGNORE: (libc)Control Modes.
|
* CLK_TCK: (libc)Processor Time.
|
* CLOCAL: (libc)Control Modes.
|
* CLOCKS_PER_SEC: (libc)CPU Time.
|
* COLL_WEIGHTS_MAX: (libc)Utility Limits.
|
* CPU_CLR: (libc)CPU Affinity.
|
* CPU_ISSET: (libc)CPU Affinity.
|
* CPU_SET: (libc)CPU Affinity.
|
* CPU_SETSIZE: (libc)CPU Affinity.
|
* CPU_ZERO: (libc)CPU Affinity.
|
* CREAD: (libc)Control Modes.
|
* CRTS_IFLOW: (libc)Control Modes.
|
* CS5: (libc)Control Modes.
|
* CS6: (libc)Control Modes.
|
* CS7: (libc)Control Modes.
|
* CS8: (libc)Control Modes.
|
* CSIZE: (libc)Control Modes.
|
* CSTOPB: (libc)Control Modes.
|
* DES_FAILED: (libc)DES Encryption.
|
* DTTOIF: (libc)Directory Entries.
|
* E2BIG: (libc)Error Codes.
|
* EACCES: (libc)Error Codes.
|
* EADDRINUSE: (libc)Error Codes.
|
* EADDRNOTAVAIL: (libc)Error Codes.
|
* EADV: (libc)Error Codes.
|
* EAFNOSUPPORT: (libc)Error Codes.
|
* EAGAIN: (libc)Error Codes.
|
* EALREADY: (libc)Error Codes.
|
* EAUTH: (libc)Error Codes.
|
* EBACKGROUND: (libc)Error Codes.
|
* EBADE: (libc)Error Codes.
|
* EBADF: (libc)Error Codes.
|
* EBADFD: (libc)Error Codes.
|
* EBADMSG: (libc)Error Codes.
|
* EBADR: (libc)Error Codes.
|
* EBADRPC: (libc)Error Codes.
|
* EBADRQC: (libc)Error Codes.
|
* EBADSLT: (libc)Error Codes.
|
* EBFONT: (libc)Error Codes.
|
* EBUSY: (libc)Error Codes.
|
* ECANCELED: (libc)Error Codes.
|
* ECHILD: (libc)Error Codes.
|
* ECHO: (libc)Local Modes.
|
* ECHOCTL: (libc)Local Modes.
|
* ECHOE: (libc)Local Modes.
|
* ECHOK: (libc)Local Modes.
|
* ECHOKE: (libc)Local Modes.
|
* ECHONL: (libc)Local Modes.
|
* ECHOPRT: (libc)Local Modes.
|
* ECHRNG: (libc)Error Codes.
|
* ECOMM: (libc)Error Codes.
|
* ECONNABORTED: (libc)Error Codes.
|
* ECONNREFUSED: (libc)Error Codes.
|
* ECONNRESET: (libc)Error Codes.
|
* ED: (libc)Error Codes.
|
* EDEADLK: (libc)Error Codes.
|
* EDEADLOCK: (libc)Error Codes.
|
* EDESTADDRREQ: (libc)Error Codes.
|
* EDIED: (libc)Error Codes.
|
* EDOM: (libc)Error Codes.
|
* EDOTDOT: (libc)Error Codes.
|
* EDQUOT: (libc)Error Codes.
|
* EEXIST: (libc)Error Codes.
|
* EFAULT: (libc)Error Codes.
|
* EFBIG: (libc)Error Codes.
|
* EFTYPE: (libc)Error Codes.
|
* EGRATUITOUS: (libc)Error Codes.
|
* EGREGIOUS: (libc)Error Codes.
|
* EHOSTDOWN: (libc)Error Codes.
|
* EHOSTUNREACH: (libc)Error Codes.
|
* EHWPOISON: (libc)Error Codes.
|
* EIDRM: (libc)Error Codes.
|
* EIEIO: (libc)Error Codes.
|
* EILSEQ: (libc)Error Codes.
|
* EINPROGRESS: (libc)Error Codes.
|
* EINTR: (libc)Error Codes.
|
* EINVAL: (libc)Error Codes.
|
* EIO: (libc)Error Codes.
|
* EISCONN: (libc)Error Codes.
|
* EISDIR: (libc)Error Codes.
|
* EISNAM: (libc)Error Codes.
|
* EKEYEXPIRED: (libc)Error Codes.
|
* EKEYREJECTED: (libc)Error Codes.
|
* EKEYREVOKED: (libc)Error Codes.
|
* EL2HLT: (libc)Error Codes.
|
* EL2NSYNC: (libc)Error Codes.
|
* EL3HLT: (libc)Error Codes.
|
* EL3RST: (libc)Error Codes.
|
* ELIBACC: (libc)Error Codes.
|
* ELIBBAD: (libc)Error Codes.
|
* ELIBEXEC: (libc)Error Codes.
|
* ELIBMAX: (libc)Error Codes.
|
* ELIBSCN: (libc)Error Codes.
|
* ELNRNG: (libc)Error Codes.
|
* ELOOP: (libc)Error Codes.
|
* EMEDIUMTYPE: (libc)Error Codes.
|
* EMFILE: (libc)Error Codes.
|
* EMLINK: (libc)Error Codes.
|
* EMSGSIZE: (libc)Error Codes.
|
* EMULTIHOP: (libc)Error Codes.
|
* ENAMETOOLONG: (libc)Error Codes.
|
* ENAVAIL: (libc)Error Codes.
|
* ENEEDAUTH: (libc)Error Codes.
|
* ENETDOWN: (libc)Error Codes.
|
* ENETRESET: (libc)Error Codes.
|
* ENETUNREACH: (libc)Error Codes.
|
* ENFILE: (libc)Error Codes.
|
* ENOANO: (libc)Error Codes.
|
* ENOBUFS: (libc)Error Codes.
|
* ENOCSI: (libc)Error Codes.
|
* ENODATA: (libc)Error Codes.
|
* ENODEV: (libc)Error Codes.
|
* ENOENT: (libc)Error Codes.
|
* ENOEXEC: (libc)Error Codes.
|
* ENOKEY: (libc)Error Codes.
|
* ENOLCK: (libc)Error Codes.
|
* ENOLINK: (libc)Error Codes.
|
* ENOMEDIUM: (libc)Error Codes.
|
* ENOMEM: (libc)Error Codes.
|
* ENOMSG: (libc)Error Codes.
|
* ENONET: (libc)Error Codes.
|
* ENOPKG: (libc)Error Codes.
|
* ENOPROTOOPT: (libc)Error Codes.
|
* ENOSPC: (libc)Error Codes.
|
* ENOSR: (libc)Error Codes.
|
* ENOSTR: (libc)Error Codes.
|
* ENOSYS: (libc)Error Codes.
|
* ENOTBLK: (libc)Error Codes.
|
* ENOTCONN: (libc)Error Codes.
|
* ENOTDIR: (libc)Error Codes.
|
* ENOTEMPTY: (libc)Error Codes.
|
* ENOTNAM: (libc)Error Codes.
|
* ENOTRECOVERABLE: (libc)Error Codes.
|
* ENOTSOCK: (libc)Error Codes.
|
* ENOTSUP: (libc)Error Codes.
|
* ENOTTY: (libc)Error Codes.
|
* ENOTUNIQ: (libc)Error Codes.
|
* ENXIO: (libc)Error Codes.
|
* EOF: (libc)EOF and Errors.
|
* EOPNOTSUPP: (libc)Error Codes.
|
* EOVERFLOW: (libc)Error Codes.
|
* EOWNERDEAD: (libc)Error Codes.
|
* EPERM: (libc)Error Codes.
|
* EPFNOSUPPORT: (libc)Error Codes.
|
* EPIPE: (libc)Error Codes.
|
* EPROCLIM: (libc)Error Codes.
|
* EPROCUNAVAIL: (libc)Error Codes.
|
* EPROGMISMATCH: (libc)Error Codes.
|
* EPROGUNAVAIL: (libc)Error Codes.
|
* EPROTO: (libc)Error Codes.
|
* EPROTONOSUPPORT: (libc)Error Codes.
|
* EPROTOTYPE: (libc)Error Codes.
|
* EQUIV_CLASS_MAX: (libc)Utility Limits.
|
* ERANGE: (libc)Error Codes.
|
* EREMCHG: (libc)Error Codes.
|
* EREMOTE: (libc)Error Codes.
|
* EREMOTEIO: (libc)Error Codes.
|
* ERESTART: (libc)Error Codes.
|
* ERFKILL: (libc)Error Codes.
|
* EROFS: (libc)Error Codes.
|
* ERPCMISMATCH: (libc)Error Codes.
|
* ESHUTDOWN: (libc)Error Codes.
|
* ESOCKTNOSUPPORT: (libc)Error Codes.
|
* ESPIPE: (libc)Error Codes.
|
* ESRCH: (libc)Error Codes.
|
* ESRMNT: (libc)Error Codes.
|
* ESTALE: (libc)Error Codes.
|
* ESTRPIPE: (libc)Error Codes.
|
* ETIME: (libc)Error Codes.
|
* ETIMEDOUT: (libc)Error Codes.
|
* ETOOMANYREFS: (libc)Error Codes.
|
* ETXTBSY: (libc)Error Codes.
|
* EUCLEAN: (libc)Error Codes.
|
* EUNATCH: (libc)Error Codes.
|
* EUSERS: (libc)Error Codes.
|
* EWOULDBLOCK: (libc)Error Codes.
|
* EXDEV: (libc)Error Codes.
|
* EXFULL: (libc)Error Codes.
|
* EXIT_FAILURE: (libc)Exit Status.
|
* EXIT_SUCCESS: (libc)Exit Status.
|
* EXPR_NEST_MAX: (libc)Utility Limits.
|
* FD_CLOEXEC: (libc)Descriptor Flags.
|
* FD_CLR: (libc)Waiting for I/O.
|
* FD_ISSET: (libc)Waiting for I/O.
|
* FD_SET: (libc)Waiting for I/O.
|
* FD_SETSIZE: (libc)Waiting for I/O.
|
* FD_ZERO: (libc)Waiting for I/O.
|
* 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.
|
* HUPCL: (libc)Control Modes.
|
* I: (libc)Complex Numbers.
|
* ICANON: (libc)Local Modes.
|
* ICRNL: (libc)Input Modes.
|
* IEXTEN: (libc)Local Modes.
|
* IFNAMSIZ: (libc)Interface Naming.
|
* IFTODT: (libc)Directory Entries.
|
* IGNBRK: (libc)Input Modes.
|
* IGNCR: (libc)Input Modes.
|
* IGNPAR: (libc)Input Modes.
|
* IMAXBEL: (libc)Input Modes.
|
* INADDR_ANY: (libc)Host Address Data Type.
|
* INADDR_BROADCAST: (libc)Host Address Data Type.
|
* INADDR_LOOPBACK: (libc)Host Address Data Type.
|
* INADDR_NONE: (libc)Host Address Data Type.
|
* INFINITY: (libc)Infinity and NaN.
|
* INLCR: (libc)Input Modes.
|
* INPCK: (libc)Input Modes.
|
* IPPORT_RESERVED: (libc)Ports.
|
* IPPORT_USERRESERVED: (libc)Ports.
|
* ISIG: (libc)Local Modes.
|
* ISTRIP: (libc)Input Modes.
|
* IXANY: (libc)Input Modes.
|
* IXOFF: (libc)Input Modes.
|
* IXON: (libc)Input Modes.
|
* LINE_MAX: (libc)Utility Limits.
|
* LINK_MAX: (libc)Limits for Files.
|
* L_ctermid: (libc)Identifying the Terminal.
|
* L_cuserid: (libc)Who Logged In.
|
* L_tmpnam: (libc)Temporary Files.
|
* MAXNAMLEN: (libc)Limits for Files.
|
* MAXSYMLINKS: (libc)Symbolic Links.
|
* MAX_CANON: (libc)Limits for Files.
|
* MAX_INPUT: (libc)Limits for Files.
|
* MB_CUR_MAX: (libc)Selecting the Conversion.
|
* MB_LEN_MAX: (libc)Selecting the Conversion.
|
* MDMBUF: (libc)Control Modes.
|
* MSG_DONTROUTE: (libc)Socket Data Options.
|
* MSG_OOB: (libc)Socket Data Options.
|
* MSG_PEEK: (libc)Socket Data Options.
|
* NAME_MAX: (libc)Limits for Files.
|
* NAN: (libc)Infinity and NaN.
|
* NCCS: (libc)Mode Data Types.
|
* NGROUPS_MAX: (libc)General Limits.
|
* NOFLSH: (libc)Local Modes.
|
* NOKERNINFO: (libc)Local Modes.
|
* NSIG: (libc)Standard Signals.
|
* NULL: (libc)Null Pointer Constant.
|
* ONLCR: (libc)Output Modes.
|
* ONOEOT: (libc)Output Modes.
|
* OPEN_MAX: (libc)General Limits.
|
* OPOST: (libc)Output Modes.
|
* OXTABS: (libc)Output Modes.
|
* O_ACCMODE: (libc)Access Modes.
|
* O_APPEND: (libc)Operating Modes.
|
* O_ASYNC: (libc)Operating Modes.
|
* O_CREAT: (libc)Open-time Flags.
|
* O_EXCL: (libc)Open-time Flags.
|
* O_EXEC: (libc)Access Modes.
|
* O_EXLOCK: (libc)Open-time Flags.
|
* O_FSYNC: (libc)Operating Modes.
|
* O_IGNORE_CTTY: (libc)Open-time Flags.
|
* O_NDELAY: (libc)Operating Modes.
|
* O_NOATIME: (libc)Operating Modes.
|
* O_NOCTTY: (libc)Open-time Flags.
|
* O_NOLINK: (libc)Open-time Flags.
|
* O_NONBLOCK: (libc)Open-time Flags.
|
* O_NONBLOCK: (libc)Operating Modes.
|
* O_NOTRANS: (libc)Open-time Flags.
|
* O_RDONLY: (libc)Access Modes.
|
* O_RDWR: (libc)Access Modes.
|
* O_READ: (libc)Access Modes.
|
* O_SHLOCK: (libc)Open-time Flags.
|
* O_SYNC: (libc)Operating Modes.
|
* O_TRUNC: (libc)Open-time Flags.
|
* O_WRITE: (libc)Access Modes.
|
* O_WRONLY: (libc)Access Modes.
|
* PARENB: (libc)Control Modes.
|
* PARMRK: (libc)Input Modes.
|
* PARODD: (libc)Control Modes.
|
* PATH_MAX: (libc)Limits for Files.
|
* PA_FLAG_MASK: (libc)Parsing a Template String.
|
* PENDIN: (libc)Local Modes.
|
* PF_FILE: (libc)Local Namespace Details.
|
* PF_INET6: (libc)Internet Namespace.
|
* PF_INET: (libc)Internet Namespace.
|
* PF_LOCAL: (libc)Local Namespace Details.
|
* PF_UNIX: (libc)Local Namespace Details.
|
* PIPE_BUF: (libc)Limits for Files.
|
* P_tmpdir: (libc)Temporary Files.
|
* RAND_MAX: (libc)ISO Random.
|
* RE_DUP_MAX: (libc)General Limits.
|
* RLIM_INFINITY: (libc)Limits on Resources.
|
* R_OK: (libc)Testing File Access.
|
* SA_NOCLDSTOP: (libc)Flags for Sigaction.
|
* SA_ONSTACK: (libc)Flags for Sigaction.
|
* SA_RESTART: (libc)Flags for Sigaction.
|
* SEEK_CUR: (libc)File Positioning.
|
* SEEK_END: (libc)File Positioning.
|
* SEEK_SET: (libc)File Positioning.
|
* SIGABRT: (libc)Program Error Signals.
|
* SIGALRM: (libc)Alarm Signals.
|
* SIGBUS: (libc)Program Error Signals.
|
* SIGCHLD: (libc)Job Control Signals.
|
* SIGCLD: (libc)Job Control Signals.
|
* SIGCONT: (libc)Job Control Signals.
|
* SIGEMT: (libc)Program Error Signals.
|
* SIGFPE: (libc)Program Error Signals.
|
* SIGHUP: (libc)Termination Signals.
|
* SIGILL: (libc)Program Error Signals.
|
* SIGINFO: (libc)Miscellaneous Signals.
|
* SIGINT: (libc)Termination Signals.
|
* SIGIO: (libc)Asynchronous I/O Signals.
|
* SIGIOT: (libc)Program Error Signals.
|
* SIGKILL: (libc)Termination Signals.
|
* SIGLOST: (libc)Operation Error Signals.
|
* SIGPIPE: (libc)Operation Error Signals.
|
* SIGPOLL: (libc)Asynchronous I/O Signals.
|
* SIGPROF: (libc)Alarm Signals.
|
* SIGQUIT: (libc)Termination Signals.
|
* SIGSEGV: (libc)Program Error Signals.
|
* SIGSTOP: (libc)Job Control Signals.
|
* SIGSYS: (libc)Program Error Signals.
|
* SIGTERM: (libc)Termination Signals.
|
* SIGTRAP: (libc)Program Error Signals.
|
* SIGTSTP: (libc)Job Control Signals.
|
* SIGTTIN: (libc)Job Control Signals.
|
* SIGTTOU: (libc)Job Control Signals.
|
* SIGURG: (libc)Asynchronous I/O Signals.
|
* SIGUSR1: (libc)Miscellaneous Signals.
|
* SIGUSR2: (libc)Miscellaneous Signals.
|
* SIGVTALRM: (libc)Alarm Signals.
|
* SIGWINCH: (libc)Miscellaneous Signals.
|
* SIGXCPU: (libc)Operation Error Signals.
|
* SIGXFSZ: (libc)Operation Error Signals.
|
* SIG_ERR: (libc)Basic Signal Handling.
|
* SNAN: (libc)Infinity and NaN.
|
* SNANF: (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.
|
* __va_copy: (libc)Argument Macros.
|
* _exit: (libc)Termination Internals.
|
* _flushlbf: (libc)Flushing Buffers.
|
* _tolower: (libc)Case Conversion.
|
* _toupper: (libc)Case Conversion.
|
* a64l: (libc)Encode Binary Data.
|
* abort: (libc)Aborting a Program.
|
* abs: (libc)Absolute Value.
|
* accept: (libc)Accepting Connections.
|
* access: (libc)Testing File Access.
|
* acos: (libc)Inverse Trig Functions.
|
* acosf: (libc)Inverse Trig Functions.
|
* acosh: (libc)Hyperbolic Functions.
|
* acoshf: (libc)Hyperbolic Functions.
|
* acoshl: (libc)Hyperbolic Functions.
|
* acosl: (libc)Inverse Trig Functions.
|
* addmntent: (libc)mtab.
|
* addseverity: (libc)Adding Severity Classes.
|
* adjtime: (libc)High-Resolution Calendar.
|
* adjtimex: (libc)High-Resolution Calendar.
|
* aio_cancel64: (libc)Cancel AIO Operations.
|
* aio_cancel: (libc)Cancel AIO Operations.
|
* aio_error64: (libc)Status of AIO Operations.
|
* aio_error: (libc)Status of AIO Operations.
|
* aio_fsync64: (libc)Synchronizing AIO Operations.
|
* aio_fsync: (libc)Synchronizing AIO Operations.
|
* aio_init: (libc)Configuration of AIO.
|
* aio_read64: (libc)Asynchronous Reads/Writes.
|
* aio_read: (libc)Asynchronous Reads/Writes.
|
* aio_return64: (libc)Status of AIO Operations.
|
* aio_return: (libc)Status of AIO Operations.
|
* aio_suspend64: (libc)Synchronizing AIO Operations.
|
* aio_suspend: (libc)Synchronizing AIO Operations.
|
* aio_write64: (libc)Asynchronous Reads/Writes.
|
* aio_write: (libc)Asynchronous Reads/Writes.
|
* alarm: (libc)Setting an Alarm.
|
* aligned_alloc: (libc)Aligned Memory Blocks.
|
* alloca: (libc)Variable Size Automatic.
|
* alphasort64: (libc)Scanning Directory Content.
|
* alphasort: (libc)Scanning Directory Content.
|
* argp_error: (libc)Argp Helper Functions.
|
* argp_failure: (libc)Argp Helper Functions.
|
* argp_help: (libc)Argp Help.
|
* argp_parse: (libc)Argp.
|
* argp_state_help: (libc)Argp Helper Functions.
|
* argp_usage: (libc)Argp Helper Functions.
|
* argz_add: (libc)Argz Functions.
|
* argz_add_sep: (libc)Argz Functions.
|
* argz_append: (libc)Argz Functions.
|
* argz_count: (libc)Argz Functions.
|
* argz_create: (libc)Argz Functions.
|
* argz_create_sep: (libc)Argz Functions.
|
* argz_delete: (libc)Argz Functions.
|
* argz_extract: (libc)Argz Functions.
|
* argz_insert: (libc)Argz Functions.
|
* argz_next: (libc)Argz Functions.
|
* argz_replace: (libc)Argz Functions.
|
* argz_stringify: (libc)Argz Functions.
|
* asctime: (libc)Formatting Calendar Time.
|
* asctime_r: (libc)Formatting Calendar Time.
|
* asin: (libc)Inverse Trig Functions.
|
* asinf: (libc)Inverse Trig Functions.
|
* asinh: (libc)Hyperbolic Functions.
|
* asinhf: (libc)Hyperbolic Functions.
|
* asinhl: (libc)Hyperbolic Functions.
|
* asinl: (libc)Inverse Trig Functions.
|
* asprintf: (libc)Dynamic Output.
|
* assert: (libc)Consistency Checking.
|
* assert_perror: (libc)Consistency Checking.
|
* atan2: (libc)Inverse Trig Functions.
|
* atan2f: (libc)Inverse Trig Functions.
|
* atan2l: (libc)Inverse Trig Functions.
|
* atan: (libc)Inverse Trig Functions.
|
* atanf: (libc)Inverse Trig Functions.
|
* atanh: (libc)Hyperbolic Functions.
|
* atanhf: (libc)Hyperbolic Functions.
|
* atanhl: (libc)Hyperbolic Functions.
|
* atanl: (libc)Inverse Trig Functions.
|
* atexit: (libc)Cleanups on Exit.
|
* atof: (libc)Parsing of Floats.
|
* atoi: (libc)Parsing of Integers.
|
* atol: (libc)Parsing of Integers.
|
* atoll: (libc)Parsing of Integers.
|
* backtrace: (libc)Backtraces.
|
* backtrace_symbols: (libc)Backtraces.
|
* backtrace_symbols_fd: (libc)Backtraces.
|
* basename: (libc)Finding Tokens in a String.
|
* basename: (libc)Finding Tokens in a String.
|
* bcmp: (libc)String/Array Comparison.
|
* bcopy: (libc)Copying 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.
|
* cabsl: (libc)Absolute Value.
|
* cacos: (libc)Inverse Trig Functions.
|
* cacosf: (libc)Inverse Trig Functions.
|
* cacosh: (libc)Hyperbolic Functions.
|
* cacoshf: (libc)Hyperbolic Functions.
|
* cacoshl: (libc)Hyperbolic Functions.
|
* cacosl: (libc)Inverse Trig Functions.
|
* calloc: (libc)Allocating Cleared Space.
|
* canonicalize: (libc)FP Bit Twiddling.
|
* canonicalize_file_name: (libc)Symbolic Links.
|
* canonicalizef: (libc)FP Bit Twiddling.
|
* canonicalizel: (libc)FP Bit Twiddling.
|
* carg: (libc)Operations on Complex.
|
* cargf: (libc)Operations on Complex.
|
* cargl: (libc)Operations on Complex.
|
* casin: (libc)Inverse Trig Functions.
|
* casinf: (libc)Inverse Trig Functions.
|
* casinh: (libc)Hyperbolic Functions.
|
* casinhf: (libc)Hyperbolic Functions.
|
* casinhl: (libc)Hyperbolic Functions.
|
* casinl: (libc)Inverse Trig Functions.
|
* catan: (libc)Inverse Trig Functions.
|
* catanf: (libc)Inverse Trig Functions.
|
* catanh: (libc)Hyperbolic Functions.
|
* catanhf: (libc)Hyperbolic Functions.
|
* catanhl: (libc)Hyperbolic Functions.
|
* catanl: (libc)Inverse Trig Functions.
|
* catclose: (libc)The catgets Functions.
|
* catgets: (libc)The catgets Functions.
|
* catopen: (libc)The catgets Functions.
|
* cbc_crypt: (libc)DES Encryption.
|
* cbrt: (libc)Exponents and Logarithms.
|
* cbrtf: (libc)Exponents and Logarithms.
|
* cbrtl: (libc)Exponents and Logarithms.
|
* ccos: (libc)Trig Functions.
|
* ccosf: (libc)Trig Functions.
|
* ccosh: (libc)Hyperbolic Functions.
|
* ccoshf: (libc)Hyperbolic Functions.
|
* ccoshl: (libc)Hyperbolic Functions.
|
* ccosl: (libc)Trig Functions.
|
* ceil: (libc)Rounding Functions.
|
* ceilf: (libc)Rounding Functions.
|
* ceill: (libc)Rounding Functions.
|
* cexp: (libc)Exponents and Logarithms.
|
* cexpf: (libc)Exponents and Logarithms.
|
* cexpl: (libc)Exponents and Logarithms.
|
* cfgetispeed: (libc)Line Speed.
|
* cfgetospeed: (libc)Line Speed.
|
* cfmakeraw: (libc)Noncanonical Input.
|
* cfree: (libc)Freeing after Malloc.
|
* cfsetispeed: (libc)Line Speed.
|
* cfsetospeed: (libc)Line Speed.
|
* cfsetspeed: (libc)Line Speed.
|
* chdir: (libc)Working Directory.
|
* chmod: (libc)Setting Permissions.
|
* chown: (libc)File Owner.
|
* cimag: (libc)Operations on Complex.
|
* cimagf: (libc)Operations on Complex.
|
* cimagl: (libc)Operations on Complex.
|
* clearenv: (libc)Environment Access.
|
* clearerr: (libc)Error Recovery.
|
* clearerr_unlocked: (libc)Error Recovery.
|
* clock: (libc)CPU Time.
|
* clog10: (libc)Exponents and Logarithms.
|
* clog10f: (libc)Exponents and Logarithms.
|
* clog10l: (libc)Exponents and Logarithms.
|
* clog: (libc)Exponents and Logarithms.
|
* clogf: (libc)Exponents and Logarithms.
|
* clogl: (libc)Exponents and Logarithms.
|
* close: (libc)Opening and Closing Files.
|
* closedir: (libc)Reading/Closing Directory.
|
* closelog: (libc)closelog.
|
* confstr: (libc)String Parameters.
|
* conj: (libc)Operations on Complex.
|
* conjf: (libc)Operations on Complex.
|
* conjl: (libc)Operations on Complex.
|
* connect: (libc)Connecting.
|
* copysign: (libc)FP Bit Twiddling.
|
* copysignf: (libc)FP Bit Twiddling.
|
* copysignl: (libc)FP Bit Twiddling.
|
* cos: (libc)Trig Functions.
|
* cosf: (libc)Trig Functions.
|
* cosh: (libc)Hyperbolic Functions.
|
* coshf: (libc)Hyperbolic Functions.
|
* coshl: (libc)Hyperbolic Functions.
|
* cosl: (libc)Trig Functions.
|
* cpow: (libc)Exponents and Logarithms.
|
* cpowf: (libc)Exponents and Logarithms.
|
* cpowl: (libc)Exponents and Logarithms.
|
* cproj: (libc)Operations on Complex.
|
* cprojf: (libc)Operations on Complex.
|
* cprojl: (libc)Operations on Complex.
|
* creal: (libc)Operations on Complex.
|
* crealf: (libc)Operations on Complex.
|
* creall: (libc)Operations on Complex.
|
* creat64: (libc)Opening and Closing Files.
|
* creat: (libc)Opening and Closing Files.
|
* crypt: (libc)crypt.
|
* crypt_r: (libc)crypt.
|
* csin: (libc)Trig Functions.
|
* csinf: (libc)Trig Functions.
|
* csinh: (libc)Hyperbolic Functions.
|
* csinhf: (libc)Hyperbolic Functions.
|
* csinhl: (libc)Hyperbolic Functions.
|
* csinl: (libc)Trig Functions.
|
* csqrt: (libc)Exponents and Logarithms.
|
* csqrtf: (libc)Exponents and Logarithms.
|
* csqrtl: (libc)Exponents and Logarithms.
|
* ctan: (libc)Trig Functions.
|
* ctanf: (libc)Trig Functions.
|
* ctanh: (libc)Hyperbolic Functions.
|
* ctanhf: (libc)Hyperbolic Functions.
|
* ctanhl: (libc)Hyperbolic Functions.
|
* ctanl: (libc)Trig Functions.
|
* ctermid: (libc)Identifying the Terminal.
|
* ctime: (libc)Formatting Calendar Time.
|
* ctime_r: (libc)Formatting Calendar Time.
|
* cuserid: (libc)Who Logged In.
|
* dcgettext: (libc)Translation with gettext.
|
* dcngettext: (libc)Advanced gettext functions.
|
* des_setparity: (libc)DES Encryption.
|
* dgettext: (libc)Translation with gettext.
|
* difftime: (libc)Elapsed Time.
|
* dirfd: (libc)Opening a Directory.
|
* dirname: (libc)Finding Tokens in a String.
|
* div: (libc)Integer Division.
|
* dngettext: (libc)Advanced gettext functions.
|
* drand48: (libc)SVID Random.
|
* drand48_r: (libc)SVID Random.
|
* drem: (libc)Remainder Functions.
|
* dremf: (libc)Remainder Functions.
|
* dreml: (libc)Remainder Functions.
|
* dup2: (libc)Duplicating Descriptors.
|
* dup: (libc)Duplicating Descriptors.
|
* ecb_crypt: (libc)DES Encryption.
|
* ecvt: (libc)System V Number Conversion.
|
* ecvt_r: (libc)System V Number Conversion.
|
* encrypt: (libc)DES Encryption.
|
* encrypt_r: (libc)DES Encryption.
|
* endfsent: (libc)fstab.
|
* endgrent: (libc)Scanning All Groups.
|
* endhostent: (libc)Host Names.
|
* endmntent: (libc)mtab.
|
* endnetent: (libc)Networks Database.
|
* endnetgrent: (libc)Lookup Netgroup.
|
* endprotoent: (libc)Protocols Database.
|
* endpwent: (libc)Scanning All Users.
|
* endservent: (libc)Services Database.
|
* endutent: (libc)Manipulating the Database.
|
* endutxent: (libc)XPG Functions.
|
* envz_add: (libc)Envz Functions.
|
* envz_entry: (libc)Envz Functions.
|
* envz_get: (libc)Envz Functions.
|
* envz_merge: (libc)Envz Functions.
|
* envz_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.
|
* erfcl: (libc)Special Functions.
|
* erff: (libc)Special Functions.
|
* erfl: (libc)Special Functions.
|
* err: (libc)Error Messages.
|
* errno: (libc)Checking for Errors.
|
* error: (libc)Error Messages.
|
* error_at_line: (libc)Error Messages.
|
* errx: (libc)Error Messages.
|
* execl: (libc)Executing a File.
|
* execle: (libc)Executing a File.
|
* execlp: (libc)Executing a File.
|
* execv: (libc)Executing a File.
|
* execve: (libc)Executing a File.
|
* execvp: (libc)Executing a File.
|
* exit: (libc)Normal Termination.
|
* exp10: (libc)Exponents and Logarithms.
|
* exp10f: (libc)Exponents and Logarithms.
|
* exp10l: (libc)Exponents and Logarithms.
|
* exp2: (libc)Exponents and Logarithms.
|
* exp2f: (libc)Exponents and Logarithms.
|
* exp2l: (libc)Exponents and Logarithms.
|
* exp: (libc)Exponents and Logarithms.
|
* expf: (libc)Exponents and Logarithms.
|
* expl: (libc)Exponents and Logarithms.
|
* explicit_bzero: (libc)Erasing Sensitive Data.
|
* expm1: (libc)Exponents and Logarithms.
|
* expm1f: (libc)Exponents and Logarithms.
|
* expm1l: (libc)Exponents and Logarithms.
|
* fabs: (libc)Absolute Value.
|
* fabsf: (libc)Absolute Value.
|
* fabsl: (libc)Absolute Value.
|
* fchdir: (libc)Working Directory.
|
* fchmod: (libc)Setting Permissions.
|
* fchown: (libc)File Owner.
|
* fclose: (libc)Closing Streams.
|
* fcloseall: (libc)Closing Streams.
|
* fcntl: (libc)Control Operations.
|
* fcvt: (libc)System V Number Conversion.
|
* fcvt_r: (libc)System V Number Conversion.
|
* fdatasync: (libc)Synchronizing I/O.
|
* fdim: (libc)Misc FP Arithmetic.
|
* fdimf: (libc)Misc FP Arithmetic.
|
* fdiml: (libc)Misc FP Arithmetic.
|
* fdopen: (libc)Descriptors and Streams.
|
* fdopendir: (libc)Opening a Directory.
|
* feclearexcept: (libc)Status bit operations.
|
* fedisableexcept: (libc)Control Functions.
|
* feenableexcept: (libc)Control Functions.
|
* fegetenv: (libc)Control Functions.
|
* fegetexcept: (libc)Control Functions.
|
* fegetexceptflag: (libc)Status bit operations.
|
* 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.
|
* floorl: (libc)Rounding Functions.
|
* fma: (libc)Misc FP Arithmetic.
|
* fmaf: (libc)Misc FP Arithmetic.
|
* fmal: (libc)Misc FP Arithmetic.
|
* fmax: (libc)Misc FP Arithmetic.
|
* fmaxf: (libc)Misc FP Arithmetic.
|
* fmaxl: (libc)Misc FP Arithmetic.
|
* fmaxmag: (libc)Misc FP Arithmetic.
|
* fmaxmagf: (libc)Misc FP Arithmetic.
|
* fmaxmagl: (libc)Misc FP Arithmetic.
|
* fmemopen: (libc)String Streams.
|
* fmin: (libc)Misc FP Arithmetic.
|
* fminf: (libc)Misc FP Arithmetic.
|
* fminl: (libc)Misc FP Arithmetic.
|
* fminmag: (libc)Misc FP Arithmetic.
|
* fminmagf: (libc)Misc FP Arithmetic.
|
* fminmagl: (libc)Misc FP Arithmetic.
|
* fmod: (libc)Remainder Functions.
|
* fmodf: (libc)Remainder Functions.
|
* fmodl: (libc)Remainder Functions.
|
* fmtmsg: (libc)Printing Formatted Messages.
|
* fnmatch: (libc)Wildcard Matching.
|
* fopen64: (libc)Opening Streams.
|
* fopen: (libc)Opening Streams.
|
* fopencookie: (libc)Streams and Cookies.
|
* fork: (libc)Creating a Process.
|
* forkpty: (libc)Pseudo-Terminal Pairs.
|
* fpathconf: (libc)Pathconf.
|
* fpclassify: (libc)Floating Point Classes.
|
* fprintf: (libc)Formatted Output Functions.
|
* fputc: (libc)Simple Output.
|
* fputc_unlocked: (libc)Simple Output.
|
* fputs: (libc)Simple Output.
|
* fputs_unlocked: (libc)Simple Output.
|
* fputwc: (libc)Simple Output.
|
* fputwc_unlocked: (libc)Simple Output.
|
* fputws: (libc)Simple Output.
|
* fputws_unlocked: (libc)Simple Output.
|
* fread: (libc)Block Input/Output.
|
* fread_unlocked: (libc)Block Input/Output.
|
* free: (libc)Freeing after Malloc.
|
* freopen64: (libc)Opening Streams.
|
* freopen: (libc)Opening Streams.
|
* frexp: (libc)Normalization Functions.
|
* frexpf: (libc)Normalization Functions.
|
* frexpl: (libc)Normalization Functions.
|
* fromfp: (libc)Rounding Functions.
|
* fromfpf: (libc)Rounding Functions.
|
* fromfpl: (libc)Rounding Functions.
|
* fromfpx: (libc)Rounding Functions.
|
* fromfpxf: (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.
|
* 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.
|
* 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.
|
* hypotl: (libc)Exponents and Logarithms.
|
* iconv: (libc)Generic Conversion Interface.
|
* iconv_close: (libc)Generic Conversion Interface.
|
* iconv_open: (libc)Generic Conversion Interface.
|
* if_freenameindex: (libc)Interface Naming.
|
* if_indextoname: (libc)Interface Naming.
|
* if_nameindex: (libc)Interface Naming.
|
* if_nametoindex: (libc)Interface Naming.
|
* ilogb: (libc)Exponents and Logarithms.
|
* ilogbf: (libc)Exponents and Logarithms.
|
* ilogbl: (libc)Exponents and Logarithms.
|
* imaxabs: (libc)Absolute Value.
|
* imaxdiv: (libc)Integer Division.
|
* in6addr_any: (libc)Host Address Data Type.
|
* in6addr_loopback: (libc)Host Address Data Type.
|
* index: (libc)Search Functions.
|
* inet_addr: (libc)Host Address Functions.
|
* inet_aton: (libc)Host Address Functions.
|
* inet_lnaof: (libc)Host Address Functions.
|
* inet_makeaddr: (libc)Host Address Functions.
|
* inet_netof: (libc)Host Address Functions.
|
* inet_network: (libc)Host Address Functions.
|
* inet_ntoa: (libc)Host Address Functions.
|
* inet_ntop: (libc)Host Address Functions.
|
* inet_pton: (libc)Host Address Functions.
|
* initgroups: (libc)Setting Groups.
|
* initstate: (libc)BSD Random.
|
* initstate_r: (libc)BSD Random.
|
* innetgr: (libc)Netgroup Membership.
|
* ioctl: (libc)IOCTLs.
|
* isalnum: (libc)Classification of Characters.
|
* isalpha: (libc)Classification of Characters.
|
* isascii: (libc)Classification of Characters.
|
* isatty: (libc)Is It a Terminal.
|
* isblank: (libc)Classification of Characters.
|
* 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.
|
* j0l: (libc)Special Functions.
|
* j1: (libc)Special Functions.
|
* j1f: (libc)Special Functions.
|
* j1l: (libc)Special Functions.
|
* jn: (libc)Special Functions.
|
* jnf: (libc)Special Functions.
|
* jnl: (libc)Special Functions.
|
* jrand48: (libc)SVID Random.
|
* jrand48_r: (libc)SVID Random.
|
* kill: (libc)Signaling Another Process.
|
* killpg: (libc)Signaling Another Process.
|
* l64a: (libc)Encode Binary Data.
|
* labs: (libc)Absolute Value.
|
* lcong48: (libc)SVID Random.
|
* lcong48_r: (libc)SVID Random.
|
* ldexp: (libc)Normalization Functions.
|
* ldexpf: (libc)Normalization Functions.
|
* ldexpl: (libc)Normalization Functions.
|
* ldiv: (libc)Integer Division.
|
* lfind: (libc)Array Search Function.
|
* lgamma: (libc)Special Functions.
|
* lgamma_r: (libc)Special Functions.
|
* lgammaf: (libc)Special Functions.
|
* lgammaf_r: (libc)Special Functions.
|
* lgammal: (libc)Special Functions.
|
* lgammal_r: (libc)Special Functions.
|
* link: (libc)Hard Links.
|
* lio_listio64: (libc)Asynchronous Reads/Writes.
|
* lio_listio: (libc)Asynchronous Reads/Writes.
|
* listen: (libc)Listening.
|
* llabs: (libc)Absolute Value.
|
* lldiv: (libc)Integer Division.
|
* llogb: (libc)Exponents and Logarithms.
|
* llogbf: (libc)Exponents and Logarithms.
|
* llogbl: (libc)Exponents and Logarithms.
|
* llrint: (libc)Rounding Functions.
|
* llrintf: (libc)Rounding Functions.
|
* llrintl: (libc)Rounding Functions.
|
* llround: (libc)Rounding Functions.
|
* llroundf: (libc)Rounding Functions.
|
* llroundl: (libc)Rounding Functions.
|
* localeconv: (libc)The Lame Way to Locale Data.
|
* localtime: (libc)Broken-down Time.
|
* localtime_r: (libc)Broken-down Time.
|
* log10: (libc)Exponents and Logarithms.
|
* log10f: (libc)Exponents and Logarithms.
|
* log10l: (libc)Exponents and Logarithms.
|
* log1p: (libc)Exponents and Logarithms.
|
* log1pf: (libc)Exponents and Logarithms.
|
* log1pl: (libc)Exponents and Logarithms.
|
* log2: (libc)Exponents and Logarithms.
|
* log2f: (libc)Exponents and Logarithms.
|
* log2l: (libc)Exponents and Logarithms.
|
* log: (libc)Exponents and Logarithms.
|
* logb: (libc)Exponents and Logarithms.
|
* logbf: (libc)Exponents and Logarithms.
|
* logbl: (libc)Exponents and Logarithms.
|
* logf: (libc)Exponents and Logarithms.
|
* login: (libc)Logging In and Out.
|
* login_tty: (libc)Logging In and Out.
|
* logl: (libc)Exponents and Logarithms.
|
* logout: (libc)Logging In and Out.
|
* logwtmp: (libc)Logging In and Out.
|
* longjmp: (libc)Non-Local Details.
|
* lrand48: (libc)SVID Random.
|
* lrand48_r: (libc)SVID Random.
|
* lrint: (libc)Rounding Functions.
|
* lrintf: (libc)Rounding Functions.
|
* lrintl: (libc)Rounding Functions.
|
* lround: (libc)Rounding Functions.
|
* lroundf: (libc)Rounding Functions.
|
* lroundl: (libc)Rounding Functions.
|
* lsearch: (libc)Array Search Function.
|
* lseek64: (libc)File Position Primitive.
|
* lseek: (libc)File Position Primitive.
|
* lstat64: (libc)Reading Attributes.
|
* lstat: (libc)Reading Attributes.
|
* lutimes: (libc)File Times.
|
* madvise: (libc)Memory-mapped I/O.
|
* makecontext: (libc)System V contexts.
|
* mallinfo: (libc)Statistics of Malloc.
|
* malloc: (libc)Basic Allocation.
|
* mallopt: (libc)Malloc Tunable Parameters.
|
* mblen: (libc)Non-reentrant Character Conversion.
|
* mbrlen: (libc)Converting a Character.
|
* mbrtowc: (libc)Converting a Character.
|
* mbsinit: (libc)Keeping the state.
|
* mbsnrtowcs: (libc)Converting Strings.
|
* mbsrtowcs: (libc)Converting Strings.
|
* mbstowcs: (libc)Non-reentrant String Conversion.
|
* mbtowc: (libc)Non-reentrant Character Conversion.
|
* mcheck: (libc)Heap Consistency Checking.
|
* memalign: (libc)Aligned Memory Blocks.
|
* memccpy: (libc)Copying Strings and Arrays.
|
* memchr: (libc)Search Functions.
|
* memcmp: (libc)String/Array Comparison.
|
* memcpy: (libc)Copying Strings and Arrays.
|
* memfrob: (libc)Trivial Encryption.
|
* 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.
|
* mlock: (libc)Page Lock Functions.
|
* mlockall: (libc)Page Lock Functions.
|
* mmap64: (libc)Memory-mapped I/O.
|
* mmap: (libc)Memory-mapped I/O.
|
* modf: (libc)Rounding Functions.
|
* modff: (libc)Rounding Functions.
|
* modfl: (libc)Rounding Functions.
|
* mount: (libc)Mount-Unmount-Remount.
|
* mprobe: (libc)Heap Consistency Checking.
|
* mrand48: (libc)SVID Random.
|
* mrand48_r: (libc)SVID Random.
|
* mremap: (libc)Memory-mapped I/O.
|
* msync: (libc)Memory-mapped I/O.
|
* mtrace: (libc)Tracing malloc.
|
* munlock: (libc)Page Lock Functions.
|
* munlockall: (libc)Page Lock Functions.
|
* munmap: (libc)Memory-mapped I/O.
|
* muntrace: (libc)Tracing malloc.
|
* nan: (libc)FP Bit Twiddling.
|
* nanf: (libc)FP Bit Twiddling.
|
* nanl: (libc)FP Bit Twiddling.
|
* nanosleep: (libc)Sleeping.
|
* nearbyint: (libc)Rounding Functions.
|
* nearbyintf: (libc)Rounding Functions.
|
* nearbyintl: (libc)Rounding Functions.
|
* nextafter: (libc)FP Bit Twiddling.
|
* nextafterf: (libc)FP Bit Twiddling.
|
* nextafterl: (libc)FP Bit Twiddling.
|
* nextdown: (libc)FP Bit Twiddling.
|
* nextdownf: (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.
|
* 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.
|
* popen: (libc)Pipe to a Subprocess.
|
* posix_fallocate64: (libc)Storage Allocation.
|
* posix_fallocate: (libc)Storage Allocation.
|
* posix_memalign: (libc)Aligned Memory Blocks.
|
* pow10: (libc)Exponents and Logarithms.
|
* pow10f: (libc)Exponents and Logarithms.
|
* pow10l: (libc)Exponents and Logarithms.
|
* pow: (libc)Exponents and Logarithms.
|
* powf: (libc)Exponents and Logarithms.
|
* powl: (libc)Exponents and Logarithms.
|
* pread64: (libc)I/O Primitives.
|
* pread: (libc)I/O Primitives.
|
* printf: (libc)Formatted Output Functions.
|
* printf_size: (libc)Predefined Printf Handlers.
|
* printf_size_info: (libc)Predefined Printf Handlers.
|
* psignal: (libc)Signal Messages.
|
* pthread_getattr_default_np: (libc)Default Thread Attributes.
|
* pthread_getspecific: (libc)Thread-specific Data.
|
* pthread_key_create: (libc)Thread-specific Data.
|
* pthread_key_delete: (libc)Thread-specific Data.
|
* pthread_setattr_default_np: (libc)Default Thread Attributes.
|
* pthread_setspecific: (libc)Thread-specific Data.
|
* ptsname: (libc)Allocation.
|
* ptsname_r: (libc)Allocation.
|
* putc: (libc)Simple Output.
|
* putc_unlocked: (libc)Simple Output.
|
* putchar: (libc)Simple Output.
|
* putchar_unlocked: (libc)Simple Output.
|
* putenv: (libc)Environment Access.
|
* putpwent: (libc)Writing a User Entry.
|
* puts: (libc)Simple Output.
|
* pututline: (libc)Manipulating the Database.
|
* pututxline: (libc)XPG Functions.
|
* putw: (libc)Simple Output.
|
* putwc: (libc)Simple Output.
|
* putwc_unlocked: (libc)Simple Output.
|
* putwchar: (libc)Simple Output.
|
* putwchar_unlocked: (libc)Simple Output.
|
* pwrite64: (libc)I/O Primitives.
|
* pwrite: (libc)I/O Primitives.
|
* qecvt: (libc)System V Number Conversion.
|
* qecvt_r: (libc)System V Number Conversion.
|
* qfcvt: (libc)System V Number Conversion.
|
* qfcvt_r: (libc)System V Number Conversion.
|
* qgcvt: (libc)System V Number Conversion.
|
* qsort: (libc)Array Sort Function.
|
* raise: (libc)Signaling Yourself.
|
* rand: (libc)ISO Random.
|
* rand_r: (libc)ISO Random.
|
* random: (libc)BSD Random.
|
* random_r: (libc)BSD Random.
|
* rawmemchr: (libc)Search Functions.
|
* read: (libc)I/O Primitives.
|
* readdir64: (libc)Reading/Closing Directory.
|
* readdir64_r: (libc)Reading/Closing Directory.
|
* readdir: (libc)Reading/Closing Directory.
|
* readdir_r: (libc)Reading/Closing Directory.
|
* readlink: (libc)Symbolic Links.
|
* readv: (libc)Scatter-Gather.
|
* realloc: (libc)Changing Block Size.
|
* realpath: (libc)Symbolic Links.
|
* recv: (libc)Receiving Data.
|
* recvfrom: (libc)Receiving Datagrams.
|
* recvmsg: (libc)Receiving Datagrams.
|
* regcomp: (libc)POSIX Regexp Compilation.
|
* regerror: (libc)Regexp Cleanup.
|
* regexec: (libc)Matching POSIX Regexps.
|
* regfree: (libc)Regexp Cleanup.
|
* register_printf_function: (libc)Registering New Conversions.
|
* remainder: (libc)Remainder Functions.
|
* remainderf: (libc)Remainder Functions.
|
* remainderl: (libc)Remainder Functions.
|
* remove: (libc)Deleting Files.
|
* rename: (libc)Renaming Files.
|
* rewind: (libc)File Positioning.
|
* rewinddir: (libc)Random Access Directory.
|
* rindex: (libc)Search Functions.
|
* rint: (libc)Rounding Functions.
|
* rintf: (libc)Rounding Functions.
|
* rintl: (libc)Rounding Functions.
|
* rmdir: (libc)Deleting Files.
|
* round: (libc)Rounding Functions.
|
* roundeven: (libc)Rounding Functions.
|
* roundevenf: (libc)Rounding Functions.
|
* roundevenl: (libc)Rounding Functions.
|
* roundf: (libc)Rounding Functions.
|
* roundl: (libc)Rounding Functions.
|
* rpmatch: (libc)Yes-or-No Questions.
|
* sbrk: (libc)Resizing the Data Segment.
|
* scalb: (libc)Normalization Functions.
|
* scalbf: (libc)Normalization Functions.
|
* scalbl: (libc)Normalization Functions.
|
* scalbln: (libc)Normalization Functions.
|
* scalblnf: (libc)Normalization Functions.
|
* scalblnl: (libc)Normalization Functions.
|
* scalbn: (libc)Normalization Functions.
|
* scalbnf: (libc)Normalization Functions.
|
* scalbnl: (libc)Normalization Functions.
|
* scandir64: (libc)Scanning Directory Content.
|
* scandir: (libc)Scanning Directory Content.
|
* scanf: (libc)Formatted Input Functions.
|
* sched_get_priority_max: (libc)Basic Scheduling Functions.
|
* sched_get_priority_min: (libc)Basic Scheduling Functions.
|
* sched_getaffinity: (libc)CPU Affinity.
|
* sched_getparam: (libc)Basic Scheduling Functions.
|
* sched_getscheduler: (libc)Basic Scheduling Functions.
|
* sched_rr_get_interval: (libc)Basic Scheduling Functions.
|
* sched_setaffinity: (libc)CPU Affinity.
|
* sched_setparam: (libc)Basic Scheduling Functions.
|
* sched_setscheduler: (libc)Basic Scheduling Functions.
|
* sched_yield: (libc)Basic Scheduling Functions.
|
* secure_getenv: (libc)Environment Access.
|
* seed48: (libc)SVID Random.
|
* seed48_r: (libc)SVID Random.
|
* seekdir: (libc)Random Access Directory.
|
* select: (libc)Waiting for I/O.
|
* 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.
|
* setkey: (libc)DES Encryption.
|
* setkey_r: (libc)DES Encryption.
|
* setlinebuf: (libc)Controlling Buffering.
|
* setlocale: (libc)Setting the Locale.
|
* setlogmask: (libc)setlogmask.
|
* setmntent: (libc)mtab.
|
* setnetent: (libc)Networks Database.
|
* setnetgrent: (libc)Lookup Netgroup.
|
* setpayload: (libc)FP Bit Twiddling.
|
* setpayloadf: (libc)FP Bit Twiddling.
|
* setpayloadl: (libc)FP Bit Twiddling.
|
* setpayloadsig: (libc)FP Bit Twiddling.
|
* setpayloadsigf: (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.
|
* sincosl: (libc)Trig Functions.
|
* sinf: (libc)Trig Functions.
|
* sinh: (libc)Hyperbolic Functions.
|
* sinhf: (libc)Hyperbolic Functions.
|
* sinhl: (libc)Hyperbolic Functions.
|
* sinl: (libc)Trig Functions.
|
* sleep: (libc)Sleeping.
|
* snprintf: (libc)Formatted Output Functions.
|
* socket: (libc)Creating a Socket.
|
* socketpair: (libc)Socket Pairs.
|
* sprintf: (libc)Formatted Output Functions.
|
* sqrt: (libc)Exponents and Logarithms.
|
* sqrtf: (libc)Exponents and Logarithms.
|
* sqrtl: (libc)Exponents and Logarithms.
|
* srand48: (libc)SVID Random.
|
* srand48_r: (libc)SVID Random.
|
* srand: (libc)ISO Random.
|
* srandom: (libc)BSD Random.
|
* srandom_r: (libc)BSD Random.
|
* sscanf: (libc)Formatted Input Functions.
|
* ssignal: (libc)Basic Signal Handling.
|
* stat64: (libc)Reading Attributes.
|
* stat: (libc)Reading Attributes.
|
* stime: (libc)Simple Calendar Time.
|
* stpcpy: (libc)Copying 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.
|
* strfroml: (libc)Printing of Floats.
|
* strfry: (libc)strfry.
|
* 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.
|
* strtoimax: (libc)Parsing of Integers.
|
* strtok: (libc)Finding Tokens in a String.
|
* strtok_r: (libc)Finding Tokens in a String.
|
* strtol: (libc)Parsing of Integers.
|
* strtold: (libc)Parsing of Floats.
|
* strtoll: (libc)Parsing of Integers.
|
* strtoq: (libc)Parsing of Integers.
|
* strtoul: (libc)Parsing of Integers.
|
* strtoull: (libc)Parsing of Integers.
|
* strtoumax: (libc)Parsing of Integers.
|
* strtouq: (libc)Parsing of Integers.
|
* strverscmp: (libc)String/Array Comparison.
|
* strxfrm: (libc)Collation Functions.
|
* stty: (libc)BSD Terminal Modes.
|
* swapcontext: (libc)System V contexts.
|
* swprintf: (libc)Formatted Output Functions.
|
* swscanf: (libc)Formatted Input Functions.
|
* symlink: (libc)Symbolic Links.
|
* sync: (libc)Synchronizing I/O.
|
* syscall: (libc)System Calls.
|
* sysconf: (libc)Sysconf Definition.
|
* sysctl: (libc)System Parameters.
|
* syslog: (libc)syslog; vsyslog.
|
* system: (libc)Running a Command.
|
* sysv_signal: (libc)Basic Signal Handling.
|
* tan: (libc)Trig Functions.
|
* tanf: (libc)Trig Functions.
|
* tanh: (libc)Hyperbolic Functions.
|
* tanhf: (libc)Hyperbolic Functions.
|
* tanhl: (libc)Hyperbolic Functions.
|
* tanl: (libc)Trig Functions.
|
* tcdrain: (libc)Line Control.
|
* tcflow: (libc)Line Control.
|
* tcflush: (libc)Line Control.
|
* tcgetattr: (libc)Mode Functions.
|
* tcgetpgrp: (libc)Terminal Access Functions.
|
* tcgetsid: (libc)Terminal Access Functions.
|
* tcsendbreak: (libc)Line Control.
|
* tcsetattr: (libc)Mode Functions.
|
* tcsetpgrp: (libc)Terminal Access Functions.
|
* tdelete: (libc)Tree Search Function.
|
* tdestroy: (libc)Tree Search Function.
|
* telldir: (libc)Random Access Directory.
|
* tempnam: (libc)Temporary Files.
|
* textdomain: (libc)Locating gettext catalog.
|
* tfind: (libc)Tree Search Function.
|
* tgamma: (libc)Special Functions.
|
* tgammaf: (libc)Special Functions.
|
* tgammal: (libc)Special Functions.
|
* time: (libc)Simple Calendar Time.
|
* timegm: (libc)Broken-down Time.
|
* timelocal: (libc)Broken-down Time.
|
* times: (libc)Processor Time.
|
* tmpfile64: (libc)Temporary Files.
|
* tmpfile: (libc)Temporary Files.
|
* tmpnam: (libc)Temporary Files.
|
* tmpnam_r: (libc)Temporary Files.
|
* toascii: (libc)Case Conversion.
|
* tolower: (libc)Case Conversion.
|
* totalorder: (libc)FP Comparison Functions.
|
* totalorderf: (libc)FP Comparison Functions.
|
* totalorderl: (libc)FP Comparison Functions.
|
* totalordermag: (libc)FP Comparison Functions.
|
* totalordermagf: (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.
|
* truncl: (libc)Rounding Functions.
|
* tsearch: (libc)Tree Search Function.
|
* ttyname: (libc)Is It a Terminal.
|
* ttyname_r: (libc)Is It a Terminal.
|
* twalk: (libc)Tree Search Function.
|
* tzset: (libc)Time Zone Functions.
|
* ufromfp: (libc)Rounding Functions.
|
* ufromfpf: (libc)Rounding Functions.
|
* ufromfpl: (libc)Rounding Functions.
|
* ufromfpx: (libc)Rounding Functions.
|
* ufromfpxf: (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.
|
* 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.
|
* y0l: (libc)Special Functions.
|
* y1: (libc)Special Functions.
|
* y1f: (libc)Special Functions.
|
* y1l: (libc)Special Functions.
|
* yn: (libc)Special Functions.
|
* ynf: (libc)Special Functions.
|
* ynl: (libc)Special Functions.
|
END-INFO-DIR-ENTRY
|
|
|
File: libc.info, Node: Ports, Next: Services Database, Prev: Host Addresses, Up: Internet Namespace
|
|
16.6.3 Internet Ports
|
---------------------
|
|
A socket address in the Internet namespace consists of a machine’s
|
Internet address plus a "port number" which distinguishes the sockets on
|
a given machine (for a given protocol). Port numbers range from 0 to
|
65,535.
|
|
Port numbers less than ‘IPPORT_RESERVED’ are reserved for standard
|
servers, such as ‘finger’ and ‘telnet’. There is a database that keeps
|
track of these, and you can use the ‘getservbyname’ function to map a
|
service name onto a port number; see *note Services Database::.
|
|
If you write a server that is not one of the standard ones defined in
|
the database, you must choose a port number for it. Use a number
|
greater than ‘IPPORT_USERRESERVED’; such numbers are reserved for
|
servers and won’t ever be generated automatically by the system.
|
Avoiding conflicts with servers being run by other users is up to you.
|
|
When you use a socket without specifying its address, the system
|
generates a port number for it. This number is between
|
‘IPPORT_RESERVED’ and ‘IPPORT_USERRESERVED’.
|
|
On the Internet, it is actually legitimate to have two different
|
sockets with the same port number, as long as they never both try to
|
communicate with the same socket address (host address plus port
|
number). You shouldn’t duplicate a port number except in special
|
circumstances where a higher-level protocol requires it. Normally, the
|
system won’t let you do it; ‘bind’ normally insists on distinct port
|
numbers. To reuse a port number, you must set the socket option
|
‘SO_REUSEADDR’. *Note Socket-Level Options::.
|
|
These macros are defined in the header file ‘netinet/in.h’.
|
|
-- Macro: int IPPORT_RESERVED
|
Port numbers less than ‘IPPORT_RESERVED’ are reserved for superuser
|
use.
|
|
-- Macro: int IPPORT_USERRESERVED
|
Port numbers greater than or equal to ‘IPPORT_USERRESERVED’ are
|
reserved for explicit use; they will never be allocated
|
automatically.
|
|
|
File: libc.info, Node: Services Database, Next: Byte Order, Prev: Ports, Up: Internet Namespace
|
|
16.6.4 The Services Database
|
----------------------------
|
|
The database that keeps track of “well-known” services is usually either
|
the file ‘/etc/services’ or an equivalent from a name server. You can
|
use these utilities, declared in ‘netdb.h’, to access the services
|
database.
|
|
-- Data Type: struct servent
|
This data type holds information about entries from the services
|
database. It has the following members:
|
|
‘char *s_name’
|
This is the “official” name of the service.
|
|
‘char **s_aliases’
|
These are alternate names for the service, represented as an
|
array of strings. A null pointer terminates the array.
|
|
‘int s_port’
|
This is the port number for the service. Port numbers are
|
given in network byte order; see *note Byte Order::.
|
|
‘char *s_proto’
|
This is the name of the protocol to use with this service.
|
*Note Protocols Database::.
|
|
To get information about a particular service, use the
|
‘getservbyname’ or ‘getservbyport’ functions. The information is
|
returned in a statically-allocated structure; you must copy the
|
information if you need to save it across calls.
|
|
-- Function: struct servent * getservbyname (const char *NAME, const
|
char *PROTO)
|
Preliminary: | MT-Unsafe race:servbyname locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
The ‘getservbyname’ function returns information about the service
|
named NAME using protocol PROTO. If it can’t find such a service,
|
it returns a null pointer.
|
|
This function is useful for servers as well as for clients; servers
|
use it to determine which port they should listen on (*note
|
Listening::).
|
|
-- Function: struct servent * getservbyport (int PORT, const char
|
*PROTO)
|
Preliminary: | MT-Unsafe race:servbyport locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
The ‘getservbyport’ function returns information about the service
|
at port PORT using protocol PROTO. If it can’t find such a
|
service, it returns a null pointer.
|
|
You can also scan the services database using ‘setservent’, ‘getservent’
|
and ‘endservent’. Be careful when using these functions because they
|
are not reentrant.
|
|
-- Function: void setservent (int STAYOPEN)
|
Preliminary: | MT-Unsafe race:servent locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function opens the services database to begin scanning it.
|
|
If the STAYOPEN argument is nonzero, this sets a flag so that
|
subsequent calls to ‘getservbyname’ or ‘getservbyport’ will not
|
close the database (as they usually would). This makes for more
|
efficiency if you call those functions several times, by avoiding
|
reopening the database for each call.
|
|
-- Function: struct servent * getservent (void)
|
Preliminary: | MT-Unsafe race:servent race:serventbuf locale |
|
AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
|
*Note POSIX Safety Concepts::.
|
|
This function returns the next entry in the services database. If
|
there are no more entries, it returns a null pointer.
|
|
-- Function: void endservent (void)
|
Preliminary: | MT-Unsafe race:servent locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function closes the services database.
|
|
|
File: libc.info, Node: Byte Order, Next: Protocols Database, Prev: Services Database, Up: Internet Namespace
|
|
16.6.5 Byte Order Conversion
|
----------------------------
|
|
Different kinds of computers use different conventions for the ordering
|
of bytes within a word. Some computers put the most significant byte
|
within a word first (this is called “big-endian” order), and others put
|
it last (“little-endian” order).
|
|
So that machines with different byte order conventions can
|
communicate, the Internet protocols specify a canonical byte order
|
convention for data transmitted over the network. This is known as
|
"network byte order".
|
|
When establishing an Internet socket connection, you must make sure
|
that the data in the ‘sin_port’ and ‘sin_addr’ members of the
|
‘sockaddr_in’ structure are represented in network byte order. If you
|
are encoding integer data in the messages sent through the socket, you
|
should convert this to network byte order too. If you don’t do this,
|
your program may fail when running on or talking to other kinds of
|
machines.
|
|
If you use ‘getservbyname’ and ‘gethostbyname’ or ‘inet_addr’ to get
|
the port number and host address, the values are already in network byte
|
order, and you can copy them directly into the ‘sockaddr_in’ structure.
|
|
Otherwise, you have to convert the values explicitly. Use ‘htons’
|
and ‘ntohs’ to convert values for the ‘sin_port’ member. Use ‘htonl’
|
and ‘ntohl’ to convert IPv4 addresses for the ‘sin_addr’ member.
|
(Remember, ‘struct in_addr’ is equivalent to ‘uint32_t’.) These
|
functions are declared in ‘netinet/in.h’.
|
|
-- Function: uint16_t htons (uint16_t HOSTSHORT)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function converts the ‘uint16_t’ integer HOSTSHORT from host
|
byte order to network byte order.
|
|
-- Function: uint16_t ntohs (uint16_t NETSHORT)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function converts the ‘uint16_t’ integer NETSHORT from network
|
byte order to host byte order.
|
|
-- Function: uint32_t htonl (uint32_t HOSTLONG)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function converts the ‘uint32_t’ integer HOSTLONG from host
|
byte order to network byte order.
|
|
This is used for IPv4 Internet addresses.
|
|
-- Function: uint32_t ntohl (uint32_t NETLONG)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function converts the ‘uint32_t’ integer NETLONG from network
|
byte order to host byte order.
|
|
This is used for IPv4 Internet addresses.
|
|
|
File: libc.info, Node: Protocols Database, Next: Inet Example, Prev: Byte Order, Up: Internet Namespace
|
|
16.6.6 Protocols Database
|
-------------------------
|
|
The communications protocol used with a socket controls low-level
|
details of how data are exchanged. For example, the protocol implements
|
things like checksums to detect errors in transmissions, and routing
|
instructions for messages. Normal user programs have little reason to
|
mess with these details directly.
|
|
The default communications protocol for the Internet namespace
|
depends on the communication style. For stream communication, the
|
default is TCP (“transmission control protocol”). For datagram
|
communication, the default is UDP (“user datagram protocol”). For
|
reliable datagram communication, the default is RDP (“reliable datagram
|
protocol”). You should nearly always use the default.
|
|
Internet protocols are generally specified by a name instead of a
|
number. The network protocols that a host knows about are stored in a
|
database. This is usually either derived from the file
|
‘/etc/protocols’, or it may be an equivalent provided by a name server.
|
You look up the protocol number associated with a named protocol in the
|
database using the ‘getprotobyname’ function.
|
|
Here are detailed descriptions of the utilities for accessing the
|
protocols database. These are declared in ‘netdb.h’.
|
|
-- Data Type: struct protoent
|
This data type is used to represent entries in the network
|
protocols database. It has the following members:
|
|
‘char *p_name’
|
This is the official name of the protocol.
|
|
‘char **p_aliases’
|
These are alternate names for the protocol, specified as an
|
array of strings. The last element of the array is a null
|
pointer.
|
|
‘int p_proto’
|
This is the protocol number (in host byte order); use this
|
member as the PROTOCOL argument to ‘socket’.
|
|
You can use ‘getprotobyname’ and ‘getprotobynumber’ to search the
|
protocols database for a specific protocol. The information is returned
|
in a statically-allocated structure; you must copy the information if
|
you need to save it across calls.
|
|
-- Function: struct protoent * getprotobyname (const char *NAME)
|
Preliminary: | MT-Unsafe race:protobyname locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
The ‘getprotobyname’ function returns information about the network
|
protocol named NAME. If there is no such protocol, it returns a
|
null pointer.
|
|
-- Function: struct protoent * getprotobynumber (int PROTOCOL)
|
Preliminary: | MT-Unsafe race:protobynumber locale | AS-Unsafe
|
dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note
|
POSIX Safety Concepts::.
|
|
The ‘getprotobynumber’ function returns information about the
|
network protocol with number PROTOCOL. If there is no such
|
protocol, it returns a null pointer.
|
|
You can also scan the whole protocols database one protocol at a time
|
by using ‘setprotoent’, ‘getprotoent’ and ‘endprotoent’. Be careful
|
when using these functions because they are not reentrant.
|
|
-- Function: void setprotoent (int STAYOPEN)
|
Preliminary: | MT-Unsafe race:protoent locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function opens the protocols database to begin scanning it.
|
|
If the STAYOPEN argument is nonzero, this sets a flag so that
|
subsequent calls to ‘getprotobyname’ or ‘getprotobynumber’ will not
|
close the database (as they usually would). This makes for more
|
efficiency if you call those functions several times, by avoiding
|
reopening the database for each call.
|
|
-- Function: struct protoent * getprotoent (void)
|
Preliminary: | MT-Unsafe race:protoent race:protoentbuf locale |
|
AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
|
*Note POSIX Safety Concepts::.
|
|
This function returns the next entry in the protocols database. It
|
returns a null pointer if there are no more entries.
|
|
-- Function: void endprotoent (void)
|
Preliminary: | MT-Unsafe race:protoent locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function closes the protocols database.
|
|
|
File: libc.info, Node: Inet Example, Prev: Protocols Database, Up: Internet Namespace
|
|
16.6.7 Internet Socket Example
|
------------------------------
|
|
Here is an example showing how to create and name a socket in the
|
Internet namespace. The newly created socket exists on the machine that
|
the program is running on. Rather than finding and using the machine’s
|
Internet address, this example specifies ‘INADDR_ANY’ as the host
|
address; the system replaces that with the machine’s actual address.
|
|
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <sys/socket.h>
|
#include <netinet/in.h>
|
|
int
|
make_socket (uint16_t port)
|
{
|
int sock;
|
struct sockaddr_in name;
|
|
/* Create the socket. */
|
sock = socket (PF_INET, SOCK_STREAM, 0);
|
if (sock < 0)
|
{
|
perror ("socket");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Give the socket a name. */
|
name.sin_family = AF_INET;
|
name.sin_port = htons (port);
|
name.sin_addr.s_addr = htonl (INADDR_ANY);
|
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
|
{
|
perror ("bind");
|
exit (EXIT_FAILURE);
|
}
|
|
return sock;
|
}
|
|
Here is another example, showing how you can fill in a ‘sockaddr_in’
|
structure, given a host name string and a port number:
|
|
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <sys/socket.h>
|
#include <netinet/in.h>
|
#include <netdb.h>
|
|
void
|
init_sockaddr (struct sockaddr_in *name,
|
const char *hostname,
|
uint16_t port)
|
{
|
struct hostent *hostinfo;
|
|
name->sin_family = AF_INET;
|
name->sin_port = htons (port);
|
hostinfo = gethostbyname (hostname);
|
if (hostinfo == NULL)
|
{
|
fprintf (stderr, "Unknown host %s.\n", hostname);
|
exit (EXIT_FAILURE);
|
}
|
name->sin_addr = *(struct in_addr *) hostinfo->h_addr;
|
}
|
|
|
File: libc.info, Node: Misc Namespaces, Next: Open/Close Sockets, Prev: Internet Namespace, Up: Sockets
|
|
16.7 Other Namespaces
|
=====================
|
|
Certain other namespaces and associated protocol families are supported
|
but not documented yet because they are not often used. ‘PF_NS’ refers
|
to the Xerox Network Software protocols. ‘PF_ISO’ stands for Open
|
Systems Interconnect. ‘PF_CCITT’ refers to protocols from CCITT.
|
‘socket.h’ defines these symbols and others naming protocols not
|
actually implemented.
|
|
‘PF_IMPLINK’ is used for communicating between hosts and Internet
|
Message Processors. For information on this and ‘PF_ROUTE’, an
|
occasionally-used local area routing protocol, see the GNU Hurd Manual
|
(to appear in the future).
|
|
|
File: libc.info, Node: Open/Close Sockets, Next: Connections, Prev: Misc Namespaces, Up: Sockets
|
|
16.8 Opening and Closing Sockets
|
================================
|
|
This section describes the actual library functions for opening and
|
closing sockets. The same functions work for all namespaces and
|
connection styles.
|
|
* Menu:
|
|
* Creating a Socket:: How to open a socket.
|
* Closing a Socket:: How to close a socket.
|
* Socket Pairs:: These are created like pipes.
|
|
|
File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets
|
|
16.8.1 Creating a Socket
|
------------------------
|
|
The primitive for creating a socket is the ‘socket’ function, declared
|
in ‘sys/socket.h’.
|
|
-- Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
|
Concepts::.
|
|
This function creates a socket and specifies communication style
|
STYLE, which should be one of the socket styles listed in *note
|
Communication Styles::. The NAMESPACE argument specifies the
|
namespace; it must be ‘PF_LOCAL’ (*note Local Namespace::) or
|
‘PF_INET’ (*note Internet Namespace::). PROTOCOL designates the
|
specific protocol (*note Socket Concepts::); zero is usually right
|
for PROTOCOL.
|
|
The return value from ‘socket’ is the file descriptor for the new
|
socket, or ‘-1’ in case of error. The following ‘errno’ error
|
conditions are defined for this function:
|
|
‘EPROTONOSUPPORT’
|
The PROTOCOL or STYLE is not supported by the NAMESPACE
|
specified.
|
|
‘EMFILE’
|
The process already has too many file descriptors open.
|
|
‘ENFILE’
|
The system already has too many file descriptors open.
|
|
‘EACCES’
|
The process does not have the privilege to create a socket of
|
the specified STYLE or PROTOCOL.
|
|
‘ENOBUFS’
|
The system ran out of internal buffer space.
|
|
The file descriptor returned by the ‘socket’ function supports both
|
read and write operations. However, like pipes, sockets do not
|
support file positioning operations.
|
|
For examples of how to call the ‘socket’ function, see *note Local
|
Socket Example::, or *note Inet Example::.
|
|
|
File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets
|
|
16.8.2 Closing a Socket
|
-----------------------
|
|
When you have finished using a socket, you can simply close its file
|
descriptor with ‘close’; see *note Opening and Closing Files::. If
|
there is still data waiting to be transmitted over the connection,
|
normally ‘close’ tries to complete this transmission. You can control
|
this behavior using the ‘SO_LINGER’ socket option to specify a timeout
|
period; see *note Socket Options::.
|
|
You can also shut down only reception or transmission on a connection
|
by calling ‘shutdown’, which is declared in ‘sys/socket.h’.
|
|
-- Function: int shutdown (int SOCKET, int HOW)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘shutdown’ function shuts down the connection of socket SOCKET.
|
The argument HOW specifies what action to perform:
|
|
‘0’
|
Stop receiving data for this socket. If further data arrives,
|
reject it.
|
|
‘1’
|
Stop trying to transmit data from this socket. Discard any
|
data waiting to be sent. Stop looking for acknowledgement of
|
data already sent; don’t retransmit it if it is lost.
|
|
‘2’
|
Stop both reception and transmission.
|
|
The return value is ‘0’ on success and ‘-1’ on failure. The
|
following ‘errno’ error conditions are defined for this function:
|
|
‘EBADF’
|
SOCKET is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
SOCKET is not a socket.
|
|
‘ENOTCONN’
|
SOCKET is not connected.
|
|
|
File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets
|
|
16.8.3 Socket Pairs
|
-------------------
|
|
A "socket pair" consists of a pair of connected (but unnamed) sockets.
|
It is very similar to a pipe and is used in much the same way. Socket
|
pairs are created with the ‘socketpair’ function, declared in
|
‘sys/socket.h’. A socket pair is much like a pipe; the main difference
|
is that the socket pair is bidirectional, whereas the pipe has one
|
input-only end and one output-only end (*note Pipes and FIFOs::).
|
|
-- Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL,
|
int FILEDES[2])
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
|
Concepts::.
|
|
This function creates a socket pair, returning the file descriptors
|
in ‘FILEDES[0]’ and ‘FILEDES[1]’. The socket pair is a full-duplex
|
communications channel, so that both reading and writing may be
|
performed at either end.
|
|
The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for
|
the ‘socket’ function. STYLE should be one of the communication
|
styles listed in *note Communication Styles::. The NAMESPACE
|
argument specifies the namespace, which must be ‘AF_LOCAL’ (*note
|
Local Namespace::); PROTOCOL specifies the communications protocol,
|
but zero is the only meaningful value.
|
|
If STYLE specifies a connectionless communication style, then the
|
two sockets you get are not _connected_, strictly speaking, but
|
each of them knows the other as the default destination address, so
|
they can send packets to each other.
|
|
The ‘socketpair’ function returns ‘0’ on success and ‘-1’ on
|
failure. The following ‘errno’ error conditions are defined for
|
this function:
|
|
‘EMFILE’
|
The process has too many file descriptors open.
|
|
‘EAFNOSUPPORT’
|
The specified namespace is not supported.
|
|
‘EPROTONOSUPPORT’
|
The specified protocol is not supported.
|
|
‘EOPNOTSUPP’
|
The specified protocol does not support the creation of socket
|
pairs.
|
|
|
File: libc.info, Node: Connections, Next: Datagrams, Prev: Open/Close Sockets, Up: Sockets
|
|
16.9 Using Sockets with Connections
|
===================================
|
|
The most common communication styles involve making a connection to a
|
particular other socket, and then exchanging data with that socket over
|
and over. Making a connection is asymmetric; one side (the "client")
|
acts to request a connection, while the other side (the "server") makes
|
a socket and waits for the connection request.
|
|
* Menu:
|
|
* 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.
|
|
|
File: libc.info, Node: Connecting, Next: Listening, Up: Connections
|
|
16.9.1 Making a Connection
|
--------------------------
|
|
In making a connection, the client makes a connection while the server
|
waits for and accepts the connection. Here we discuss what the client
|
program must do with the ‘connect’ function, which is declared in
|
‘sys/socket.h’.
|
|
-- Function: int connect (int SOCKET, struct sockaddr *ADDR, socklen_t
|
LENGTH)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘connect’ function initiates a connection from the socket with
|
file descriptor SOCKET to the socket whose address is specified by
|
the ADDR and LENGTH arguments. (This socket is typically on
|
another machine, and it must be already set up as a server.) *Note
|
Socket Addresses::, for information about how these arguments are
|
interpreted.
|
|
Normally, ‘connect’ waits until the server responds to the request
|
before it returns. You can set nonblocking mode on the socket
|
SOCKET to make ‘connect’ return immediately without waiting for the
|
response. *Note File Status Flags::, for information about
|
nonblocking mode.
|
|
The normal return value from ‘connect’ is ‘0’. If an error occurs,
|
‘connect’ returns ‘-1’. The following ‘errno’ error conditions are
|
defined for this function:
|
|
‘EBADF’
|
The socket SOCKET is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
File descriptor SOCKET is not a socket.
|
|
‘EADDRNOTAVAIL’
|
The specified address is not available on the remote machine.
|
|
‘EAFNOSUPPORT’
|
The namespace of the ADDR is not supported by this socket.
|
|
‘EISCONN’
|
The socket SOCKET is already connected.
|
|
‘ETIMEDOUT’
|
The attempt to establish the connection timed out.
|
|
‘ECONNREFUSED’
|
The server has actively refused to establish the connection.
|
|
‘ENETUNREACH’
|
The network of the given ADDR isn’t reachable from this host.
|
|
‘EADDRINUSE’
|
The socket address of the given ADDR is already in use.
|
|
‘EINPROGRESS’
|
The socket SOCKET is non-blocking and the connection could not
|
be established immediately. You can determine when the
|
connection is completely established with ‘select’; *note
|
Waiting for I/O::. Another ‘connect’ call on the same socket,
|
before the connection is completely established, will fail
|
with ‘EALREADY’.
|
|
‘EALREADY’
|
The socket SOCKET is non-blocking and already has a pending
|
connection in progress (see ‘EINPROGRESS’ above).
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
|
File: libc.info, Node: Listening, Next: Accepting Connections, Prev: Connecting, Up: Connections
|
|
16.9.2 Listening for Connections
|
--------------------------------
|
|
Now let us consider what the server process must do to accept
|
connections on a socket. First it must use the ‘listen’ function to
|
enable connection requests on the socket, and then accept each incoming
|
connection with a call to ‘accept’ (*note Accepting Connections::).
|
Once connection requests are enabled on a server socket, the ‘select’
|
function reports when the socket has a connection ready to be accepted
|
(*note Waiting for I/O::).
|
|
The ‘listen’ function is not allowed for sockets using connectionless
|
communication styles.
|
|
You can write a network server that does not even start running until
|
a connection to it is requested. *Note Inetd Servers::.
|
|
In the Internet namespace, there are no special protection mechanisms
|
for controlling access to a port; any process on any machine can make a
|
connection to your server. If you want to restrict access to your
|
server, make it examine the addresses associated with connection
|
requests or implement some other handshaking or identification protocol.
|
|
In the local namespace, the ordinary file protection bits control who
|
has access to connect to the socket.
|
|
-- Function: int listen (int SOCKET, int N)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
|
Concepts::.
|
|
The ‘listen’ function enables the socket SOCKET to accept
|
connections, thus making it a server socket.
|
|
The argument N specifies the length of the queue for pending
|
connections. When the queue fills, new clients attempting to
|
connect fail with ‘ECONNREFUSED’ until the server calls ‘accept’ to
|
accept a connection from the queue.
|
|
The ‘listen’ function returns ‘0’ on success and ‘-1’ on failure.
|
The following ‘errno’ error conditions are defined for this
|
function:
|
|
‘EBADF’
|
The argument SOCKET is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
The argument SOCKET is not a socket.
|
|
‘EOPNOTSUPP’
|
The socket SOCKET does not support this operation.
|
|
|
File: libc.info, Node: Accepting Connections, Next: Who is Connected, Prev: Listening, Up: Connections
|
|
16.9.3 Accepting Connections
|
----------------------------
|
|
When a server receives a connection request, it can complete the
|
connection by accepting the request. Use the function ‘accept’ to do
|
this.
|
|
A socket that has been established as a server can accept connection
|
requests from multiple clients. The server’s original socket _does not
|
become part of the connection_; instead, ‘accept’ makes a new socket
|
which participates in the connection. ‘accept’ returns the descriptor
|
for this socket. The server’s original socket remains available for
|
listening for further connection requests.
|
|
The number of pending connection requests on a server socket is
|
finite. If connection requests arrive from clients faster than the
|
server can act upon them, the queue can fill up and additional requests
|
are refused with an ‘ECONNREFUSED’ error. You can specify the maximum
|
length of this queue as an argument to the ‘listen’ function, although
|
the system may also impose its own internal limit on the length of this
|
queue.
|
|
-- Function: int accept (int SOCKET, struct sockaddr *ADDR, socklen_t
|
*LENGTH_PTR)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
|
Concepts::.
|
|
This function is used to accept a connection request on the server
|
socket SOCKET.
|
|
The ‘accept’ function waits if there are no connections pending,
|
unless the socket SOCKET has nonblocking mode set. (You can use
|
‘select’ to wait for a pending connection, with a nonblocking
|
socket.) *Note File Status Flags::, for information about
|
nonblocking mode.
|
|
The ADDR and LENGTH-PTR arguments are used to return information
|
about the name of the client socket that initiated the connection.
|
*Note Socket Addresses::, for information about the format of the
|
information.
|
|
Accepting a connection does not make SOCKET part of the connection.
|
Instead, it creates a new socket which becomes connected. The
|
normal return value of ‘accept’ is the file descriptor for the new
|
socket.
|
|
After ‘accept’, the original socket SOCKET remains open and
|
unconnected, and continues listening until you close it. You can
|
accept further connections with SOCKET by calling ‘accept’ again.
|
|
If an error occurs, ‘accept’ returns ‘-1’. The following ‘errno’
|
error conditions are defined for this function:
|
|
‘EBADF’
|
The SOCKET argument is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
The descriptor SOCKET argument is not a socket.
|
|
‘EOPNOTSUPP’
|
The descriptor SOCKET does not support this operation.
|
|
‘EWOULDBLOCK’
|
SOCKET has nonblocking mode set, and there are no pending
|
connections immediately available.
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
The ‘accept’ function is not allowed for sockets using connectionless
|
communication styles.
|
|
|
File: libc.info, Node: Who is Connected, Next: Transferring Data, Prev: Accepting Connections, Up: Connections
|
|
16.9.4 Who is Connected to Me?
|
------------------------------
|
|
-- Function: int getpeername (int SOCKET, struct sockaddr *ADDR,
|
socklen_t *LENGTH-PTR)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘getpeername’ function returns the address of the socket that
|
SOCKET is connected to; it stores the address in the memory space
|
specified by ADDR and LENGTH-PTR. It stores the length of the
|
address in ‘*LENGTH-PTR’.
|
|
*Note Socket Addresses::, for information about the format of the
|
address. In some operating systems, ‘getpeername’ works only for
|
sockets in the Internet domain.
|
|
The return value is ‘0’ on success and ‘-1’ on error. The
|
following ‘errno’ error conditions are defined for this function:
|
|
‘EBADF’
|
The argument SOCKET is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
The descriptor SOCKET is not a socket.
|
|
‘ENOTCONN’
|
The socket SOCKET is not connected.
|
|
‘ENOBUFS’
|
There are not enough internal buffers available.
|
|
|
File: libc.info, Node: Transferring Data, Next: Byte Stream Example, Prev: Who is Connected, Up: Connections
|
|
16.9.5 Transferring Data
|
------------------------
|
|
Once a socket has been connected to a peer, you can use the ordinary
|
‘read’ and ‘write’ operations (*note I/O Primitives::) to transfer data.
|
A socket is a two-way communications channel, so read and write
|
operations can be performed at either end.
|
|
There are also some I/O modes that are specific to socket operations.
|
In order to specify these modes, you must use the ‘recv’ and ‘send’
|
functions instead of the more generic ‘read’ and ‘write’ functions. The
|
‘recv’ and ‘send’ functions take an additional argument which you can
|
use to specify various flags to control special I/O modes. For example,
|
you can specify the ‘MSG_OOB’ flag to read or write out-of-band data,
|
the ‘MSG_PEEK’ flag to peek at input, or the ‘MSG_DONTROUTE’ flag to
|
control inclusion of routing information on output.
|
|
* Menu:
|
|
* Sending Data:: Sending data with ‘send’.
|
* Receiving Data:: Reading data with ‘recv’.
|
* Socket Data Options:: Using ‘send’ and ‘recv’.
|
|
|
File: libc.info, Node: Sending Data, Next: Receiving Data, Up: Transferring Data
|
|
16.9.5.1 Sending Data
|
.....................
|
|
The ‘send’ function is declared in the header file ‘sys/socket.h’. If
|
your FLAGS argument is zero, you can just as well use ‘write’ instead of
|
‘send’; see *note I/O Primitives::. If the socket was connected but the
|
connection has broken, you get a ‘SIGPIPE’ signal for any use of ‘send’
|
or ‘write’ (*note Miscellaneous Signals::).
|
|
-- Function: ssize_t send (int SOCKET, const void *BUFFER, size_t SIZE,
|
int FLAGS)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘send’ function is like ‘write’, but with the additional flags
|
FLAGS. The possible values of FLAGS are described in *note Socket
|
Data Options::.
|
|
This function returns the number of bytes transmitted, or ‘-1’ on
|
failure. If the socket is nonblocking, then ‘send’ (like ‘write’)
|
can return after sending just part of the data. *Note File Status
|
Flags::, for information about nonblocking mode.
|
|
Note, however, that a successful return value merely indicates that
|
the message has been sent without error, not necessarily that it
|
has been received without error.
|
|
The following ‘errno’ error conditions are defined for this
|
function:
|
|
‘EBADF’
|
The SOCKET argument is not a valid file descriptor.
|
|
‘EINTR’
|
The operation was interrupted by a signal before any data was
|
sent. *Note Interrupted Primitives::.
|
|
‘ENOTSOCK’
|
The descriptor SOCKET is not a socket.
|
|
‘EMSGSIZE’
|
The socket type requires that the message be sent atomically,
|
but the message is too large for this to be possible.
|
|
‘EWOULDBLOCK’
|
Nonblocking mode has been set on the socket, and the write
|
operation would block. (Normally ‘send’ blocks until the
|
operation can be completed.)
|
|
‘ENOBUFS’
|
There is not enough internal buffer space available.
|
|
‘ENOTCONN’
|
You never connected this socket.
|
|
‘EPIPE’
|
This socket was connected but the connection is now broken.
|
In this case, ‘send’ generates a ‘SIGPIPE’ signal first; if
|
that signal is ignored or blocked, or if its handler returns,
|
then ‘send’ fails with ‘EPIPE’.
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
|
File: libc.info, Node: Receiving Data, Next: Socket Data Options, Prev: Sending Data, Up: Transferring Data
|
|
16.9.5.2 Receiving Data
|
.......................
|
|
The ‘recv’ function is declared in the header file ‘sys/socket.h’. If
|
your FLAGS argument is zero, you can just as well use ‘read’ instead of
|
‘recv’; see *note I/O Primitives::.
|
|
-- Function: ssize_t recv (int SOCKET, void *BUFFER, size_t SIZE, int
|
FLAGS)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘recv’ function is like ‘read’, but with the additional flags
|
FLAGS. The possible values of FLAGS are described in *note Socket
|
Data Options::.
|
|
If nonblocking mode is set for SOCKET, and no data are available to
|
be read, ‘recv’ fails immediately rather than waiting. *Note File
|
Status Flags::, for information about nonblocking mode.
|
|
This function returns the number of bytes received, or ‘-1’ on
|
failure. The following ‘errno’ error conditions are defined for
|
this function:
|
|
‘EBADF’
|
The SOCKET argument is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
The descriptor SOCKET is not a socket.
|
|
‘EWOULDBLOCK’
|
Nonblocking mode has been set on the socket, and the read
|
operation would block. (Normally, ‘recv’ blocks until there
|
is input available to be read.)
|
|
‘EINTR’
|
The operation was interrupted by a signal before any data was
|
read. *Note Interrupted Primitives::.
|
|
‘ENOTCONN’
|
You never connected this socket.
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
|
File: libc.info, Node: Socket Data Options, Prev: Receiving Data, Up: Transferring Data
|
|
16.9.5.3 Socket Data Options
|
............................
|
|
The FLAGS argument to ‘send’ and ‘recv’ is a bit mask. You can
|
bitwise-OR the values of the following macros together to obtain a value
|
for this argument. All are defined in the header file ‘sys/socket.h’.
|
|
-- Macro: int MSG_OOB
|
Send or receive out-of-band data. *Note Out-of-Band Data::.
|
|
-- Macro: int MSG_PEEK
|
Look at the data but don’t remove it from the input queue. This is
|
only meaningful with input functions such as ‘recv’, not with
|
‘send’.
|
|
-- Macro: int MSG_DONTROUTE
|
Don’t include routing information in the message. This is only
|
meaningful with output operations, and is usually only of interest
|
for diagnostic or routing programs. We don’t try to explain it
|
here.
|
|
|
File: libc.info, Node: Byte Stream Example, Next: Server Example, Prev: Transferring Data, Up: Connections
|
|
16.9.6 Byte Stream Socket Example
|
---------------------------------
|
|
Here is an example client program that makes a connection for a byte
|
stream socket in the Internet namespace. It doesn’t do anything
|
particularly interesting once it has connected to the server; it just
|
sends a text string to the server and exits.
|
|
This program uses ‘init_sockaddr’ to set up the socket address; see
|
*note Inet Example::.
|
|
|
#include <stdio.h>
|
#include <errno.h>
|
#include <stdlib.h>
|
#include <unistd.h>
|
#include <sys/types.h>
|
#include <sys/socket.h>
|
#include <netinet/in.h>
|
#include <netdb.h>
|
|
#define PORT 5555
|
#define MESSAGE "Yow!!! Are we having fun yet?!?"
|
#define SERVERHOST "www.gnu.org"
|
|
void
|
write_to_server (int filedes)
|
{
|
int nbytes;
|
|
nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
|
if (nbytes < 0)
|
{
|
perror ("write");
|
exit (EXIT_FAILURE);
|
}
|
}
|
|
|
int
|
main (void)
|
{
|
extern void init_sockaddr (struct sockaddr_in *name,
|
const char *hostname,
|
uint16_t port);
|
int sock;
|
struct sockaddr_in servername;
|
|
/* Create the socket. */
|
sock = socket (PF_INET, SOCK_STREAM, 0);
|
if (sock < 0)
|
{
|
perror ("socket (client)");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Connect to the server. */
|
init_sockaddr (&servername, SERVERHOST, PORT);
|
if (0 > connect (sock,
|
(struct sockaddr *) &servername,
|
sizeof (servername)))
|
{
|
perror ("connect (client)");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Send data to the server. */
|
write_to_server (sock);
|
close (sock);
|
exit (EXIT_SUCCESS);
|
}
|
|
|
File: libc.info, Node: Server Example, Next: Out-of-Band Data, Prev: Byte Stream Example, Up: Connections
|
|
16.9.7 Byte Stream Connection Server Example
|
--------------------------------------------
|
|
The server end is much more complicated. Since we want to allow
|
multiple clients to be connected to the server at the same time, it
|
would be incorrect to wait for input from a single client by simply
|
calling ‘read’ or ‘recv’. Instead, the right thing to do is to use
|
‘select’ (*note Waiting for I/O::) to wait for input on all of the open
|
sockets. This also allows the server to deal with additional connection
|
requests.
|
|
This particular server doesn’t do anything interesting once it has
|
gotten a message from a client. It does close the socket for that
|
client when it detects an end-of-file condition (resulting from the
|
client shutting down its end of the connection).
|
|
This program uses ‘make_socket’ to set up the socket address; see
|
*note Inet Example::.
|
|
|
#include <stdio.h>
|
#include <errno.h>
|
#include <stdlib.h>
|
#include <unistd.h>
|
#include <sys/types.h>
|
#include <sys/socket.h>
|
#include <netinet/in.h>
|
#include <netdb.h>
|
|
#define PORT 5555
|
#define MAXMSG 512
|
|
int
|
read_from_client (int filedes)
|
{
|
char buffer[MAXMSG];
|
int nbytes;
|
|
nbytes = read (filedes, buffer, MAXMSG);
|
if (nbytes < 0)
|
{
|
/* Read error. */
|
perror ("read");
|
exit (EXIT_FAILURE);
|
}
|
else if (nbytes == 0)
|
/* End-of-file. */
|
return -1;
|
else
|
{
|
/* Data read. */
|
fprintf (stderr, "Server: got message: `%s'\n", buffer);
|
return 0;
|
}
|
}
|
|
int
|
main (void)
|
{
|
extern int make_socket (uint16_t port);
|
int sock;
|
fd_set active_fd_set, read_fd_set;
|
int i;
|
struct sockaddr_in clientname;
|
size_t size;
|
|
/* Create the socket and set it up to accept connections. */
|
sock = make_socket (PORT);
|
if (listen (sock, 1) < 0)
|
{
|
perror ("listen");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Initialize the set of active sockets. */
|
FD_ZERO (&active_fd_set);
|
FD_SET (sock, &active_fd_set);
|
|
while (1)
|
{
|
/* Block until input arrives on one or more active sockets. */
|
read_fd_set = active_fd_set;
|
if (select (FD_SETSIZE, &read_fd_set, NULL, NULL, NULL) < 0)
|
{
|
perror ("select");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Service all the sockets with input pending. */
|
for (i = 0; i < FD_SETSIZE; ++i)
|
if (FD_ISSET (i, &read_fd_set))
|
{
|
if (i == sock)
|
{
|
/* Connection request on original socket. */
|
int new;
|
size = sizeof (clientname);
|
new = accept (sock,
|
(struct sockaddr *) &clientname,
|
&size);
|
if (new < 0)
|
{
|
perror ("accept");
|
exit (EXIT_FAILURE);
|
}
|
fprintf (stderr,
|
"Server: connect from host %s, port %hd.\n",
|
inet_ntoa (clientname.sin_addr),
|
ntohs (clientname.sin_port));
|
FD_SET (new, &active_fd_set);
|
}
|
else
|
{
|
/* Data arriving on an already-connected socket. */
|
if (read_from_client (i) < 0)
|
{
|
close (i);
|
FD_CLR (i, &active_fd_set);
|
}
|
}
|
}
|
}
|
}
|
|
|
File: libc.info, Node: Out-of-Band Data, Prev: Server Example, Up: Connections
|
|
16.9.8 Out-of-Band Data
|
-----------------------
|
|
Streams with connections permit "out-of-band" data that is delivered
|
with higher priority than ordinary data. Typically the reason for
|
sending out-of-band data is to send notice of an exceptional condition.
|
To send out-of-band data use ‘send’, specifying the flag ‘MSG_OOB’
|
(*note Sending Data::).
|
|
Out-of-band data are received with higher priority because the
|
receiving process need not read it in sequence; to read the next
|
available out-of-band data, use ‘recv’ with the ‘MSG_OOB’ flag (*note
|
Receiving Data::). Ordinary read operations do not read out-of-band
|
data; they read only ordinary data.
|
|
When a socket finds that out-of-band data are on their way, it sends
|
a ‘SIGURG’ signal to the owner process or process group of the socket.
|
You can specify the owner using the ‘F_SETOWN’ command to the ‘fcntl’
|
function; see *note Interrupt Input::. You must also establish a
|
handler for this signal, as described in *note Signal Handling::, in
|
order to take appropriate action such as reading the out-of-band data.
|
|
Alternatively, you can test for pending out-of-band data, or wait
|
until there is out-of-band data, using the ‘select’ function; it can
|
wait for an exceptional condition on the socket. *Note Waiting for
|
I/O::, for more information about ‘select’.
|
|
Notification of out-of-band data (whether with ‘SIGURG’ or with
|
‘select’) indicates that out-of-band data are on the way; the data may
|
not actually arrive until later. If you try to read the out-of-band
|
data before it arrives, ‘recv’ fails with an ‘EWOULDBLOCK’ error.
|
|
Sending out-of-band data automatically places a “mark” in the stream
|
of ordinary data, showing where in the sequence the out-of-band data
|
“would have been”. This is useful when the meaning of out-of-band data
|
is “cancel everything sent so far”. Here is how you can test, in the
|
receiving process, whether any ordinary data was sent before the mark:
|
|
success = ioctl (socket, SIOCATMARK, &atmark);
|
|
The ‘integer’ variable ATMARK is set to a nonzero value if the
|
socket’s read pointer has reached the “mark”.
|
|
Here’s a function to discard any ordinary data preceding the
|
out-of-band mark:
|
|
int
|
discard_until_mark (int socket)
|
{
|
while (1)
|
{
|
/* This is not an arbitrary limit; any size will do. */
|
char buffer[1024];
|
int atmark, success;
|
|
/* If we have reached the mark, return. */
|
success = ioctl (socket, SIOCATMARK, &atmark);
|
if (success < 0)
|
perror ("ioctl");
|
if (result)
|
return;
|
|
/* Otherwise, read a bunch of ordinary data and discard it.
|
This is guaranteed not to read past the mark
|
if it starts before the mark. */
|
success = read (socket, buffer, sizeof buffer);
|
if (success < 0)
|
perror ("read");
|
}
|
}
|
|
If you don’t want to discard the ordinary data preceding the mark,
|
you may need to read some of it anyway, to make room in internal system
|
buffers for the out-of-band data. If you try to read out-of-band data
|
and get an ‘EWOULDBLOCK’ error, try reading some ordinary data (saving
|
it so that you can use it when you want it) and see if that makes room.
|
Here is an example:
|
|
struct buffer
|
{
|
char *buf;
|
int size;
|
struct buffer *next;
|
};
|
|
/* Read the out-of-band data from SOCKET and return it
|
as a ‘struct buffer’, which records the address of the data
|
and its size.
|
|
It may be necessary to read some ordinary data
|
in order to make room for the out-of-band data.
|
If so, the ordinary data are saved as a chain of buffers
|
found in the ‘next’ field of the value. */
|
|
struct buffer *
|
read_oob (int socket)
|
{
|
struct buffer *tail = 0;
|
struct buffer *list = 0;
|
|
while (1)
|
{
|
/* This is an arbitrary limit.
|
Does anyone know how to do this without a limit? */
|
#define BUF_SZ 1024
|
char *buf = (char *) xmalloc (BUF_SZ);
|
int success;
|
int atmark;
|
|
/* Try again to read the out-of-band data. */
|
success = recv (socket, buf, BUF_SZ, MSG_OOB);
|
if (success >= 0)
|
{
|
/* We got it, so return it. */
|
struct buffer *link
|
= (struct buffer *) xmalloc (sizeof (struct buffer));
|
link->buf = buf;
|
link->size = success;
|
link->next = list;
|
return link;
|
}
|
|
/* If we fail, see if we are at the mark. */
|
success = ioctl (socket, SIOCATMARK, &atmark);
|
if (success < 0)
|
perror ("ioctl");
|
if (atmark)
|
{
|
/* At the mark; skipping past more ordinary data cannot help.
|
So just wait a while. */
|
sleep (1);
|
continue;
|
}
|
|
/* Otherwise, read a bunch of ordinary data and save it.
|
This is guaranteed not to read past the mark
|
if it starts before the mark. */
|
success = read (socket, buf, BUF_SZ);
|
if (success < 0)
|
perror ("read");
|
|
/* Save this data in the buffer list. */
|
{
|
struct buffer *link
|
= (struct buffer *) xmalloc (sizeof (struct buffer));
|
link->buf = buf;
|
link->size = success;
|
|
/* Add the new link to the end of the list. */
|
if (tail)
|
tail->next = link;
|
else
|
list = link;
|
tail = link;
|
}
|
}
|
}
|
|
|
File: libc.info, Node: Datagrams, Next: Inetd, Prev: Connections, Up: Sockets
|
|
16.10 Datagram Socket Operations
|
================================
|
|
This section describes how to use communication styles that don’t use
|
connections (styles ‘SOCK_DGRAM’ and ‘SOCK_RDM’). Using these styles,
|
you group data into packets and each packet is an independent
|
communication. You specify the destination for each packet
|
individually.
|
|
Datagram packets are like letters: you send each one independently
|
with its own destination address, and they may arrive in the wrong order
|
or not at all.
|
|
The ‘listen’ and ‘accept’ functions are not allowed for sockets using
|
connectionless communication styles.
|
|
* Menu:
|
|
* 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.
|
|
|
File: libc.info, Node: Sending Datagrams, Next: Receiving Datagrams, Up: Datagrams
|
|
16.10.1 Sending Datagrams
|
-------------------------
|
|
The normal way of sending data on a datagram socket is by using the
|
‘sendto’ function, declared in ‘sys/socket.h’.
|
|
You can call ‘connect’ on a datagram socket, but this only specifies
|
a default destination for further data transmission on the socket. When
|
a socket has a default destination you can use ‘send’ (*note Sending
|
Data::) or even ‘write’ (*note I/O Primitives::) to send a packet there.
|
You can cancel the default destination by calling ‘connect’ using an
|
address format of ‘AF_UNSPEC’ in the ADDR argument. *Note Connecting::,
|
for more information about the ‘connect’ function.
|
|
-- Function: ssize_t sendto (int SOCKET, const void *BUFFER, size_t
|
SIZE, int FLAGS, struct sockaddr *ADDR, socklen_t LENGTH)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘sendto’ function transmits the data in the BUFFER through the
|
socket SOCKET to the destination address specified by the ADDR and
|
LENGTH arguments. The SIZE argument specifies the number of bytes
|
to be transmitted.
|
|
The FLAGS are interpreted the same way as for ‘send’; see *note
|
Socket Data Options::.
|
|
The return value and error conditions are also the same as for
|
‘send’, but you cannot rely on the system to detect errors and
|
report them; the most common error is that the packet is lost or
|
there is no-one at the specified address to receive it, and the
|
operating system on your machine usually does not know this.
|
|
It is also possible for one call to ‘sendto’ to report an error
|
owing to a problem related to a previous call.
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
|
File: libc.info, Node: Receiving Datagrams, Next: Datagram Example, Prev: Sending Datagrams, Up: Datagrams
|
|
16.10.2 Receiving Datagrams
|
---------------------------
|
|
The ‘recvfrom’ function reads a packet from a datagram socket and also
|
tells you where it was sent from. This function is declared in
|
‘sys/socket.h’.
|
|
-- Function: ssize_t recvfrom (int SOCKET, void *BUFFER, size_t SIZE,
|
int FLAGS, struct sockaddr *ADDR, socklen_t *LENGTH-PTR)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘recvfrom’ function reads one packet from the socket SOCKET
|
into the buffer BUFFER. The SIZE argument specifies the maximum
|
number of bytes to be read.
|
|
If the packet is longer than SIZE bytes, then you get the first
|
SIZE bytes of the packet and the rest of the packet is lost.
|
There’s no way to read the rest of the packet. Thus, when you use
|
a packet protocol, you must always know how long a packet to
|
expect.
|
|
The ADDR and LENGTH-PTR arguments are used to return the address
|
where the packet came from. *Note Socket Addresses::. For a
|
socket in the local domain the address information won’t be
|
meaningful, since you can’t read the address of such a socket
|
(*note Local Namespace::). You can specify a null pointer as the
|
ADDR argument if you are not interested in this information.
|
|
The FLAGS are interpreted the same way as for ‘recv’ (*note Socket
|
Data Options::). The return value and error conditions are also
|
the same as for ‘recv’.
|
|
This function is defined as a cancellation point in multi-threaded
|
programs, so one has to be prepared for this and make sure that
|
allocated resources (like memory, file descriptors, semaphores or
|
whatever) are freed even if the thread is canceled.
|
|
You can use plain ‘recv’ (*note Receiving Data::) instead of
|
‘recvfrom’ if you don’t need to find out who sent the packet (either
|
because you know where it should come from or because you treat all
|
possible senders alike). Even ‘read’ can be used if you don’t want to
|
specify FLAGS (*note I/O Primitives::).
|
|
|
File: libc.info, Node: Datagram Example, Next: Example Receiver, Prev: Receiving Datagrams, Up: Datagrams
|
|
16.10.3 Datagram Socket Example
|
-------------------------------
|
|
Here is a set of example programs that send messages over a datagram
|
stream in the local namespace. Both the client and server programs use
|
the ‘make_named_socket’ function that was presented in *note Local
|
Socket Example::, to create and name their sockets.
|
|
First, here is the server program. It sits in a loop waiting for
|
messages to arrive, bouncing each message back to the sender. Obviously
|
this isn’t a particularly useful program, but it does show the general
|
ideas involved.
|
|
|
#include <stdio.h>
|
#include <errno.h>
|
#include <stdlib.h>
|
#include <sys/socket.h>
|
#include <sys/un.h>
|
|
#define SERVER "/tmp/serversocket"
|
#define MAXMSG 512
|
|
int
|
main (void)
|
{
|
int sock;
|
char message[MAXMSG];
|
struct sockaddr_un name;
|
size_t size;
|
int nbytes;
|
|
/* Remove the filename first, it’s ok if the call fails */
|
unlink (SERVER);
|
|
/* Make the socket, then loop endlessly. */
|
sock = make_named_socket (SERVER);
|
while (1)
|
{
|
/* Wait for a datagram. */
|
size = sizeof (name);
|
nbytes = recvfrom (sock, message, MAXMSG, 0,
|
(struct sockaddr *) & name, &size);
|
if (nbytes < 0)
|
{
|
perror ("recfrom (server)");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Give a diagnostic message. */
|
fprintf (stderr, "Server: got message: %s\n", message);
|
|
/* Bounce the message back to the sender. */
|
nbytes = sendto (sock, message, nbytes, 0,
|
(struct sockaddr *) & name, size);
|
if (nbytes < 0)
|
{
|
perror ("sendto (server)");
|
exit (EXIT_FAILURE);
|
}
|
}
|
}
|
|
|
File: libc.info, Node: Example Receiver, Prev: Datagram Example, Up: Datagrams
|
|
16.10.4 Example of Reading Datagrams
|
------------------------------------
|
|
Here is the client program corresponding to the server above.
|
|
It sends a datagram to the server and then waits for a reply. Notice
|
that the socket for the client (as well as for the server) in this
|
example has to be given a name. This is so that the server can direct a
|
message back to the client. Since the socket has no associated
|
connection state, the only way the server can do this is by referencing
|
the name of the client.
|
|
|
#include <stdio.h>
|
#include <errno.h>
|
#include <unistd.h>
|
#include <stdlib.h>
|
#include <sys/socket.h>
|
#include <sys/un.h>
|
|
#define SERVER "/tmp/serversocket"
|
#define CLIENT "/tmp/mysocket"
|
#define MAXMSG 512
|
#define MESSAGE "Yow!!! Are we having fun yet?!?"
|
|
int
|
main (void)
|
{
|
extern int make_named_socket (const char *name);
|
int sock;
|
char message[MAXMSG];
|
struct sockaddr_un name;
|
size_t size;
|
int nbytes;
|
|
/* Make the socket. */
|
sock = make_named_socket (CLIENT);
|
|
/* Initialize the server socket address. */
|
name.sun_family = AF_LOCAL;
|
strcpy (name.sun_path, SERVER);
|
size = strlen (name.sun_path) + sizeof (name.sun_family);
|
|
/* Send the datagram. */
|
nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,
|
(struct sockaddr *) & name, size);
|
if (nbytes < 0)
|
{
|
perror ("sendto (client)");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Wait for a reply. */
|
nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);
|
if (nbytes < 0)
|
{
|
perror ("recfrom (client)");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Print a diagnostic message. */
|
fprintf (stderr, "Client: got message: %s\n", message);
|
|
/* Clean up. */
|
remove (CLIENT);
|
close (sock);
|
}
|
|
Keep in mind that datagram socket communications are unreliable. In
|
this example, the client program waits indefinitely if the message never
|
reaches the server or if the server’s response never comes back. It’s
|
up to the user running the program to kill and restart it if desired. A
|
more automatic solution could be to use ‘select’ (*note Waiting for
|
I/O::) to establish a timeout period for the reply, and in case of
|
timeout either re-send the message or shut down the socket and exit.
|
|
|
File: libc.info, Node: Inetd, Next: Socket Options, Prev: Datagrams, Up: Sockets
|
|
16.11 The ‘inetd’ Daemon
|
========================
|
|
We’ve explained above how to write a server program that does its own
|
listening. Such a server must already be running in order for anyone to
|
connect to it.
|
|
Another way to provide a service on an Internet port is to let the
|
daemon program ‘inetd’ do the listening. ‘inetd’ is a program that runs
|
all the time and waits (using ‘select’) for messages on a specified set
|
of ports. When it receives a message, it accepts the connection (if the
|
socket style calls for connections) and then forks a child process to
|
run the corresponding server program. You specify the ports and their
|
programs in the file ‘/etc/inetd.conf’.
|
|
* Menu:
|
|
* Inetd Servers::
|
* Configuring Inetd::
|
|
|
File: libc.info, Node: Inetd Servers, Next: Configuring Inetd, Up: Inetd
|
|
16.11.1 ‘inetd’ Servers
|
-----------------------
|
|
Writing a server program to be run by ‘inetd’ is very simple. Each time
|
someone requests a connection to the appropriate port, a new server
|
process starts. The connection already exists at this time; the socket
|
is available as the standard input descriptor and as the standard output
|
descriptor (descriptors 0 and 1) in the server process. Thus the server
|
program can begin reading and writing data right away. Often the
|
program needs only the ordinary I/O facilities; in fact, a
|
general-purpose filter program that knows nothing about sockets can work
|
as a byte stream server run by ‘inetd’.
|
|
You can also use ‘inetd’ for servers that use connectionless
|
communication styles. For these servers, ‘inetd’ does not try to accept
|
a connection since no connection is possible. It just starts the server
|
program, which can read the incoming datagram packet from descriptor 0.
|
The server program can handle one request and then exit, or you can
|
choose to write it to keep reading more requests until no more arrive,
|
and then exit. You must specify which of these two techniques the
|
server uses when you configure ‘inetd’.
|
|
|
File: libc.info, Node: Configuring Inetd, Prev: Inetd Servers, Up: Inetd
|
|
16.11.2 Configuring ‘inetd’
|
---------------------------
|
|
The file ‘/etc/inetd.conf’ tells ‘inetd’ which ports to listen to and
|
what server programs to run for them. Normally each entry in the file
|
is one line, but you can split it onto multiple lines provided all but
|
the first line of the entry start with whitespace. Lines that start
|
with ‘#’ are comments.
|
|
Here are two standard entries in ‘/etc/inetd.conf’:
|
|
ftp stream tcp nowait root /libexec/ftpd ftpd
|
talk dgram udp wait root /libexec/talkd talkd
|
|
An entry has this format:
|
|
SERVICE STYLE PROTOCOL WAIT USERNAME PROGRAM ARGUMENTS
|
|
The SERVICE field says which service this program provides. It
|
should be the name of a service defined in ‘/etc/services’. ‘inetd’
|
uses SERVICE to decide which port to listen on for this entry.
|
|
The fields STYLE and PROTOCOL specify the communication style and the
|
protocol to use for the listening socket. The style should be the name
|
of a communication style, converted to lower case and with ‘SOCK_’
|
deleted—for example, ‘stream’ or ‘dgram’. PROTOCOL should be one of the
|
protocols listed in ‘/etc/protocols’. The typical protocol names are
|
‘tcp’ for byte stream connections and ‘udp’ for unreliable datagrams.
|
|
The WAIT field should be either ‘wait’ or ‘nowait’. Use ‘wait’ if
|
STYLE is a connectionless style and the server, once started, handles
|
multiple requests as they come in. Use ‘nowait’ if ‘inetd’ should start
|
a new process for each message or request that comes in. If STYLE uses
|
connections, then WAIT *must* be ‘nowait’.
|
|
USER is the user name that the server should run as. ‘inetd’ runs as
|
root, so it can set the user ID of its children arbitrarily. It’s best
|
to avoid using ‘root’ for USER if you can; but some servers, such as
|
Telnet and FTP, read a username and password themselves. These servers
|
need to be root initially so they can log in as commanded by the data
|
coming over the network.
|
|
PROGRAM together with ARGUMENTS specifies the command to run to start
|
the server. PROGRAM should be an absolute file name specifying the
|
executable file to run. ARGUMENTS consists of any number of
|
whitespace-separated words, which become the command-line arguments of
|
PROGRAM. The first word in ARGUMENTS is argument zero, which should by
|
convention be the program name itself (sans directories).
|
|
If you edit ‘/etc/inetd.conf’, you can tell ‘inetd’ to reread the
|
file and obey its new contents by sending the ‘inetd’ process the
|
‘SIGHUP’ signal. You’ll have to use ‘ps’ to determine the process ID of
|
the ‘inetd’ process as it is not fixed.
|
|
|
File: libc.info, Node: Socket Options, Next: Networks Database, Prev: Inetd, Up: Sockets
|
|
16.12 Socket Options
|
====================
|
|
This section describes how to read or set various options that modify
|
the behavior of sockets and their underlying communications protocols.
|
|
When you are manipulating a socket option, you must specify which
|
"level" the option pertains to. This describes whether the option
|
applies to the socket interface, or to a lower-level communications
|
protocol interface.
|
|
* Menu:
|
|
* Socket Option Functions:: The basic functions for setting and getting
|
socket options.
|
* Socket-Level Options:: Details of the options at the socket level.
|
|
|
File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options
|
|
16.12.1 Socket Option Functions
|
-------------------------------
|
|
Here are the functions for examining and modifying socket options. They
|
are declared in ‘sys/socket.h’.
|
|
-- Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void
|
*OPTVAL, socklen_t *OPTLEN-PTR)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘getsockopt’ function gets information about the value of
|
option OPTNAME at level LEVEL for socket SOCKET.
|
|
The option value is stored in the buffer that OPTVAL points to.
|
Before the call, you should supply in ‘*OPTLEN-PTR’ the size of
|
this buffer; on return, it contains the number of bytes of
|
information actually stored in the buffer.
|
|
Most options interpret the OPTVAL buffer as a single ‘int’ value.
|
|
The actual return value of ‘getsockopt’ is ‘0’ on success and ‘-1’
|
on failure. The following ‘errno’ error conditions are defined:
|
|
‘EBADF’
|
The SOCKET argument is not a valid file descriptor.
|
|
‘ENOTSOCK’
|
The descriptor SOCKET is not a socket.
|
|
‘ENOPROTOOPT’
|
The OPTNAME doesn’t make sense for the given LEVEL.
|
|
-- Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, const
|
void *OPTVAL, socklen_t OPTLEN)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function is used to set the socket option OPTNAME at level
|
LEVEL for socket SOCKET. The value of the option is passed in the
|
buffer OPTVAL of size OPTLEN.
|
|
The return value and error codes for ‘setsockopt’ are the same as
|
for ‘getsockopt’.
|
|
|
File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options
|
|
16.12.2 Socket-Level Options
|
----------------------------
|
|
-- Constant: int SOL_SOCKET
|
Use this constant as the LEVEL argument to ‘getsockopt’ or
|
‘setsockopt’ to manipulate the socket-level options described in
|
this section.
|
|
Here is a table of socket-level option names; all are defined in the
|
header file ‘sys/socket.h’.
|
|
‘SO_DEBUG’
|
|
This option toggles recording of debugging information in the
|
underlying protocol modules. The value has type ‘int’; a nonzero
|
value means “yes”.
|
|
‘SO_REUSEADDR’
|
This option controls whether ‘bind’ (*note Setting Address::)
|
should permit reuse of local addresses for this socket. If you
|
enable this option, you can actually have two sockets with the same
|
Internet port number; but the system won’t allow you to use the two
|
identically-named sockets in a way that would confuse the Internet.
|
The reason for this option is that some higher-level Internet
|
protocols, including FTP, require you to keep reusing the same port
|
number.
|
|
The value has type ‘int’; a nonzero value means “yes”.
|
|
‘SO_KEEPALIVE’
|
This option controls whether the underlying protocol should
|
periodically transmit messages on a connected socket. If the peer
|
fails to respond to these messages, the connection is considered
|
broken. The value has type ‘int’; a nonzero value means “yes”.
|
|
‘SO_DONTROUTE’
|
This option controls whether outgoing messages bypass the normal
|
message routing facilities. If set, messages are sent directly to
|
the network interface instead. The value has type ‘int’; a nonzero
|
value means “yes”.
|
|
‘SO_LINGER’
|
This option specifies what should happen when the socket of a type
|
that promises reliable delivery still has untransmitted messages
|
when it is closed; see *note Closing a Socket::. The value has
|
type ‘struct linger’.
|
|
-- Data Type: struct linger
|
This structure type has the following members:
|
|
‘int l_onoff’
|
This field is interpreted as a boolean. If nonzero,
|
‘close’ blocks until the data are transmitted or the
|
timeout period has expired.
|
|
‘int l_linger’
|
This specifies the timeout period, in seconds.
|
|
‘SO_BROADCAST’
|
This option controls whether datagrams may be broadcast from the
|
socket. The value has type ‘int’; a nonzero value means “yes”.
|
|
‘SO_OOBINLINE’
|
If this option is set, out-of-band data received on the socket is
|
placed in the normal input queue. This permits it to be read using
|
‘read’ or ‘recv’ without specifying the ‘MSG_OOB’ flag. *Note
|
Out-of-Band Data::. The value has type ‘int’; a nonzero value
|
means “yes”.
|
|
‘SO_SNDBUF’
|
This option gets or sets the size of the output buffer. The value
|
is a ‘size_t’, which is the size in bytes.
|
|
‘SO_RCVBUF’
|
This option gets or sets the size of the input buffer. The value
|
is a ‘size_t’, which is the size in bytes.
|
|
‘SO_STYLE’
|
‘SO_TYPE’
|
This option can be used with ‘getsockopt’ only. It is used to get
|
the socket’s communication style. ‘SO_TYPE’ is the historical
|
name, and ‘SO_STYLE’ is the preferred name in GNU. The value has
|
type ‘int’ and its value designates a communication style; see
|
*note Communication Styles::.
|
|
‘SO_ERROR’
|
|
This option can be used with ‘getsockopt’ only. It is used to
|
reset the error status of the socket. The value is an ‘int’, which
|
represents the previous error status.
|
|
|
File: libc.info, Node: Networks Database, Prev: Socket Options, Up: Sockets
|
|
16.13 Networks Database
|
=======================
|
|
Many systems come with a database that records a list of networks known
|
to the system developer. This is usually kept either in the file
|
‘/etc/networks’ or in an equivalent from a name server. This data base
|
is useful for routing programs such as ‘route’, but it is not useful for
|
programs that simply communicate over the network. We provide functions
|
to access this database, which are declared in ‘netdb.h’.
|
|
-- Data Type: struct netent
|
This data type is used to represent information about entries in
|
the networks database. It has the following members:
|
|
‘char *n_name’
|
This is the “official” name of the network.
|
|
‘char **n_aliases’
|
These are alternative names for the network, represented as a
|
vector of strings. A null pointer terminates the array.
|
|
‘int n_addrtype’
|
This is the type of the network number; this is always equal
|
to ‘AF_INET’ for Internet networks.
|
|
‘unsigned long int n_net’
|
This is the network number. Network numbers are returned in
|
host byte order; see *note Byte Order::.
|
|
Use the ‘getnetbyname’ or ‘getnetbyaddr’ functions to search the
|
networks database for information about a specific network. The
|
information is returned in a statically-allocated structure; you must
|
copy the information if you need to save it.
|
|
-- Function: struct netent * getnetbyname (const char *NAME)
|
Preliminary: | MT-Unsafe race:netbyname env locale | AS-Unsafe
|
dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note
|
POSIX Safety Concepts::.
|
|
The ‘getnetbyname’ function returns information about the network
|
named NAME. It returns a null pointer if there is no such network.
|
|
-- Function: struct netent * getnetbyaddr (uint32_t NET, int TYPE)
|
Preliminary: | MT-Unsafe race:netbyaddr locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
The ‘getnetbyaddr’ function returns information about the network
|
of type TYPE with number NET. You should specify a value of
|
‘AF_INET’ for the TYPE argument for Internet networks.
|
|
‘getnetbyaddr’ returns a null pointer if there is no such network.
|
|
You can also scan the networks database using ‘setnetent’,
|
‘getnetent’ and ‘endnetent’. Be careful when using these functions
|
because they are not reentrant.
|
|
-- Function: void setnetent (int STAYOPEN)
|
Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function opens and rewinds the networks database.
|
|
If the STAYOPEN argument is nonzero, this sets a flag so that
|
subsequent calls to ‘getnetbyname’ or ‘getnetbyaddr’ will not close
|
the database (as they usually would). This makes for more
|
efficiency if you call those functions several times, by avoiding
|
reopening the database for each call.
|
|
-- Function: struct netent * getnetent (void)
|
Preliminary: | MT-Unsafe race:netent race:netentbuf env locale |
|
AS-Unsafe dlopen plugin heap lock | AC-Unsafe corrupt lock fd mem |
|
*Note POSIX Safety Concepts::.
|
|
This function returns the next entry in the networks database. It
|
returns a null pointer if there are no more entries.
|
|
-- Function: void endnetent (void)
|
Preliminary: | MT-Unsafe race:netent env locale | AS-Unsafe dlopen
|
plugin heap lock | AC-Unsafe corrupt lock fd mem | *Note POSIX
|
Safety Concepts::.
|
|
This function closes the networks database.
|
|
|
File: libc.info, Node: Low-Level Terminal Interface, Next: Syslog, Prev: Sockets, Up: Top
|
|
17 Low-Level Terminal Interface
|
*******************************
|
|
This chapter describes functions that are specific to terminal devices.
|
You can use these functions to do things like turn off input echoing;
|
set serial line characteristics such as line speed and flow control; and
|
change which characters are used for end-of-file, command-line editing,
|
sending signals, and similar control functions.
|
|
Most of the functions in this chapter operate on file descriptors.
|
*Note Low-Level I/O::, for more information about what a file descriptor
|
is and how to open a file descriptor for a terminal device.
|
|
* Menu:
|
|
* 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.
|
* Pseudo-Terminals:: How to open a pseudo-terminal.
|
|
|
File: libc.info, Node: Is It a Terminal, Next: I/O Queues, Up: Low-Level Terminal Interface
|
|
17.1 Identifying Terminals
|
==========================
|
|
The functions described in this chapter only work on files that
|
correspond to terminal devices. You can find out whether a file
|
descriptor is associated with a terminal by using the ‘isatty’ function.
|
|
Prototypes for the functions in this section are declared in the
|
header file ‘unistd.h’.
|
|
-- Function: int isatty (int FILEDES)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function returns ‘1’ if FILEDES is a file descriptor
|
associated with an open terminal device, and 0 otherwise.
|
|
If a file descriptor is associated with a terminal, you can get its
|
associated file name using the ‘ttyname’ function. See also the
|
‘ctermid’ function, described in *note Identifying the Terminal::.
|
|
-- Function: char * ttyname (int FILEDES)
|
Preliminary: | MT-Unsafe race:ttyname | AS-Unsafe heap lock |
|
AC-Unsafe lock fd mem | *Note POSIX Safety Concepts::.
|
|
If the file descriptor FILEDES is associated with a terminal
|
device, the ‘ttyname’ function returns a pointer to a
|
statically-allocated, null-terminated string containing the file
|
name of the terminal file. The value is a null pointer if the file
|
descriptor isn’t associated with a terminal, or the file name
|
cannot be determined.
|
|
-- Function: int ttyname_r (int FILEDES, char *BUF, size_t LEN)
|
Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem fd | *Note
|
POSIX Safety Concepts::.
|
|
The ‘ttyname_r’ function is similar to the ‘ttyname’ function
|
except that it places its result into the user-specified buffer
|
starting at BUF with length LEN.
|
|
The normal return value from ‘ttyname_r’ is 0. Otherwise an error
|
number is returned to indicate the error. The following ‘errno’
|
error conditions are defined for this function:
|
|
‘EBADF’
|
The FILEDES argument is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal.
|
|
‘ERANGE’
|
The buffer length LEN is too small to store the string to be
|
returned.
|
|
|
File: libc.info, Node: I/O Queues, Next: Canonical or Not, Prev: Is It a Terminal, Up: Low-Level Terminal Interface
|
|
17.2 I/O Queues
|
===============
|
|
Many of the remaining functions in this section refer to the input and
|
output queues of a terminal device. These queues implement a form of
|
buffering _within the kernel_ independent of the buffering implemented
|
by I/O streams (*note I/O on Streams::).
|
|
The "terminal input queue" is also sometimes referred to as its
|
"typeahead buffer". It holds the characters that have been received
|
from the terminal but not yet read by any process.
|
|
The size of the input queue is described by the ‘MAX_INPUT’ and ‘_POSIX_MAX_INPUT’
|
parameters; see *note Limits for Files::. You are guaranteed a queue
|
size of at least ‘MAX_INPUT’, but the queue might be larger, and might
|
even dynamically change size. If input flow control is enabled by
|
setting the ‘IXOFF’ input mode bit (*note Input Modes::), the terminal
|
driver transmits STOP and START characters to the terminal when
|
necessary to prevent the queue from overflowing. Otherwise, input may
|
be lost if it comes in too fast from the terminal. In canonical mode,
|
all input stays in the queue until a newline character is received, so
|
the terminal input queue can fill up when you type a very long line.
|
*Note Canonical or Not::.
|
|
The "terminal output queue" is like the input queue, but for output;
|
it contains characters that have been written by processes, but not yet
|
transmitted to the terminal. If output flow control is enabled by
|
setting the ‘IXON’ input mode bit (*note Input Modes::), the terminal
|
driver obeys START and STOP characters sent by the terminal to stop and
|
restart transmission of output.
|
|
"Clearing" the terminal input queue means discarding any characters
|
that have been received but not yet read. Similarly, clearing the
|
terminal output queue means discarding any characters that have been
|
written but not yet transmitted.
|
|
|
File: libc.info, Node: Canonical or Not, Next: Terminal Modes, Prev: I/O Queues, Up: Low-Level Terminal Interface
|
|
17.3 Two Styles of Input: Canonical or Not
|
==========================================
|
|
POSIX systems support two basic modes of input: canonical and
|
noncanonical.
|
|
In "canonical input processing" mode, terminal input is processed in
|
lines terminated by newline (‘'\n'’), EOF, or EOL characters. No input
|
can be read until an entire line has been typed by the user, and the
|
‘read’ function (*note I/O Primitives::) returns at most a single line
|
of input, no matter how many bytes are requested.
|
|
In canonical input mode, the operating system provides input editing
|
facilities: some characters are interpreted specially to perform editing
|
operations within the current line of text, such as ERASE and KILL.
|
*Note Editing Characters::.
|
|
The constants ‘_POSIX_MAX_CANON’ and ‘MAX_CANON’ parameterize the
|
maximum number of bytes which may appear in a single line of canonical
|
input. *Note Limits for Files::. You are guaranteed a maximum line
|
length of at least ‘MAX_CANON’ bytes, but the maximum might be larger,
|
and might even dynamically change size.
|
|
In "noncanonical input processing" mode, characters are not grouped
|
into lines, and ERASE and KILL processing is not performed. The
|
granularity with which bytes are read in noncanonical input mode is
|
controlled by the MIN and TIME settings. *Note Noncanonical Input::.
|
|
Most programs use canonical input mode, because this gives the user a
|
way to edit input line by line. The usual reason to use noncanonical
|
mode is when the program accepts single-character commands or provides
|
its own editing facilities.
|
|
The choice of canonical or noncanonical input is controlled by the
|
‘ICANON’ flag in the ‘c_lflag’ member of ‘struct termios’. *Note Local
|
Modes::.
|
|
|
File: libc.info, Node: Terminal Modes, Next: BSD Terminal Modes, Prev: Canonical or Not, Up: Low-Level Terminal Interface
|
|
17.4 Terminal Modes
|
===================
|
|
This section describes the various terminal attributes that control how
|
input and output are done. The functions, data structures, and symbolic
|
constants are all declared in the header file ‘termios.h’.
|
|
Don’t confuse terminal attributes with file attributes. A device
|
special file which is associated with a terminal has file attributes as
|
described in *note File Attributes::. These are unrelated to the
|
attributes of the terminal device itself, which are discussed in this
|
section.
|
|
* Menu:
|
|
* 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.
|
|
|
File: libc.info, Node: Mode Data Types, Next: Mode Functions, Up: Terminal Modes
|
|
17.4.1 Terminal Mode Data Types
|
-------------------------------
|
|
The entire collection of attributes of a terminal is stored in a
|
structure of type ‘struct termios’. This structure is used with the
|
functions ‘tcgetattr’ and ‘tcsetattr’ to read and set the attributes.
|
|
-- Data Type: struct termios
|
A ‘struct termios’ records all the I/O attributes of a terminal.
|
The structure includes at least the following members:
|
|
‘tcflag_t c_iflag’
|
A bit mask specifying flags for input modes; see *note Input
|
Modes::.
|
|
‘tcflag_t c_oflag’
|
A bit mask specifying flags for output modes; see *note Output
|
Modes::.
|
|
‘tcflag_t c_cflag’
|
A bit mask specifying flags for control modes; see *note
|
Control Modes::.
|
|
‘tcflag_t c_lflag’
|
A bit mask specifying flags for local modes; see *note Local
|
Modes::.
|
|
‘cc_t c_cc[NCCS]’
|
An array specifying which characters are associated with
|
various control functions; see *note Special Characters::.
|
|
The ‘struct termios’ structure also contains members which encode
|
input and output transmission speeds, but the representation is not
|
specified. *Note Line Speed::, for how to examine and store the
|
speed values.
|
|
The following sections describe the details of the members of the
|
‘struct termios’ structure.
|
|
-- Data Type: tcflag_t
|
This is an unsigned integer type used to represent the various bit
|
masks for terminal flags.
|
|
-- Data Type: cc_t
|
This is an unsigned integer type used to represent characters
|
associated with various terminal control functions.
|
|
-- Macro: int NCCS
|
The value of this macro is the number of elements in the ‘c_cc’
|
array.
|
|
|
File: libc.info, Node: Mode Functions, Next: Setting Modes, Prev: Mode Data Types, Up: Terminal Modes
|
|
17.4.2 Terminal Mode Functions
|
------------------------------
|
|
-- Function: int tcgetattr (int FILEDES, struct termios *TERMIOS-P)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function is used to examine the attributes of the terminal
|
device with file descriptor FILEDES. The attributes are returned
|
in the structure that TERMIOS-P points to.
|
|
If successful, ‘tcgetattr’ returns 0. A return value of -1
|
indicates an error. The following ‘errno’ error conditions are
|
defined for this function:
|
|
‘EBADF’
|
The FILEDES argument is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal.
|
|
-- Function: int tcsetattr (int FILEDES, int WHEN, const struct termios
|
*TERMIOS-P)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function sets the attributes of the terminal device with file
|
descriptor FILEDES. The new attributes are taken from the
|
structure that TERMIOS-P points to.
|
|
The WHEN argument specifies how to deal with input and output
|
already queued. It can be one of the following values:
|
|
‘TCSANOW’
|
Make the change immediately.
|
|
‘TCSADRAIN’
|
Make the change after waiting until all queued output has been
|
written. You should usually use this option when changing
|
parameters that affect output.
|
|
‘TCSAFLUSH’
|
This is like ‘TCSADRAIN’, but also discards any queued input.
|
|
‘TCSASOFT’
|
This is a flag bit that you can add to any of the above
|
alternatives. Its meaning is to inhibit alteration of the
|
state of the terminal hardware. It is a BSD extension; it is
|
only supported on BSD systems and GNU/Hurd systems.
|
|
Using ‘TCSASOFT’ is exactly the same as setting the ‘CIGNORE’
|
bit in the ‘c_cflag’ member of the structure TERMIOS-P points
|
to. *Note Control Modes::, for a description of ‘CIGNORE’.
|
|
If this function is called from a background process on its
|
controlling terminal, normally all processes in the process group
|
are sent a ‘SIGTTOU’ signal, in the same way as if the process were
|
trying to write to the terminal. The exception is if the calling
|
process itself is ignoring or blocking ‘SIGTTOU’ signals, in which
|
case the operation is performed and no signal is sent. *Note Job
|
Control::.
|
|
If successful, ‘tcsetattr’ returns 0. A return value of -1
|
indicates an error. The following ‘errno’ error conditions are
|
defined for this function:
|
|
‘EBADF’
|
The FILEDES argument is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal.
|
|
‘EINVAL’
|
Either the value of the ‘when’ argument is not valid, or there
|
is something wrong with the data in the TERMIOS-P argument.
|
|
Although ‘tcgetattr’ and ‘tcsetattr’ specify the terminal device with
|
a file descriptor, the attributes are those of the terminal device
|
itself and not of the file descriptor. This means that the effects of
|
changing terminal attributes are persistent; if another process opens
|
the terminal file later on, it will see the changed attributes even
|
though it doesn’t have anything to do with the open file descriptor you
|
originally specified in changing the attributes.
|
|
Similarly, if a single process has multiple or duplicated file
|
descriptors for the same terminal device, changing the terminal
|
attributes affects input and output to all of these file descriptors.
|
This means, for example, that you can’t open one file descriptor or
|
stream to read from a terminal in the normal line-buffered, echoed mode;
|
and simultaneously have another file descriptor for the same terminal
|
that you use to read from it in single-character, non-echoed mode.
|
Instead, you have to explicitly switch the terminal back and forth
|
between the two modes.
|
|
|
File: libc.info, Node: Setting Modes, Next: Input Modes, Prev: Mode Functions, Up: Terminal Modes
|
|
17.4.3 Setting Terminal Modes Properly
|
--------------------------------------
|
|
When you set terminal modes, you should call ‘tcgetattr’ first to get
|
the current modes of the particular terminal device, modify only those
|
modes that you are really interested in, and store the result with
|
‘tcsetattr’.
|
|
It’s a bad idea to simply initialize a ‘struct termios’ structure to
|
a chosen set of attributes and pass it directly to ‘tcsetattr’. Your
|
program may be run years from now, on systems that support members not
|
documented in this manual. The way to avoid setting these members to
|
unreasonable values is to avoid changing them.
|
|
What’s more, different terminal devices may require different mode
|
settings in order to function properly. So you should avoid blindly
|
copying attributes from one terminal device to another.
|
|
When a member contains a collection of independent flags, as the
|
‘c_iflag’, ‘c_oflag’ and ‘c_cflag’ members do, even setting the entire
|
member is a bad idea, because particular operating systems have their
|
own flags. Instead, you should start with the current value of the
|
member and alter only the flags whose values matter in your program,
|
leaving any other flags unchanged.
|
|
Here is an example of how to set one flag (‘ISTRIP’) in the ‘struct
|
termios’ structure while properly preserving all the other data in the
|
structure:
|
|
int
|
set_istrip (int desc, int value)
|
{
|
struct termios settings;
|
int result;
|
|
result = tcgetattr (desc, &settings);
|
if (result < 0)
|
{
|
perror ("error in tcgetattr");
|
return 0;
|
}
|
settings.c_iflag &= ~ISTRIP;
|
if (value)
|
settings.c_iflag |= ISTRIP;
|
result = tcsetattr (desc, TCSANOW, &settings);
|
if (result < 0)
|
{
|
perror ("error in tcsetattr");
|
return 0;
|
}
|
return 1;
|
}
|
|
|
File: libc.info, Node: Input Modes, Next: Output Modes, Prev: Setting Modes, Up: Terminal Modes
|
|
17.4.4 Input Modes
|
------------------
|
|
This section describes the terminal attribute flags that control fairly
|
low-level aspects of input processing: handling of parity errors, break
|
signals, flow control, and <RET> and <LFD> characters.
|
|
All of these flags are bits in the ‘c_iflag’ member of the ‘struct
|
termios’ structure. The member is an integer, and you change flags
|
using the operators ‘&’, ‘|’ and ‘^’. Don’t try to specify the entire
|
value for ‘c_iflag’—instead, change only specific flags and leave the
|
rest untouched (*note Setting Modes::).
|
|
-- Macro: tcflag_t INPCK
|
If this bit is set, input parity checking is enabled. If it is not
|
set, no checking at all is done for parity errors on input; the
|
characters are simply passed through to the application.
|
|
Parity checking on input processing is independent of whether
|
parity detection and generation on the underlying terminal hardware
|
is enabled; see *note Control Modes::. For example, you could
|
clear the ‘INPCK’ input mode flag and set the ‘PARENB’ control mode
|
flag to ignore parity errors on input, but still generate parity on
|
output.
|
|
If this bit is set, what happens when a parity error is detected
|
depends on whether the ‘IGNPAR’ or ‘PARMRK’ bits are set. If
|
neither of these bits are set, a byte with a parity error is passed
|
to the application as a ‘'\0'’ character.
|
|
-- Macro: tcflag_t IGNPAR
|
If this bit is set, any byte with a framing or parity error is
|
ignored. This is only useful if ‘INPCK’ is also set.
|
|
-- Macro: tcflag_t PARMRK
|
If this bit is set, input bytes with parity or framing errors are
|
marked when passed to the program. This bit is meaningful only
|
when ‘INPCK’ is set and ‘IGNPAR’ is not set.
|
|
The way erroneous bytes are marked is with two preceding bytes,
|
‘377’ and ‘0’. Thus, the program actually reads three bytes for
|
one erroneous byte received from the terminal.
|
|
If a valid byte has the value ‘0377’, and ‘ISTRIP’ (see below) is
|
not set, the program might confuse it with the prefix that marks a
|
parity error. So a valid byte ‘0377’ is passed to the program as
|
two bytes, ‘0377’ ‘0377’, in this case.
|
|
-- Macro: tcflag_t ISTRIP
|
If this bit is set, valid input bytes are stripped to seven bits;
|
otherwise, all eight bits are available for programs to read.
|
|
-- Macro: tcflag_t IGNBRK
|
If this bit is set, break conditions are ignored.
|
|
A "break condition" is defined in the context of asynchronous
|
serial data transmission as a series of zero-value bits longer than
|
a single byte.
|
|
-- Macro: tcflag_t BRKINT
|
If this bit is set and ‘IGNBRK’ is not set, a break condition
|
clears the terminal input and output queues and raises a ‘SIGINT’
|
signal for the foreground process group associated with the
|
terminal.
|
|
If neither ‘BRKINT’ nor ‘IGNBRK’ are set, a break condition is
|
passed to the application as a single ‘'\0'’ character if ‘PARMRK’
|
is not set, or otherwise as a three-character sequence ‘'\377'’,
|
‘'\0'’, ‘'\0'’.
|
|
-- Macro: tcflag_t IGNCR
|
If this bit is set, carriage return characters (‘'\r'’) are
|
discarded on input. Discarding carriage return may be useful on
|
terminals that send both carriage return and linefeed when you type
|
the <RET> key.
|
|
-- Macro: tcflag_t ICRNL
|
If this bit is set and ‘IGNCR’ is not set, carriage return
|
characters (‘'\r'’) received as input are passed to the application
|
as newline characters (‘'\n'’).
|
|
-- Macro: tcflag_t INLCR
|
If this bit is set, newline characters (‘'\n'’) received as input
|
are passed to the application as carriage return characters
|
(‘'\r'’).
|
|
-- Macro: tcflag_t IXOFF
|
If this bit is set, start/stop control on input is enabled. In
|
other words, the computer sends STOP and START characters as
|
necessary to prevent input from coming in faster than programs are
|
reading it. The idea is that the actual terminal hardware that is
|
generating the input data responds to a STOP character by
|
suspending transmission, and to a START character by resuming
|
transmission. *Note Start/Stop Characters::.
|
|
-- Macro: tcflag_t IXON
|
If this bit is set, start/stop control on output is enabled. In
|
other words, if the computer receives a STOP character, it suspends
|
output until a START character is received. In this case, the STOP
|
and START characters are never passed to the application program.
|
If this bit is not set, then START and STOP can be read as ordinary
|
characters. *Note Start/Stop Characters::.
|
|
-- Macro: tcflag_t IXANY
|
If this bit is set, any input character restarts output when output
|
has been suspended with the STOP character. Otherwise, only the
|
START character restarts output.
|
|
This is a BSD extension; it exists only on BSD systems and
|
GNU/Linux and GNU/Hurd systems.
|
|
-- Macro: tcflag_t IMAXBEL
|
If this bit is set, then filling up the terminal input buffer sends
|
a BEL character (code ‘007’) to the terminal to ring the bell.
|
|
This is a BSD extension.
|
|
|
File: libc.info, Node: Output Modes, Next: Control Modes, Prev: Input Modes, Up: Terminal Modes
|
|
17.4.5 Output Modes
|
-------------------
|
|
This section describes the terminal flags and fields that control how
|
output characters are translated and padded for display. All of these
|
are contained in the ‘c_oflag’ member of the ‘struct termios’ structure.
|
|
The ‘c_oflag’ member itself is an integer, and you change the flags
|
and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
|
the entire value for ‘c_oflag’—instead, change only specific flags and
|
leave the rest untouched (*note Setting Modes::).
|
|
-- Macro: tcflag_t OPOST
|
If this bit is set, output data is processed in some unspecified
|
way so that it is displayed appropriately on the terminal device.
|
This typically includes mapping newline characters (‘'\n'’) onto
|
carriage return and linefeed pairs.
|
|
If this bit isn’t set, the characters are transmitted as-is.
|
|
The following three bits are effective only if ‘OPOST’ is set.
|
|
-- Macro: tcflag_t ONLCR
|
If this bit is set, convert the newline character on output into a
|
pair of characters, carriage return followed by linefeed.
|
|
-- Macro: tcflag_t OXTABS
|
If this bit is set, convert tab characters on output into the
|
appropriate number of spaces to emulate a tab stop every eight
|
columns. This bit exists only on BSD systems and GNU/Hurd systems;
|
on GNU/Linux systems it is available as ‘XTABS’.
|
|
-- Macro: tcflag_t ONOEOT
|
If this bit is set, discard ‘C-d’ characters (code ‘004’) on
|
output. These characters cause many dial-up terminals to
|
disconnect. This bit exists only on BSD systems and GNU/Hurd
|
systems.
|
|
|
File: libc.info, Node: Control Modes, Next: Local Modes, Prev: Output Modes, Up: Terminal Modes
|
|
17.4.6 Control Modes
|
--------------------
|
|
This section describes the terminal flags and fields that control
|
parameters usually associated with asynchronous serial data
|
transmission. These flags may not make sense for other kinds of
|
terminal ports (such as a network connection pseudo-terminal). All of
|
these are contained in the ‘c_cflag’ member of the ‘struct termios’
|
structure.
|
|
The ‘c_cflag’ member itself is an integer, and you change the flags
|
and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
|
the entire value for ‘c_cflag’—instead, change only specific flags and
|
leave the rest untouched (*note Setting Modes::).
|
|
-- Macro: tcflag_t CLOCAL
|
If this bit is set, it indicates that the terminal is connected
|
“locally” and that the modem status lines (such as carrier detect)
|
should be ignored.
|
|
On many systems if this bit is not set and you call ‘open’ without
|
the ‘O_NONBLOCK’ flag set, ‘open’ blocks until a modem connection
|
is established.
|
|
If this bit is not set and a modem disconnect is detected, a
|
‘SIGHUP’ signal is sent to the controlling process group for the
|
terminal (if it has one). Normally, this causes the process to
|
exit; see *note Signal Handling::. Reading from the terminal after
|
a disconnect causes an end-of-file condition, and writing causes an
|
‘EIO’ error to be returned. The terminal device must be closed and
|
reopened to clear the condition.
|
|
-- Macro: tcflag_t HUPCL
|
If this bit is set, a modem disconnect is generated when all
|
processes that have the terminal device open have either closed the
|
file or exited.
|
|
-- Macro: tcflag_t CREAD
|
If this bit is set, input can be read from the terminal.
|
Otherwise, input is discarded when it arrives.
|
|
-- Macro: tcflag_t CSTOPB
|
If this bit is set, two stop bits are used. Otherwise, only one
|
stop bit is used.
|
|
-- Macro: tcflag_t PARENB
|
If this bit is set, generation and detection of a parity bit are
|
enabled. *Note Input Modes::, for information on how input parity
|
errors are handled.
|
|
If this bit is not set, no parity bit is added to output
|
characters, and input characters are not checked for correct
|
parity.
|
|
-- Macro: tcflag_t PARODD
|
This bit is only useful if ‘PARENB’ is set. If ‘PARODD’ is set,
|
odd parity is used, otherwise even parity is used.
|
|
The control mode flags also includes a field for the number of bits
|
per character. You can use the ‘CSIZE’ macro as a mask to extract the
|
value, like this: ‘settings.c_cflag & CSIZE’.
|
|
-- Macro: tcflag_t CSIZE
|
This is a mask for the number of bits per character.
|
|
-- Macro: tcflag_t CS5
|
This specifies five bits per byte.
|
|
-- Macro: tcflag_t CS6
|
This specifies six bits per byte.
|
|
-- Macro: tcflag_t CS7
|
This specifies seven bits per byte.
|
|
-- Macro: tcflag_t CS8
|
This specifies eight bits per byte.
|
|
The following four bits are BSD extensions; these exist only on BSD
|
systems and GNU/Hurd systems.
|
|
-- Macro: tcflag_t CCTS_OFLOW
|
If this bit is set, enable flow control of output based on the CTS
|
wire (RS232 protocol).
|
|
-- Macro: tcflag_t CRTS_IFLOW
|
If this bit is set, enable flow control of input based on the RTS
|
wire (RS232 protocol).
|
|
-- Macro: tcflag_t MDMBUF
|
If this bit is set, enable carrier-based flow control of output.
|
|
-- Macro: tcflag_t CIGNORE
|
If this bit is set, it says to ignore the control modes and line
|
speed values entirely. This is only meaningful in a call to
|
‘tcsetattr’.
|
|
The ‘c_cflag’ member and the line speed values returned by
|
‘cfgetispeed’ and ‘cfgetospeed’ will be unaffected by the call.
|
‘CIGNORE’ is useful if you want to set all the software modes in
|
the other members, but leave the hardware details in ‘c_cflag’
|
unchanged. (This is how the ‘TCSASOFT’ flag to ‘tcsettattr’
|
works.)
|
|
This bit is never set in the structure filled in by ‘tcgetattr’.
|
|
|
File: libc.info, Node: Local Modes, Next: Line Speed, Prev: Control Modes, Up: Terminal Modes
|
|
17.4.7 Local Modes
|
------------------
|
|
This section describes the flags for the ‘c_lflag’ member of the ‘struct
|
termios’ structure. These flags generally control higher-level aspects
|
of input processing than the input modes flags described in *note Input
|
Modes::, such as echoing, signals, and the choice of canonical or
|
noncanonical input.
|
|
The ‘c_lflag’ member itself is an integer, and you change the flags
|
and fields using the operators ‘&’, ‘|’, and ‘^’. Don’t try to specify
|
the entire value for ‘c_lflag’—instead, change only specific flags and
|
leave the rest untouched (*note Setting Modes::).
|
|
-- Macro: tcflag_t ICANON
|
This bit, if set, enables canonical input processing mode.
|
Otherwise, input is processed in noncanonical mode. *Note
|
Canonical or Not::.
|
|
-- Macro: tcflag_t ECHO
|
If this bit is set, echoing of input characters back to the
|
terminal is enabled.
|
|
-- Macro: tcflag_t ECHOE
|
If this bit is set, echoing indicates erasure of input with the
|
ERASE character by erasing the last character in the current line
|
from the screen. Otherwise, the character erased is re-echoed to
|
show what has happened (suitable for a printing terminal).
|
|
This bit only controls the display behavior; the ‘ICANON’ bit by
|
itself controls actual recognition of the ERASE character and
|
erasure of input, without which ‘ECHOE’ is simply irrelevant.
|
|
-- Macro: tcflag_t ECHOPRT
|
This bit, like ‘ECHOE’, enables display of the ERASE character in a
|
way that is geared to a hardcopy terminal. When you type the ERASE
|
character, a ‘\’ character is printed followed by the first
|
character erased. Typing the ERASE character again just prints the
|
next character erased. Then, the next time you type a normal
|
character, a ‘/’ character is printed before the character echoes.
|
|
This is a BSD extension, and exists only in BSD systems and
|
GNU/Linux and GNU/Hurd systems.
|
|
-- Macro: tcflag_t ECHOK
|
This bit enables special display of the KILL character by moving to
|
a new line after echoing the KILL character normally. The behavior
|
of ‘ECHOKE’ (below) is nicer to look at.
|
|
If this bit is not set, the KILL character echoes just as it would
|
if it were not the KILL character. Then it is up to the user to
|
remember that the KILL character has erased the preceding input;
|
there is no indication of this on the screen.
|
|
This bit only controls the display behavior; the ‘ICANON’ bit by
|
itself controls actual recognition of the KILL character and
|
erasure of input, without which ‘ECHOK’ is simply irrelevant.
|
|
-- Macro: tcflag_t ECHOKE
|
This bit is similar to ‘ECHOK’. It enables special display of the
|
KILL character by erasing on the screen the entire line that has
|
been killed. This is a BSD extension, and exists only in BSD
|
systems and GNU/Linux and GNU/Hurd systems.
|
|
-- Macro: tcflag_t ECHONL
|
If this bit is set and the ‘ICANON’ bit is also set, then the
|
newline (‘'\n'’) character is echoed even if the ‘ECHO’ bit is not
|
set.
|
|
-- Macro: tcflag_t ECHOCTL
|
If this bit is set and the ‘ECHO’ bit is also set, echo control
|
characters with ‘^’ followed by the corresponding text character.
|
Thus, control-A echoes as ‘^A’. This is usually the preferred mode
|
for interactive input, because echoing a control character back to
|
the terminal could have some undesired effect on the terminal.
|
|
This is a BSD extension, and exists only in BSD systems and
|
GNU/Linux and GNU/Hurd systems.
|
|
-- Macro: tcflag_t ISIG
|
This bit controls whether the INTR, QUIT, and SUSP characters are
|
recognized. The functions associated with these characters are
|
performed if and only if this bit is set. Being in canonical or
|
noncanonical input mode has no effect on the interpretation of
|
these characters.
|
|
You should use caution when disabling recognition of these
|
characters. Programs that cannot be interrupted interactively are
|
very user-unfriendly. If you clear this bit, your program should
|
provide some alternate interface that allows the user to
|
interactively send the signals associated with these characters, or
|
to escape from the program.
|
|
*Note Signal Characters::.
|
|
-- Macro: tcflag_t IEXTEN
|
POSIX.1 gives ‘IEXTEN’ implementation-defined meaning, so you
|
cannot rely on this interpretation on all systems.
|
|
On BSD systems and GNU/Linux and GNU/Hurd systems, it enables the
|
LNEXT and DISCARD characters. *Note Other Special::.
|
|
-- Macro: tcflag_t NOFLSH
|
Normally, the INTR, QUIT, and SUSP characters cause input and
|
output queues for the terminal to be cleared. If this bit is set,
|
the queues are not cleared.
|
|
-- Macro: tcflag_t TOSTOP
|
If this bit is set and the system supports job control, then
|
‘SIGTTOU’ signals are generated by background processes that
|
attempt to write to the terminal. *Note Access to the Terminal::.
|
|
The following bits are BSD extensions; they exist only on BSD systems
|
and GNU/Hurd systems.
|
|
-- Macro: tcflag_t ALTWERASE
|
This bit determines how far the WERASE character should erase. The
|
WERASE character erases back to the beginning of a word; the
|
question is, where do words begin?
|
|
If this bit is clear, then the beginning of a word is a
|
nonwhitespace character following a whitespace character. If the
|
bit is set, then the beginning of a word is an alphanumeric
|
character or underscore following a character which is none of
|
those.
|
|
*Note Editing Characters::, for more information about the WERASE
|
character.
|
|
-- Macro: tcflag_t FLUSHO
|
This is the bit that toggles when the user types the DISCARD
|
character. While this bit is set, all output is discarded. *Note
|
Other Special::.
|
|
-- Macro: tcflag_t NOKERNINFO
|
Setting this bit disables handling of the STATUS character. *Note
|
Other Special::.
|
|
-- Macro: tcflag_t PENDIN
|
If this bit is set, it indicates that there is a line of input that
|
needs to be reprinted. Typing the REPRINT character sets this bit;
|
the bit remains set until reprinting is finished. *Note Editing
|
Characters::.
|
|
|
File: libc.info, Node: Line Speed, Next: Special Characters, Prev: Local Modes, Up: Terminal Modes
|
|
17.4.8 Line Speed
|
-----------------
|
|
The terminal line speed tells the computer how fast to read and write
|
data on the terminal.
|
|
If the terminal is connected to a real serial line, the terminal
|
speed you specify actually controls the line—if it doesn’t match the
|
terminal’s own idea of the speed, communication does not work. Real
|
serial ports accept only certain standard speeds. Also, particular
|
hardware may not support even all the standard speeds. Specifying a
|
speed of zero hangs up a dialup connection and turns off modem control
|
signals.
|
|
If the terminal is not a real serial line (for example, if it is a
|
network connection), then the line speed won’t really affect data
|
transmission speed, but some programs will use it to determine the
|
amount of padding needed. It’s best to specify a line speed value that
|
matches the actual speed of the actual terminal, but you can safely
|
experiment with different values to vary the amount of padding.
|
|
There are actually two line speeds for each terminal, one for input
|
and one for output. You can set them independently, but most often
|
terminals use the same speed for both directions.
|
|
The speed values are stored in the ‘struct termios’ structure, but
|
don’t try to access them in the ‘struct termios’ structure directly.
|
Instead, you should use the following functions to read and store them:
|
|
-- Function: speed_t cfgetospeed (const struct termios *TERMIOS-P)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function returns the output line speed stored in the structure
|
‘*TERMIOS-P’.
|
|
-- Function: speed_t cfgetispeed (const struct termios *TERMIOS-P)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function returns the input line speed stored in the structure
|
‘*TERMIOS-P’.
|
|
-- Function: int cfsetospeed (struct termios *TERMIOS-P, speed_t SPEED)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function stores SPEED in ‘*TERMIOS-P’ as the output speed.
|
The normal return value is 0; a value of -1 indicates an error. If
|
SPEED is not a speed, ‘cfsetospeed’ returns -1.
|
|
-- Function: int cfsetispeed (struct termios *TERMIOS-P, speed_t SPEED)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function stores SPEED in ‘*TERMIOS-P’ as the input speed. The
|
normal return value is 0; a value of -1 indicates an error. If
|
SPEED is not a speed, ‘cfsetospeed’ returns -1.
|
|
-- Function: int cfsetspeed (struct termios *TERMIOS-P, speed_t SPEED)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function stores SPEED in ‘*TERMIOS-P’ as both the input and
|
output speeds. The normal return value is 0; a value of -1
|
indicates an error. If SPEED is not a speed, ‘cfsetspeed’ returns
|
-1. This function is an extension in 4.4 BSD.
|
|
-- Data Type: speed_t
|
The ‘speed_t’ type is an unsigned integer data type used to
|
represent line speeds.
|
|
The functions ‘cfsetospeed’ and ‘cfsetispeed’ report errors only for
|
speed values that the system simply cannot handle. If you specify a
|
speed value that is basically acceptable, then those functions will
|
succeed. But they do not check that a particular hardware device can
|
actually support the specified speeds—in fact, they don’t know which
|
device you plan to set the speed for. If you use ‘tcsetattr’ to set the
|
speed of a particular device to a value that it cannot handle,
|
‘tcsetattr’ returns -1.
|
|
*Portability note:* In the GNU C Library, the functions above accept
|
speeds measured in bits per second as input, and return speed values
|
measured in bits per second. Other libraries require speeds to be
|
indicated by special codes. For POSIX.1 portability, you must use one
|
of the following symbols to represent the speed; their precise numeric
|
values are system-dependent, but each name has a fixed meaning: ‘B110’
|
stands for 110 bps, ‘B300’ for 300 bps, and so on. There is no portable
|
way to represent any speed but these, but these are the only speeds that
|
typical serial lines can support.
|
|
B0 B50 B75 B110 B134 B150 B200
|
B300 B600 B1200 B1800 B2400 B4800
|
B9600 B19200 B38400 B57600 B115200
|
B230400 B460800
|
|
BSD defines two additional speed symbols as aliases: ‘EXTA’ is an
|
alias for ‘B19200’ and ‘EXTB’ is an alias for ‘B38400’. These aliases
|
are obsolete.
|
|
|
File: libc.info, Node: Special Characters, Next: Noncanonical Input, Prev: Line Speed, Up: Terminal Modes
|
|
17.4.9 Special Characters
|
-------------------------
|
|
In canonical input, the terminal driver recognizes a number of special
|
characters which perform various control functions. These include the
|
ERASE character (usually <DEL>) for editing input, and other editing
|
characters. The INTR character (normally ‘C-c’) for sending a ‘SIGINT’
|
signal, and other signal-raising characters, may be available in either
|
canonical or noncanonical input mode. All these characters are
|
described in this section.
|
|
The particular characters used are specified in the ‘c_cc’ member of
|
the ‘struct termios’ structure. This member is an array; each element
|
specifies the character for a particular role. Each element has a
|
symbolic constant that stands for the index of that element—for example,
|
‘VINTR’ is the index of the element that specifies the INTR character,
|
so storing ‘'='’ in ‘TERMIOS.c_cc[VINTR]’ specifies ‘=’ as the INTR
|
character.
|
|
On some systems, you can disable a particular special character
|
function by specifying the value ‘_POSIX_VDISABLE’ for that role. This
|
value is unequal to any possible character code. *Note Options for
|
Files::, for more information about how to tell whether the operating
|
system you are using supports ‘_POSIX_VDISABLE’.
|
|
* Menu:
|
|
* 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.
|
|
|
File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters
|
|
17.4.9.1 Characters for Input Editing
|
.....................................
|
|
These special characters are active only in canonical input mode. *Note
|
Canonical or Not::.
|
|
-- Macro: int VEOF
|
This is the subscript for the EOF character in the special control
|
character array. ‘TERMIOS.c_cc[VEOF]’ holds the character itself.
|
|
The EOF character is recognized only in canonical input mode. It
|
acts as a line terminator in the same way as a newline character,
|
but if the EOF character is typed at the beginning of a line it
|
causes ‘read’ to return a byte count of zero, indicating
|
end-of-file. The EOF character itself is discarded.
|
|
Usually, the EOF character is ‘C-d’.
|
|
-- Macro: int VEOL
|
This is the subscript for the EOL character in the special control
|
character array. ‘TERMIOS.c_cc[VEOL]’ holds the character itself.
|
|
The EOL character is recognized only in canonical input mode. It
|
acts as a line terminator, just like a newline character. The EOL
|
character is not discarded; it is read as the last character in the
|
input line.
|
|
You don’t need to use the EOL character to make <RET> end a line.
|
Just set the ICRNL flag. In fact, this is the default state of
|
affairs.
|
|
-- Macro: int VEOL2
|
This is the subscript for the EOL2 character in the special control
|
character array. ‘TERMIOS.c_cc[VEOL2]’ holds the character itself.
|
|
The EOL2 character works just like the EOL character (see above),
|
but it can be a different character. Thus, you can specify two
|
characters to terminate an input line, by setting EOL to one of
|
them and EOL2 to the other.
|
|
The EOL2 character is a BSD extension; it exists only on BSD
|
systems and GNU/Linux and GNU/Hurd systems.
|
|
-- Macro: int VERASE
|
This is the subscript for the ERASE character in the special
|
control character array. ‘TERMIOS.c_cc[VERASE]’ holds the
|
character itself.
|
|
The ERASE character is recognized only in canonical input mode.
|
When the user types the erase character, the previous character
|
typed is discarded. (If the terminal generates multibyte character
|
sequences, this may cause more than one byte of input to be
|
discarded.) This cannot be used to erase past the beginning of the
|
current line of text. The ERASE character itself is discarded.
|
|
Usually, the ERASE character is <DEL>.
|
|
-- Macro: int VWERASE
|
This is the subscript for the WERASE character in the special
|
control character array. ‘TERMIOS.c_cc[VWERASE]’ holds the
|
character itself.
|
|
The WERASE character is recognized only in canonical mode. It
|
erases an entire word of prior input, and any whitespace after it;
|
whitespace characters before the word are not erased.
|
|
The definition of a “word” depends on the setting of the
|
‘ALTWERASE’ mode; *note Local Modes::.
|
|
If the ‘ALTWERASE’ mode is not set, a word is defined as a sequence
|
of any characters except space or tab.
|
|
If the ‘ALTWERASE’ mode is set, a word is defined as a sequence of
|
characters containing only letters, numbers, and underscores,
|
optionally followed by one character that is not a letter, number,
|
or underscore.
|
|
The WERASE character is usually ‘C-w’.
|
|
This is a BSD extension.
|
|
-- Macro: int VKILL
|
This is the subscript for the KILL character in the special control
|
character array. ‘TERMIOS.c_cc[VKILL]’ holds the character itself.
|
|
The KILL character is recognized only in canonical input mode.
|
When the user types the kill character, the entire contents of the
|
current line of input are discarded. The kill character itself is
|
discarded too.
|
|
The KILL character is usually ‘C-u’.
|
|
-- Macro: int VREPRINT
|
This is the subscript for the REPRINT character in the special
|
control character array. ‘TERMIOS.c_cc[VREPRINT]’ holds the
|
character itself.
|
|
The REPRINT character is recognized only in canonical mode. It
|
reprints the current input line. If some asynchronous output has
|
come while you are typing, this lets you see the line you are
|
typing clearly again.
|
|
The REPRINT character is usually ‘C-r’.
|
|
This is a BSD extension.
|
|
|
File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters
|
|
17.4.9.2 Characters that Cause Signals
|
......................................
|
|
These special characters may be active in either canonical or
|
noncanonical input mode, but only when the ‘ISIG’ flag is set (*note
|
Local Modes::).
|
|
-- Macro: int VINTR
|
This is the subscript for the INTR character in the special control
|
character array. ‘TERMIOS.c_cc[VINTR]’ holds the character itself.
|
|
The INTR (interrupt) character raises a ‘SIGINT’ signal for all
|
processes in the foreground job associated with the terminal. The
|
INTR character itself is then discarded. *Note Signal Handling::,
|
for more information about signals.
|
|
Typically, the INTR character is ‘C-c’.
|
|
-- Macro: int VQUIT
|
This is the subscript for the QUIT character in the special control
|
character array. ‘TERMIOS.c_cc[VQUIT]’ holds the character itself.
|
|
The QUIT character raises a ‘SIGQUIT’ signal for all processes in
|
the foreground job associated with the terminal. The QUIT
|
character itself is then discarded. *Note Signal Handling::, for
|
more information about signals.
|
|
Typically, the QUIT character is ‘C-\’.
|
|
-- Macro: int VSUSP
|
This is the subscript for the SUSP character in the special control
|
character array. ‘TERMIOS.c_cc[VSUSP]’ holds the character itself.
|
|
The SUSP (suspend) character is recognized only if the
|
implementation supports job control (*note Job Control::). It
|
causes a ‘SIGTSTP’ signal to be sent to all processes in the
|
foreground job associated with the terminal. The SUSP character
|
itself is then discarded. *Note Signal Handling::, for more
|
information about signals.
|
|
Typically, the SUSP character is ‘C-z’.
|
|
Few applications disable the normal interpretation of the SUSP
|
character. If your program does this, it should provide some other
|
mechanism for the user to stop the job. When the user invokes this
|
mechanism, the program should send a ‘SIGTSTP’ signal to the process
|
group of the process, not just to the process itself. *Note Signaling
|
Another Process::.
|
|
-- Macro: int VDSUSP
|
This is the subscript for the DSUSP character in the special
|
control character array. ‘TERMIOS.c_cc[VDSUSP]’ holds the
|
character itself.
|
|
The DSUSP (suspend) character is recognized only if the
|
implementation supports job control (*note Job Control::). It
|
sends a ‘SIGTSTP’ signal, like the SUSP character, but not right
|
away—only when the program tries to read it as input. Not all
|
systems with job control support DSUSP; only BSD-compatible systems
|
do (including GNU/Hurd systems).
|
|
*Note Signal Handling::, for more information about signals.
|
|
Typically, the DSUSP character is ‘C-y’.
|
|
|
File: libc.info, Node: Start/Stop Characters, Next: Other Special, Prev: Signal Characters, Up: Special Characters
|
|
17.4.9.3 Special Characters for Flow Control
|
............................................
|
|
These special characters may be active in either canonical or
|
noncanonical input mode, but their use is controlled by the flags ‘IXON’
|
and ‘IXOFF’ (*note Input Modes::).
|
|
-- Macro: int VSTART
|
This is the subscript for the START character in the special
|
control character array. ‘TERMIOS.c_cc[VSTART]’ holds the
|
character itself.
|
|
The START character is used to support the ‘IXON’ and ‘IXOFF’ input
|
modes. If ‘IXON’ is set, receiving a START character resumes
|
suspended output; the START character itself is discarded. If
|
‘IXANY’ is set, receiving any character at all resumes suspended
|
output; the resuming character is not discarded unless it is the
|
START character. If ‘IXOFF’ is set, the system may also transmit
|
START characters to the terminal.
|
|
The usual value for the START character is ‘C-q’. You may not be
|
able to change this value—the hardware may insist on using ‘C-q’
|
regardless of what you specify.
|
|
-- Macro: int VSTOP
|
This is the subscript for the STOP character in the special control
|
character array. ‘TERMIOS.c_cc[VSTOP]’ holds the character itself.
|
|
The STOP character is used to support the ‘IXON’ and ‘IXOFF’ input
|
modes. If ‘IXON’ is set, receiving a STOP character causes output
|
to be suspended; the STOP character itself is discarded. If
|
‘IXOFF’ is set, the system may also transmit STOP characters to the
|
terminal, to prevent the input queue from overflowing.
|
|
The usual value for the STOP character is ‘C-s’. You may not be
|
able to change this value—the hardware may insist on using ‘C-s’
|
regardless of what you specify.
|
|
|
File: libc.info, Node: Other Special, Prev: Start/Stop Characters, Up: Special Characters
|
|
17.4.9.4 Other Special Characters
|
.................................
|
|
-- Macro: int VLNEXT
|
This is the subscript for the LNEXT character in the special
|
control character array. ‘TERMIOS.c_cc[VLNEXT]’ holds the
|
character itself.
|
|
The LNEXT character is recognized only when ‘IEXTEN’ is set, but in
|
both canonical and noncanonical mode. It disables any special
|
significance of the next character the user types. Even if the
|
character would normally perform some editing function or generate
|
a signal, it is read as a plain character. This is the analogue of
|
the ‘C-q’ command in Emacs. “LNEXT” stands for “literal next.”
|
|
The LNEXT character is usually ‘C-v’.
|
|
This character is available on BSD systems and GNU/Linux and
|
GNU/Hurd systems.
|
|
-- Macro: int VDISCARD
|
This is the subscript for the DISCARD character in the special
|
control character array. ‘TERMIOS.c_cc[VDISCARD]’ holds the
|
character itself.
|
|
The DISCARD character is recognized only when ‘IEXTEN’ is set, but
|
in both canonical and noncanonical mode. Its effect is to toggle
|
the discard-output flag. When this flag is set, all program output
|
is discarded. Setting the flag also discards all output currently
|
in the output buffer. Typing any other character resets the flag.
|
|
This character is available on BSD systems and GNU/Linux and
|
GNU/Hurd systems.
|
|
-- Macro: int VSTATUS
|
This is the subscript for the STATUS character in the special
|
control character array. ‘TERMIOS.c_cc[VSTATUS]’ holds the
|
character itself.
|
|
The STATUS character’s effect is to print out a status message
|
about how the current process is running.
|
|
The STATUS character is recognized only in canonical mode, and only
|
if ‘NOKERNINFO’ is not set.
|
|
This character is available only on BSD systems and GNU/Hurd
|
systems.
|
|
|
File: libc.info, Node: Noncanonical Input, Prev: Special Characters, Up: Terminal Modes
|
|
17.4.10 Noncanonical Input
|
--------------------------
|
|
In noncanonical input mode, the special editing characters such as ERASE
|
and KILL are ignored. The system facilities for the user to edit input
|
are disabled in noncanonical mode, so that all input characters (unless
|
they are special for signal or flow-control purposes) are passed to the
|
application program exactly as typed. It is up to the application
|
program to give the user ways to edit the input, if appropriate.
|
|
Noncanonical mode offers special parameters called MIN and TIME for
|
controlling whether and how long to wait for input to be available. You
|
can even use them to avoid ever waiting—to return immediately with
|
whatever input is available, or with no input.
|
|
The MIN and TIME are stored in elements of the ‘c_cc’ array, which is
|
a member of the ‘struct termios’ structure. Each element of this array
|
has a particular role, and each element has a symbolic constant that
|
stands for the index of that element. ‘VMIN’ and ‘VTIME’ are the names
|
for the indices in the array of the MIN and TIME slots.
|
|
-- Macro: int VMIN
|
This is the subscript for the MIN slot in the ‘c_cc’ array. Thus,
|
‘TERMIOS.c_cc[VMIN]’ is the value itself.
|
|
The MIN slot is only meaningful in noncanonical input mode; it
|
specifies the minimum number of bytes that must be available in the
|
input queue in order for ‘read’ to return.
|
|
-- Macro: int VTIME
|
This is the subscript for the TIME slot in the ‘c_cc’ array. Thus,
|
‘TERMIOS.c_cc[VTIME]’ is the value itself.
|
|
The TIME slot is only meaningful in noncanonical input mode; it
|
specifies how long to wait for input before returning, in units of
|
0.1 seconds.
|
|
The MIN and TIME values interact to determine the criterion for when
|
‘read’ should return; their precise meanings depend on which of them are
|
nonzero. There are four possible cases:
|
|
• Both TIME and MIN are nonzero.
|
|
In this case, TIME specifies how long to wait after each input
|
character to see if more input arrives. After the first character
|
received, ‘read’ keeps waiting until either MIN bytes have arrived
|
in all, or TIME elapses with no further input.
|
|
‘read’ always blocks until the first character arrives, even if
|
TIME elapses first. ‘read’ can return more than MIN characters if
|
more than MIN happen to be in the queue.
|
|
• Both MIN and TIME are zero.
|
|
In this case, ‘read’ always returns immediately with as many
|
characters as are available in the queue, up to the number
|
requested. If no input is immediately available, ‘read’ returns a
|
value of zero.
|
|
• MIN is zero but TIME has a nonzero value.
|
|
In this case, ‘read’ waits for time TIME for input to become
|
available; the availability of a single byte is enough to satisfy
|
the read request and cause ‘read’ to return. When it returns, it
|
returns as many characters as are available, up to the number
|
requested. If no input is available before the timer expires,
|
‘read’ returns a value of zero.
|
|
• TIME is zero but MIN has a nonzero value.
|
|
In this case, ‘read’ waits until at least MIN bytes are available
|
in the queue. At that time, ‘read’ returns as many characters as
|
are available, up to the number requested. ‘read’ can return more
|
than MIN characters if more than MIN happen to be in the queue.
|
|
What happens if MIN is 50 and you ask to read just 10 bytes?
|
Normally, ‘read’ waits until there are 50 bytes in the buffer (or, more
|
generally, the wait condition described above is satisfied), and then
|
reads 10 of them, leaving the other 40 buffered in the operating system
|
for a subsequent call to ‘read’.
|
|
*Portability note:* On some systems, the MIN and TIME slots are
|
actually the same as the EOF and EOL slots. This causes no serious
|
problem because the MIN and TIME slots are used only in noncanonical
|
input and the EOF and EOL slots are used only in canonical input, but it
|
isn’t very clean. The GNU C Library allocates separate slots for these
|
uses.
|
|
-- Function: void cfmakeraw (struct termios *TERMIOS-P)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function provides an easy way to set up ‘*TERMIOS-P’ for what
|
has traditionally been called “raw mode” in BSD. This uses
|
noncanonical input, and turns off most processing to give an
|
unmodified channel to the terminal.
|
|
It does exactly this:
|
TERMIOS-P->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
|INLCR|IGNCR|ICRNL|IXON);
|
TERMIOS-P->c_oflag &= ~OPOST;
|
TERMIOS-P->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
TERMIOS-P->c_cflag &= ~(CSIZE|PARENB);
|
TERMIOS-P->c_cflag |= CS8;
|
|
|
File: libc.info, Node: BSD Terminal Modes, Next: Line Control, Prev: Terminal Modes, Up: Low-Level Terminal Interface
|
|
17.5 BSD Terminal Modes
|
=======================
|
|
The usual way to get and set terminal modes is with the functions
|
described in *note Terminal Modes::. However, on some systems you can
|
use the BSD-derived functions in this section to do some of the same
|
things. On many systems, these functions do not exist. Even with the
|
GNU C Library, the functions simply fail with ‘errno’ = ‘ENOSYS’ with
|
many kernels, including Linux.
|
|
The symbols used in this section are declared in ‘sgtty.h’.
|
|
-- Data Type: struct sgttyb
|
This structure is an input or output parameter list for ‘gtty’ and
|
‘stty’.
|
|
‘char sg_ispeed’
|
Line speed for input
|
‘char sg_ospeed’
|
Line speed for output
|
‘char sg_erase’
|
Erase character
|
‘char sg_kill’
|
Kill character
|
‘int sg_flags’
|
Various flags
|
|
-- Function: int gtty (int FILEDES, struct sgttyb *ATTRIBUTES)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function gets the attributes of a terminal.
|
|
‘gtty’ sets *ATTRIBUTES to describe the terminal attributes of the
|
terminal which is open with file descriptor FILEDES.
|
|
-- Function: int stty (int FILEDES, const struct sgttyb *ATTRIBUTES)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function sets the attributes of a terminal.
|
|
‘stty’ sets the terminal attributes of the terminal which is open
|
with file descriptor FILEDES to those described by *ATTRIBUTES.
|
|
|
File: libc.info, Node: Line Control, Next: Noncanon Example, Prev: BSD Terminal Modes, Up: Low-Level Terminal Interface
|
|
17.6 Line Control Functions
|
===========================
|
|
These functions perform miscellaneous control actions on terminal
|
devices. As regards terminal access, they are treated like doing
|
output: if any of these functions is used by a background process on its
|
controlling terminal, normally all processes in the process group are
|
sent a ‘SIGTTOU’ signal. The exception is if the calling process itself
|
is ignoring or blocking ‘SIGTTOU’ signals, in which case the operation
|
is performed and no signal is sent. *Note Job Control::.
|
|
-- Function: int tcsendbreak (int FILEDES, int DURATION)
|
Preliminary: | MT-Unsafe race:tcattr(filedes)/bsd | AS-Unsafe |
|
AC-Unsafe corrupt/bsd | *Note POSIX Safety Concepts::.
|
|
This function generates a break condition by transmitting a stream
|
of zero bits on the terminal associated with the file descriptor
|
FILEDES. The duration of the break is controlled by the DURATION
|
argument. If zero, the duration is between 0.25 and 0.5 seconds.
|
The meaning of a nonzero value depends on the operating system.
|
|
This function does nothing if the terminal is not an asynchronous
|
serial data port.
|
|
The return value is normally zero. In the event of an error, a
|
value of -1 is returned. The following ‘errno’ error conditions
|
are defined for this function:
|
|
‘EBADF’
|
The FILEDES is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal device.
|
|
-- Function: int tcdrain (int FILEDES)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘tcdrain’ function waits until all queued output to the
|
terminal FILEDES has been transmitted.
|
|
This function is a cancellation point in multi-threaded programs.
|
This is a problem if the thread allocates some resources (like
|
memory, file descriptors, semaphores or whatever) at the time
|
‘tcdrain’ is called. If the thread gets canceled these resources
|
stay allocated until the program ends. To avoid this calls to
|
‘tcdrain’ should be protected using cancellation handlers.
|
|
The return value is normally zero. In the event of an error, a
|
value of -1 is returned. The following ‘errno’ error conditions
|
are defined for this function:
|
|
‘EBADF’
|
The FILEDES is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal device.
|
|
‘EINTR’
|
The operation was interrupted by delivery of a signal. *Note
|
Interrupted Primitives::.
|
|
-- Function: int tcflush (int FILEDES, int QUEUE)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
The ‘tcflush’ function is used to clear the input and/or output
|
queues associated with the terminal file FILEDES. The QUEUE
|
argument specifies which queue(s) to clear, and can be one of the
|
following values:
|
|
‘TCIFLUSH’
|
|
Clear any input data received, but not yet read.
|
|
‘TCOFLUSH’
|
|
Clear any output data written, but not yet transmitted.
|
|
‘TCIOFLUSH’
|
|
Clear both queued input and output.
|
|
The return value is normally zero. In the event of an error, a
|
value of -1 is returned. The following ‘errno’ error conditions
|
are defined for this function:
|
|
‘EBADF’
|
The FILEDES is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal device.
|
|
‘EINVAL’
|
A bad value was supplied as the QUEUE argument.
|
|
It is unfortunate that this function is named ‘tcflush’, because
|
the term “flush” is normally used for quite another
|
operation—waiting until all output is transmitted—and using it for
|
discarding input or output would be confusing. Unfortunately, the
|
name ‘tcflush’ comes from POSIX and we cannot change it.
|
|
-- Function: int tcflow (int FILEDES, int ACTION)
|
Preliminary: | MT-Unsafe race:tcattr(filedes)/bsd | AS-Unsafe |
|
AC-Safe | *Note POSIX Safety Concepts::.
|
|
The ‘tcflow’ function is used to perform operations relating to
|
XON/XOFF flow control on the terminal file specified by FILEDES.
|
|
The ACTION argument specifies what operation to perform, and can be
|
one of the following values:
|
|
‘TCOOFF’
|
Suspend transmission of output.
|
|
‘TCOON’
|
Restart transmission of output.
|
|
‘TCIOFF’
|
Transmit a STOP character.
|
|
‘TCION’
|
Transmit a START character.
|
|
For more information about the STOP and START characters, see *note
|
Special Characters::.
|
|
The return value is normally zero. In the event of an error, a
|
value of -1 is returned. The following ‘errno’ error conditions
|
are defined for this function:
|
|
‘EBADF’
|
The FILEDES is not a valid file descriptor.
|
|
‘ENOTTY’
|
The FILEDES is not associated with a terminal device.
|
|
‘EINVAL’
|
A bad value was supplied as the ACTION argument.
|
|
|
File: libc.info, Node: Noncanon Example, Next: Pseudo-Terminals, Prev: Line Control, Up: Low-Level Terminal Interface
|
|
17.7 Noncanonical Mode Example
|
==============================
|
|
Here is an example program that shows how you can set up a terminal
|
device to read single characters in noncanonical input mode, without
|
echo.
|
|
|
#include <unistd.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <termios.h>
|
|
/* Use this variable to remember original terminal attributes. */
|
|
struct termios saved_attributes;
|
|
void
|
reset_input_mode (void)
|
{
|
tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
|
}
|
|
void
|
set_input_mode (void)
|
{
|
struct termios tattr;
|
char *name;
|
|
/* Make sure stdin is a terminal. */
|
if (!isatty (STDIN_FILENO))
|
{
|
fprintf (stderr, "Not a terminal.\n");
|
exit (EXIT_FAILURE);
|
}
|
|
/* Save the terminal attributes so we can restore them later. */
|
tcgetattr (STDIN_FILENO, &saved_attributes);
|
atexit (reset_input_mode);
|
|
/* Set the funny terminal modes. */
|
tcgetattr (STDIN_FILENO, &tattr);
|
tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
|
tattr.c_cc[VMIN] = 1;
|
tattr.c_cc[VTIME] = 0;
|
tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
|
}
|
|
int
|
main (void)
|
{
|
char c;
|
|
set_input_mode ();
|
|
while (1)
|
{
|
read (STDIN_FILENO, &c, 1);
|
if (c == '\004') /* ‘C-d’ */
|
break;
|
else
|
putchar (c);
|
}
|
|
return EXIT_SUCCESS;
|
}
|
|
This program is careful to restore the original terminal modes before
|
exiting or terminating with a signal. It uses the ‘atexit’ function
|
(*note Cleanups on Exit::) to make sure this is done by ‘exit’.
|
|
The shell is supposed to take care of resetting the terminal modes
|
when a process is stopped or continued; see *note Job Control::. But
|
some existing shells do not actually do this, so you may wish to
|
establish handlers for job control signals that reset terminal modes.
|
The above example does so.
|
|
|
File: libc.info, Node: Pseudo-Terminals, Prev: Noncanon Example, Up: Low-Level Terminal Interface
|
|
17.8 Pseudo-Terminals
|
=====================
|
|
A "pseudo-terminal" is a special interprocess communication channel that
|
acts like a terminal. One end of the channel is called the "master"
|
side or "master pseudo-terminal device", the other side is called the
|
"slave" side. Data written to the master side is received by the slave
|
side as if it was the result of a user typing at an ordinary terminal,
|
and data written to the slave side is sent to the master side as if it
|
was written on an ordinary terminal.
|
|
Pseudo terminals are the way programs like ‘xterm’ and ‘emacs’
|
implement their terminal emulation functionality.
|
|
* Menu:
|
|
* Allocation:: Allocating a pseudo terminal.
|
* Pseudo-Terminal Pairs:: How to open both sides of a
|
pseudo-terminal in a single operation.
|
|
|
File: libc.info, Node: Allocation, Next: Pseudo-Terminal Pairs, Up: Pseudo-Terminals
|
|
17.8.1 Allocating Pseudo-Terminals
|
----------------------------------
|
|
This subsection describes functions for allocating a pseudo-terminal,
|
and for making this pseudo-terminal available for actual use. These
|
functions are declared in the header file ‘stdlib.h’.
|
|
-- Function: int getpt (void)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
|
Concepts::.
|
|
The ‘getpt’ function returns a new file descriptor for the next
|
available master pseudo-terminal. The normal return value from
|
‘getpt’ is a non-negative integer file descriptor. In the case of
|
an error, a value of -1 is returned instead. The following ‘errno’
|
conditions are defined for this function:
|
|
‘ENOENT’
|
There are no free master pseudo-terminals available.
|
|
This function is a GNU extension.
|
|
-- Function: int grantpt (int FILEDES)
|
Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
|
AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
|
|
The ‘grantpt’ function changes the ownership and access permission
|
of the slave pseudo-terminal device corresponding to the master
|
pseudo-terminal device associated with the file descriptor FILEDES.
|
The owner is set from the real user ID of the calling process
|
(*note Process Persona::), and the group is set to a special group
|
(typically "tty") or from the real group ID of the calling process.
|
The access permission is set such that the file is both readable
|
and writable by the owner and only writable by the group.
|
|
On some systems this function is implemented by invoking a special
|
‘setuid’ root program (*note How Change Persona::). As a
|
consequence, installing a signal handler for the ‘SIGCHLD’ signal
|
(*note Job Control Signals::) may interfere with a call to
|
‘grantpt’.
|
|
The normal return value from ‘grantpt’ is 0; a value of -1 is
|
returned in case of failure. The following ‘errno’ error
|
conditions are defined for this function:
|
|
‘EBADF’
|
The FILEDES argument is not a valid file descriptor.
|
|
‘EINVAL’
|
The FILEDES argument is not associated with a master
|
pseudo-terminal device.
|
|
‘EACCES’
|
The slave pseudo-terminal device corresponding to the master
|
associated with FILEDES could not be accessed.
|
|
-- Function: int unlockpt (int FILEDES)
|
Preliminary: | MT-Safe | AS-Unsafe heap/bsd | AC-Unsafe mem fd |
|
*Note POSIX Safety Concepts::.
|
|
The ‘unlockpt’ function unlocks the slave pseudo-terminal device
|
corresponding to the master pseudo-terminal device associated with
|
the file descriptor FILEDES. On many systems, the slave can only
|
be opened after unlocking, so portable applications should always
|
call ‘unlockpt’ before trying to open the slave.
|
|
The normal return value from ‘unlockpt’ is 0; a value of -1 is
|
returned in case of failure. The following ‘errno’ error
|
conditions are defined for this function:
|
|
‘EBADF’
|
The FILEDES argument is not a valid file descriptor.
|
|
‘EINVAL’
|
The FILEDES argument is not associated with a master
|
pseudo-terminal device.
|
|
-- Function: char * ptsname (int FILEDES)
|
Preliminary: | MT-Unsafe race:ptsname | AS-Unsafe heap/bsd |
|
AC-Unsafe mem fd | *Note POSIX Safety Concepts::.
|
|
If the file descriptor FILEDES is associated with a master
|
pseudo-terminal device, the ‘ptsname’ function returns a pointer to
|
a statically-allocated, null-terminated string containing the file
|
name of the associated slave pseudo-terminal file. This string
|
might be overwritten by subsequent calls to ‘ptsname’.
|
|
-- Function: int ptsname_r (int FILEDES, char *BUF, size_t LEN)
|
Preliminary: | MT-Safe | AS-Unsafe heap/bsd | AC-Unsafe mem fd |
|
*Note POSIX Safety Concepts::.
|
|
The ‘ptsname_r’ function is similar to the ‘ptsname’ function
|
except that it places its result into the user-specified buffer
|
starting at BUF with length LEN.
|
|
This function is a GNU extension.
|
|
*Portability Note:* On System V derived systems, the file returned by
|
the ‘ptsname’ and ‘ptsname_r’ functions may be STREAMS-based, and
|
therefore require additional processing after opening before it actually
|
behaves as a pseudo terminal.
|
|
Typical usage of these functions is illustrated by the following
|
example:
|
int
|
open_pty_pair (int *amaster, int *aslave)
|
{
|
int master, slave;
|
char *name;
|
|
master = getpt ();
|
if (master < 0)
|
return 0;
|
|
if (grantpt (master) < 0 || unlockpt (master) < 0)
|
goto close_master;
|
name = ptsname (master);
|
if (name == NULL)
|
goto close_master;
|
|
slave = open (name, O_RDWR);
|
if (slave == -1)
|
goto close_master;
|
|
if (isastream (slave))
|
{
|
if (ioctl (slave, I_PUSH, "ptem") < 0
|
|| ioctl (slave, I_PUSH, "ldterm") < 0)
|
goto close_slave;
|
}
|
|
*amaster = master;
|
*aslave = slave;
|
return 1;
|
|
close_slave:
|
close (slave);
|
|
close_master:
|
close (master);
|
return 0;
|
}
|
|
|
File: libc.info, Node: Pseudo-Terminal Pairs, Prev: Allocation, Up: Pseudo-Terminals
|
|
17.8.2 Opening a Pseudo-Terminal Pair
|
-------------------------------------
|
|
These functions, derived from BSD, are available in the separate
|
‘libutil’ library, and declared in ‘pty.h’.
|
|
-- Function: int openpty (int *AMASTER, int *ASLAVE, char *NAME, const
|
struct termios *TERMP, const struct winsize *WINP)
|
Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
|
AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
|
|
This function allocates and opens a pseudo-terminal pair, returning
|
the file descriptor for the master in *AMASTER, and the file
|
descriptor for the slave in *ASLAVE. If the argument NAME is not a
|
null pointer, the file name of the slave pseudo-terminal device is
|
stored in ‘*name’. If TERMP is not a null pointer, the terminal
|
attributes of the slave are set to the ones specified in the
|
structure that TERMP points to (*note Terminal Modes::). Likewise,
|
if WINP is not a null pointer, the screen size of the slave is set
|
to the values specified in the structure that WINP points to.
|
|
The normal return value from ‘openpty’ is 0; a value of -1 is
|
returned in case of failure. The following ‘errno’ conditions are
|
defined for this function:
|
|
‘ENOENT’
|
There are no free pseudo-terminal pairs available.
|
|
*Warning:* Using the ‘openpty’ function with NAME not set to ‘NULL’
|
is *very dangerous* because it provides no protection against
|
overflowing the string NAME. You should use the ‘ttyname’ function
|
on the file descriptor returned in *SLAVE to find out the file name
|
of the slave pseudo-terminal device instead.
|
|
-- Function: int forkpty (int *AMASTER, char *NAME, const struct
|
termios *TERMP, const struct winsize *WINP)
|
Preliminary: | MT-Safe locale | AS-Unsafe dlopen plugin heap lock |
|
AC-Unsafe corrupt lock fd mem | *Note POSIX Safety Concepts::.
|
|
This function is similar to the ‘openpty’ function, but in
|
addition, forks a new process (*note Creating a Process::) and
|
makes the newly opened slave pseudo-terminal device the controlling
|
terminal (*note Controlling Terminal::) for the child process.
|
|
If the operation is successful, there are then both parent and
|
child processes and both see ‘forkpty’ return, but with different
|
values: it returns a value of 0 in the child process and returns
|
the child’s process ID in the parent process.
|
|
If the allocation of a pseudo-terminal pair or the process creation
|
failed, ‘forkpty’ returns a value of -1 in the parent process.
|
|
*Warning:* The ‘forkpty’ function has the same problems with
|
respect to the NAME argument as ‘openpty’.
|
|
|
File: libc.info, Node: Syslog, Next: Mathematics, Prev: Low-Level Terminal Interface, Up: Top
|
|
18 Syslog
|
*********
|
|
This chapter describes facilities for issuing and logging messages of
|
system administration interest. This chapter has nothing to do with
|
programs issuing messages to their own users or keeping private logs
|
(One would typically do that with the facilities described in *note I/O
|
on Streams::).
|
|
Most systems have a facility called “Syslog” that allows programs to
|
submit messages of interest to system administrators and can be
|
configured to pass these messages on in various ways, such as printing
|
on the console, mailing to a particular person, or recording in a log
|
file for future reference.
|
|
A program uses the facilities in this chapter to submit such
|
messages.
|
|
* Menu:
|
|
* Overview of Syslog:: Overview of a system’s Syslog facility
|
* Submitting Syslog Messages:: Functions to submit messages to Syslog
|
|
|
File: libc.info, Node: Overview of Syslog, Next: Submitting Syslog Messages, Up: Syslog
|
|
18.1 Overview of Syslog
|
=======================
|
|
System administrators have to deal with lots of different kinds of
|
messages from a plethora of subsystems within each system, and usually
|
lots of systems as well. For example, an FTP server might report every
|
connection it gets. The kernel might report hardware failures on a disk
|
drive. A DNS server might report usage statistics at regular intervals.
|
|
Some of these messages need to be brought to a system administrator’s
|
attention immediately. And it may not be just any system administrator
|
– there may be a particular system administrator who deals with a
|
particular kind of message. Other messages just need to be recorded for
|
future reference if there is a problem. Still others may need to have
|
information extracted from them by an automated process that generates
|
monthly reports.
|
|
To deal with these messages, most Unix systems have a facility called
|
"Syslog." It is generally based on a daemon called “Syslogd” Syslogd
|
listens for messages on a Unix domain socket named ‘/dev/log’. Based on
|
classification information in the messages and its configuration file
|
(usually ‘/etc/syslog.conf’), Syslogd routes them in various ways. Some
|
of the popular routings are:
|
|
• Write to the system console
|
• Mail to a specific user
|
• Write to a log file
|
• Pass to another daemon
|
• Discard
|
|
Syslogd can also handle messages from other systems. It listens on
|
the ‘syslog’ UDP port as well as the local socket for messages.
|
|
Syslog can handle messages from the kernel itself. But the kernel
|
doesn’t write to ‘/dev/log’; rather, another daemon (sometimes called
|
“Klogd”) extracts messages from the kernel and passes them on to Syslog
|
as any other process would (and it properly identifies them as messages
|
from the kernel).
|
|
Syslog can even handle messages that the kernel issued before Syslogd
|
or Klogd was running. A Linux kernel, for example, stores startup
|
messages in a kernel message ring and they are normally still there when
|
Klogd later starts up. Assuming Syslogd is running by the time Klogd
|
starts, Klogd then passes everything in the message ring to it.
|
|
In order to classify messages for disposition, Syslog requires any
|
process that submits a message to it to provide two pieces of
|
classification information with it:
|
|
facility
|
This identifies who submitted the message. There are a small
|
number of facilities defined. The kernel, the mail subsystem, and
|
an FTP server are examples of recognized facilities. For the
|
complete list, *Note syslog; vsyslog::. Keep in mind that these
|
are essentially arbitrary classifications. "Mail subsystem"
|
doesn’t have any more meaning than the system administrator gives
|
to it.
|
|
priority
|
This tells how important the content of the message is. Examples
|
of defined priority values are: debug, informational, warning and
|
critical. For the complete list, see *note syslog; vsyslog::.
|
Except for the fact that the priorities have a defined order, the
|
meaning of each of these priorities is entirely determined by the
|
system administrator.
|
|
A “facility/priority” is a number that indicates both the facility
|
and the priority.
|
|
*Warning:* This terminology is not universal. Some people use
|
“level” to refer to the priority and “priority” to refer to the
|
combination of facility and priority. A Linux kernel has a concept of a
|
message “level,” which corresponds both to a Syslog priority and to a
|
Syslog facility/priority (It can be both because the facility code for
|
the kernel is zero, and that makes priority and facility/priority the
|
same value).
|
|
The GNU C Library provides functions to submit messages to Syslog.
|
They do it by writing to the ‘/dev/log’ socket. *Note Submitting Syslog
|
Messages::.
|
|
The GNU C Library functions only work to submit messages to the
|
Syslog facility on the same system. To submit a message to the Syslog
|
facility on another system, use the socket I/O functions to write a UDP
|
datagram to the ‘syslog’ UDP port on that system. *Note Sockets::.
|
|
|
File: libc.info, Node: Submitting Syslog Messages, Prev: Overview of Syslog, Up: Syslog
|
|
18.2 Submitting Syslog Messages
|
===============================
|
|
The GNU C Library provides functions to submit messages to the Syslog
|
facility:
|
|
* Menu:
|
|
* 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
|
|
These functions only work to submit messages to the Syslog facility
|
on the same system. To submit a message to the Syslog facility on
|
another system, use the socket I/O functions to write a UDP datagram to
|
the ‘syslog’ UDP port on that system. *Note Sockets::.
|
|
|
File: libc.info, Node: openlog, Next: syslog; vsyslog, Up: Submitting Syslog Messages
|
|
18.2.1 openlog
|
--------------
|
|
The symbols referred to in this section are declared in the file
|
‘syslog.h’.
|
|
-- Function: void openlog (const char *IDENT, int OPTION, int FACILITY)
|
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd | *Note
|
POSIX Safety Concepts::.
|
|
‘openlog’ opens or reopens a connection to Syslog in preparation
|
for submitting messages.
|
|
IDENT is an arbitrary identification string which future ‘syslog’
|
invocations will prefix to each message. This is intended to
|
identify the source of the message, and people conventionally set
|
it to the name of the program that will submit the messages.
|
|
If IDENT is NULL, or if ‘openlog’ is not called, the default
|
identification string used in Syslog messages will be the program
|
name, taken from argv[0].
|
|
Please note that the string pointer IDENT will be retained
|
internally by the Syslog routines. You must not free the memory
|
that IDENT points to. It is also dangerous to pass a reference to
|
an automatic variable since leaving the scope would mean ending the
|
lifetime of the variable. If you want to change the IDENT string,
|
you must call ‘openlog’ again; overwriting the string pointed to by
|
IDENT is not thread-safe.
|
|
You can cause the Syslog routines to drop the reference to IDENT
|
and go back to the default string (the program name taken from
|
argv[0]), by calling ‘closelog’: *Note closelog::.
|
|
In particular, if you are writing code for a shared library that
|
might get loaded and then unloaded (e.g. a PAM module), and you
|
use ‘openlog’, you must call ‘closelog’ before any point where your
|
library might get unloaded, as in this example:
|
|
#include <syslog.h>
|
|
void
|
shared_library_function (void)
|
{
|
openlog ("mylibrary", option, priority);
|
|
syslog (LOG_INFO, "shared library has been invoked");
|
|
closelog ();
|
}
|
|
Without the call to ‘closelog’, future invocations of ‘syslog’ by
|
the program using the shared library may crash, if the library gets
|
unloaded and the memory containing the string ‘"mylibrary"’ becomes
|
unmapped. This is a limitation of the BSD syslog interface.
|
|
‘openlog’ may or may not open the ‘/dev/log’ socket, depending on
|
OPTION. If it does, it tries to open it and connect it as a stream
|
socket. If that doesn’t work, it tries to open it and connect it
|
as a datagram socket. The socket has the “Close on Exec”
|
attribute, so the kernel will close it if the process performs an
|
exec.
|
|
You don’t have to use ‘openlog’. If you call ‘syslog’ without
|
having called ‘openlog’, ‘syslog’ just opens the connection
|
implicitly and uses defaults for the information in IDENT and
|
OPTIONS.
|
|
OPTIONS is a bit string, with the bits as defined by the following
|
single bit masks:
|
|
‘LOG_PERROR’
|
If on, ‘openlog’ sets up the connection so that any ‘syslog’
|
on this connection writes its message to the calling process’
|
Standard Error stream in addition to submitting it to Syslog.
|
If off, ‘syslog’ does not write the message to Standard Error.
|
|
‘LOG_CONS’
|
If on, ‘openlog’ sets up the connection so that a ‘syslog’ on
|
this connection that fails to submit a message to Syslog
|
writes the message instead to system console. If off,
|
‘syslog’ does not write to the system console (but of course
|
Syslog may write messages it receives to the console).
|
|
‘LOG_PID’
|
When on, ‘openlog’ sets up the connection so that a ‘syslog’
|
on this connection inserts the calling process’ Process ID
|
(PID) into the message. When off, ‘openlog’ does not insert
|
the PID.
|
|
‘LOG_NDELAY’
|
When on, ‘openlog’ opens and connects the ‘/dev/log’ socket.
|
When off, a future ‘syslog’ call must open and connect the
|
socket.
|
|
*Portability note:* In early systems, the sense of this bit
|
was exactly the opposite.
|
|
‘LOG_ODELAY’
|
This bit does nothing. It exists for backward compatibility.
|
|
If any other bit in OPTIONS is on, the result is undefined.
|
|
FACILITY is the default facility code for this connection. A
|
‘syslog’ on this connection that specifies default facility causes
|
this facility to be associated with the message. See ‘syslog’ for
|
possible values. A value of zero means the default, which is
|
‘LOG_USER’.
|
|
If a Syslog connection is already open when you call ‘openlog’,
|
‘openlog’ “reopens” the connection. Reopening is like opening
|
except that if you specify zero for the default facility code, the
|
default facility code simply remains unchanged and if you specify
|
LOG_NDELAY and the socket is already open and connected, ‘openlog’
|
just leaves it that way.
|
|
|
File: libc.info, Node: syslog; vsyslog, Next: closelog, Prev: openlog, Up: Submitting Syslog Messages
|
|
18.2.2 syslog, vsyslog
|
----------------------
|
|
The symbols referred to in this section are declared in the file
|
‘syslog.h’.
|
|
-- Function: void syslog (int FACILITY_PRIORITY, const char *FORMAT, …)
|
Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock
|
dlopen | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety
|
Concepts::.
|
|
‘syslog’ submits a message to the Syslog facility. It does this by
|
writing to the Unix domain socket ‘/dev/log’.
|
|
‘syslog’ submits the message with the facility and priority
|
indicated by FACILITY_PRIORITY. The macro ‘LOG_MAKEPRI’ generates
|
a facility/priority from a facility and a priority, as in the
|
following example:
|
|
LOG_MAKEPRI(LOG_USER, LOG_WARNING)
|
|
The possible values for the facility code are (macros):
|
|
‘LOG_USER’
|
A miscellaneous user process
|
‘LOG_MAIL’
|
Mail
|
‘LOG_DAEMON’
|
A miscellaneous system daemon
|
‘LOG_AUTH’
|
Security (authorization)
|
‘LOG_SYSLOG’
|
Syslog
|
‘LOG_LPR’
|
Central printer
|
‘LOG_NEWS’
|
Network news (e.g. Usenet)
|
‘LOG_UUCP’
|
UUCP
|
‘LOG_CRON’
|
Cron and At
|
‘LOG_AUTHPRIV’
|
Private security (authorization)
|
‘LOG_FTP’
|
Ftp server
|
‘LOG_LOCAL0’
|
Locally defined
|
‘LOG_LOCAL1’
|
Locally defined
|
‘LOG_LOCAL2’
|
Locally defined
|
‘LOG_LOCAL3’
|
Locally defined
|
‘LOG_LOCAL4’
|
Locally defined
|
‘LOG_LOCAL5’
|
Locally defined
|
‘LOG_LOCAL6’
|
Locally defined
|
‘LOG_LOCAL7’
|
Locally defined
|
|
Results are undefined if the facility code is anything else.
|
|
*NB:* ‘syslog’ recognizes one other facility code: that of the
|
kernel. But you can’t specify that facility code with these
|
functions. If you try, it looks the same to ‘syslog’ as if you are
|
requesting the default facility. But you wouldn’t want to anyway,
|
because any program that uses the GNU C Library is not the kernel.
|
|
You can use just a priority code as FACILITY_PRIORITY. In that
|
case, ‘syslog’ assumes the default facility established when the
|
Syslog connection was opened. *Note Syslog Example::.
|
|
The possible values for the priority code are (macros):
|
|
‘LOG_EMERG’
|
The message says the system is unusable.
|
‘LOG_ALERT’
|
Action on the message must be taken immediately.
|
‘LOG_CRIT’
|
The message states a critical condition.
|
‘LOG_ERR’
|
The message describes an error.
|
‘LOG_WARNING’
|
The message is a warning.
|
‘LOG_NOTICE’
|
The message describes a normal but important event.
|
‘LOG_INFO’
|
The message is purely informational.
|
‘LOG_DEBUG’
|
The message is only for debugging purposes.
|
|
Results are undefined if the priority code is anything else.
|
|
If the process does not presently have a Syslog connection open
|
(i.e., it did not call ‘openlog’), ‘syslog’ implicitly opens the
|
connection the same as ‘openlog’ would, with the following defaults
|
for information that would otherwise be included in an ‘openlog’
|
call: The default identification string is the program name. The
|
default default facility is ‘LOG_USER’. The default for all the
|
connection options in OPTIONS is as if those bits were off.
|
‘syslog’ leaves the Syslog connection open.
|
|
If the ‘/dev/log’ socket is not open and connected, ‘syslog’ opens
|
and connects it, the same as ‘openlog’ with the ‘LOG_NDELAY’ option
|
would.
|
|
‘syslog’ leaves ‘/dev/log’ open and connected unless its attempt to
|
send the message failed, in which case ‘syslog’ closes it (with the
|
hope that a future implicit open will restore the Syslog connection
|
to a usable state).
|
|
Example:
|
|
|
#include <syslog.h>
|
syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
|
"Unable to make network connection to %s. Error=%m", host);
|
|
|
-- Function: void vsyslog (int FACILITY_PRIORITY, const char *FORMAT,
|
va_list ARGLIST)
|
Preliminary: | MT-Safe env locale | AS-Unsafe corrupt heap lock
|
dlopen | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety
|
Concepts::.
|
|
This is functionally identical to ‘syslog’, with the BSD style
|
variable length argument.
|
|
|
File: libc.info, Node: closelog, Next: setlogmask, Prev: syslog; vsyslog, Up: Submitting Syslog Messages
|
|
18.2.3 closelog
|
---------------
|
|
The symbols referred to in this section are declared in the file
|
‘syslog.h’.
|
|
-- Function: void closelog (void)
|
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd | *Note
|
POSIX Safety Concepts::.
|
|
‘closelog’ closes the current Syslog connection, if there is one.
|
This includes closing the ‘/dev/log’ socket, if it is open.
|
‘closelog’ also sets the identification string for Syslog messages
|
back to the default, if ‘openlog’ was called with a non-NULL
|
argument to IDENT. The default identification string is the
|
program name taken from argv[0].
|
|
If you are writing shared library code that uses ‘openlog’ to
|
generate custom syslog output, you should use ‘closelog’ to drop
|
the GNU C Library’s internal reference to the IDENT pointer when
|
you are done. Please read the section on ‘openlog’ for more
|
information: *Note openlog::.
|
|
‘closelog’ does not flush any buffers. You do not have to call
|
‘closelog’ before re-opening a Syslog connection with ‘openlog’.
|
Syslog connections are automatically closed on exec or exit.
|
|
|
File: libc.info, Node: setlogmask, Next: Syslog Example, Prev: closelog, Up: Submitting Syslog Messages
|
|
18.2.4 setlogmask
|
-----------------
|
|
The symbols referred to in this section are declared in the file
|
‘syslog.h’.
|
|
-- Function: int setlogmask (int MASK)
|
Preliminary: | MT-Unsafe race:LogMask | AS-Unsafe | AC-Safe | *Note
|
POSIX Safety Concepts::.
|
|
‘setlogmask’ sets a mask (the “logmask”) that determines which
|
future ‘syslog’ calls shall be ignored. If a program has not
|
called ‘setlogmask’, ‘syslog’ doesn’t ignore any calls. You can
|
use ‘setlogmask’ to specify that messages of particular priorities
|
shall be ignored in the future.
|
|
A ‘setlogmask’ call overrides any previous ‘setlogmask’ call.
|
|
Note that the logmask exists entirely independently of opening and
|
closing of Syslog connections.
|
|
Setting the logmask has a similar effect to, but is not the same
|
as, configuring Syslog. The Syslog configuration may cause Syslog
|
to discard certain messages it receives, but the logmask causes
|
certain messages never to get submitted to Syslog in the first
|
place.
|
|
MASK is a bit string with one bit corresponding to each of the
|
possible message priorities. If the bit is on, ‘syslog’ handles
|
messages of that priority normally. If it is off, ‘syslog’
|
discards messages of that priority. Use the message priority
|
macros described in *note syslog; vsyslog:: and the ‘LOG_MASK’ to
|
construct an appropriate MASK value, as in this example:
|
|
LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR)
|
|
or
|
|
~(LOG_MASK(LOG_INFO))
|
|
There is also a ‘LOG_UPTO’ macro, which generates a mask with the
|
bits on for a certain priority and all priorities above it:
|
|
LOG_UPTO(LOG_ERROR)
|
|
The unfortunate naming of the macro is due to the fact that
|
internally, higher numbers are used for lower message priorities.
|
|
|
File: libc.info, Node: Syslog Example, Prev: setlogmask, Up: Submitting Syslog Messages
|
|
18.2.5 Syslog Example
|
---------------------
|
|
Here is an example of ‘openlog’, ‘syslog’, and ‘closelog’:
|
|
This example sets the logmask so that debug and informational
|
messages get discarded without ever reaching Syslog. So the second
|
‘syslog’ in the example does nothing.
|
|
#include <syslog.h>
|
|
setlogmask (LOG_UPTO (LOG_NOTICE));
|
|
openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
|
|
syslog (LOG_NOTICE, "Program started by User %d", getuid ());
|
syslog (LOG_INFO, "A tree falls in a forest");
|
|
closelog ();
|
|
|
|
File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top
|
|
19 Mathematics
|
**************
|
|
This chapter contains information about functions for performing
|
mathematical computations, such as trigonometric functions. Most of
|
these functions have prototypes declared in the header file ‘math.h’.
|
The complex-valued functions are defined in ‘complex.h’.
|
|
All mathematical functions which take a floating-point argument have
|
three variants, one each for ‘double’, ‘float’, and ‘long double’
|
arguments. The ‘double’ versions are mostly defined in ISO C89. The
|
‘float’ and ‘long double’ versions are from the numeric extensions to C
|
included in ISO C99.
|
|
Which of the three versions of a function should be used depends on
|
the situation. For most calculations, the ‘float’ functions are the
|
fastest. On the other hand, the ‘long double’ functions have the
|
highest precision. ‘double’ is somewhere in between. It is usually
|
wise to pick the narrowest type that can accommodate your data. Not all
|
machines have a distinct ‘long double’ type; it may be the same as
|
‘double’.
|
|
* Menu:
|
|
* 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.
|
|
|
File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics
|
|
19.1 Predefined Mathematical Constants
|
======================================
|
|
The header ‘math.h’ defines several useful mathematical constants. All
|
values are defined as preprocessor macros starting with ‘M_’. The
|
values provided are:
|
|
‘M_E’
|
The base of natural logarithms.
|
‘M_LOG2E’
|
The logarithm to base ‘2’ of ‘M_E’.
|
‘M_LOG10E’
|
The logarithm to base ‘10’ of ‘M_E’.
|
‘M_LN2’
|
The natural logarithm of ‘2’.
|
‘M_LN10’
|
The natural logarithm of ‘10’.
|
‘M_PI’
|
Pi, the ratio of a circle’s circumference to its diameter.
|
‘M_PI_2’
|
Pi divided by two.
|
‘M_PI_4’
|
Pi divided by four.
|
‘M_1_PI’
|
The reciprocal of pi (1/pi)
|
‘M_2_PI’
|
Two times the reciprocal of pi.
|
‘M_2_SQRTPI’
|
Two times the reciprocal of the square root of pi.
|
‘M_SQRT2’
|
The square root of two.
|
‘M_SQRT1_2’
|
The reciprocal of the square root of two (also the square root of
|
1/2).
|
|
These constants come from the Unix98 standard and were also available
|
in 4.4BSD; therefore they are only defined if ‘_XOPEN_SOURCE=500’, or a
|
more general feature select macro, is defined. The default set of
|
features includes these constants. *Note Feature Test Macros::.
|
|
All values are of type ‘double’. As an extension, the GNU C Library
|
also defines these constants with type ‘long double’. The ‘long double’
|
macros have a lowercase ‘l’ appended to their names: ‘M_El’, ‘M_PIl’,
|
and so forth. These are only available if ‘_GNU_SOURCE’ is defined.
|
|
_Note:_ Some programs use a constant named ‘PI’ which has the same
|
value as ‘M_PI’. This constant is not standard; it may have appeared in
|
some old AT&T headers, and is mentioned in Stroustrup’s book on C++. It
|
infringes on the user’s name space, so the GNU C Library does not define
|
it. Fixing programs written to expect it is simple: replace ‘PI’ with
|
‘M_PI’ throughout, or put ‘-DPI=M_PI’ on the compiler command line.
|
|
|
File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics
|
|
19.2 Trigonometric Functions
|
============================
|
|
These are the familiar ‘sin’, ‘cos’, and ‘tan’ functions. The arguments
|
to all of these functions are in units of radians; recall that pi
|
radians equals 180 degrees.
|
|
The math library normally defines ‘M_PI’ to a ‘double’ approximation
|
of pi. If strict ISO and/or POSIX compliance are requested this
|
constant is not defined, but you can easily define it yourself:
|
|
#define M_PI 3.14159265358979323846264338327
|
|
You can also compute the value of pi with the expression ‘acos (-1.0)’.
|
|
-- Function: double sin (double X)
|
-- Function: float sinf (float X)
|
-- Function: long double sinl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the sine of X, where X is given in radians.
|
The return value is in the range ‘-1’ to ‘1’.
|
|
-- Function: double cos (double X)
|
-- Function: float cosf (float X)
|
-- Function: long double cosl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the cosine of X, where X is given in
|
radians. The return value is in the range ‘-1’ to ‘1’.
|
|
-- Function: double tan (double X)
|
-- Function: float tanf (float X)
|
-- Function: long double tanl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the tangent of X, where X is given in
|
radians.
|
|
Mathematically, the tangent function has singularities at odd
|
multiples of pi/2. If the argument X is too close to one of these
|
singularities, ‘tan’ will signal overflow.
|
|
In many applications where ‘sin’ and ‘cos’ are used, the sine and
|
cosine of the same angle are needed at the same time. It is more
|
efficient to compute them simultaneously, so the library provides a
|
function to do that.
|
|
-- Function: void sincos (double X, double *SINX, double *COSX)
|
-- Function: void sincosf (float X, float *SINX, float *COSX)
|
-- Function: void sincosl (long double X, long double *SINX, long
|
double *COSX)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the sine of X in ‘*SINX’ and the cosine of X
|
in ‘*COSX’, where X is given in radians. Both values, ‘*SINX’ and
|
‘*COSX’, are in the range of ‘-1’ to ‘1’.
|
|
This function is a GNU extension. Portable programs should be
|
prepared to cope with its absence.
|
|
ISO C99 defines variants of the trig functions which work on complex
|
numbers. The GNU C Library provides these functions, but they are only
|
useful if your compiler supports the new complex types defined by the
|
standard. (As of this writing GCC supports complex numbers, but there
|
are bugs in the implementation.)
|
|
-- Function: complex double csin (complex double Z)
|
-- Function: complex float csinf (complex float Z)
|
-- Function: complex long double csinl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex sine of Z. The mathematical
|
definition of the complex sine is
|
|
sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)).
|
|
-- Function: complex double ccos (complex double Z)
|
-- Function: complex float ccosf (complex float Z)
|
-- Function: complex long double ccosl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex cosine of Z. The mathematical
|
definition of the complex cosine is
|
|
cos (z) = 1/2 * (exp (z*i) + exp (-z*i))
|
|
-- Function: complex double ctan (complex double Z)
|
-- Function: complex float ctanf (complex float Z)
|
-- Function: complex long double ctanl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex tangent of Z. The mathematical
|
definition of the complex tangent is
|
|
tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))
|
|
The complex tangent has poles at pi/2 + 2n, where n is an integer.
|
‘ctan’ may signal overflow if Z is too close to a pole.
|
|
|
File: libc.info, Node: Inverse Trig Functions, Next: Exponents and Logarithms, Prev: Trig Functions, Up: Mathematics
|
|
19.3 Inverse Trigonometric Functions
|
====================================
|
|
These are the usual arcsine, arccosine and arctangent functions, which
|
are the inverses of the sine, cosine and tangent functions respectively.
|
|
-- Function: double asin (double X)
|
-- Function: float asinf (float X)
|
-- Function: long double asinl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the arcsine of X—that is, the value whose
|
sine is X. The value is in units of radians. Mathematically,
|
there are infinitely many such values; the one actually returned is
|
the one between ‘-pi/2’ and ‘pi/2’ (inclusive).
|
|
The arcsine function is defined mathematically only over the domain
|
‘-1’ to ‘1’. If X is outside the domain, ‘asin’ signals a domain
|
error.
|
|
-- Function: double acos (double X)
|
-- Function: float acosf (float X)
|
-- Function: long double acosl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the arccosine of X—that is, the value whose
|
cosine is X. The value is in units of radians. Mathematically,
|
there are infinitely many such values; the one actually returned is
|
the one between ‘0’ and ‘pi’ (inclusive).
|
|
The arccosine function is defined mathematically only over the
|
domain ‘-1’ to ‘1’. If X is outside the domain, ‘acos’ signals a
|
domain error.
|
|
-- Function: double atan (double X)
|
-- Function: float atanf (float X)
|
-- Function: long double atanl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the arctangent of X—that is, the value
|
whose tangent is X. The value is in units of radians.
|
Mathematically, there are infinitely many such values; the one
|
actually returned is the one between ‘-pi/2’ and ‘pi/2’
|
(inclusive).
|
|
-- Function: double atan2 (double Y, double X)
|
-- Function: float atan2f (float Y, float X)
|
-- Function: long double atan2l (long double Y, long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
This function computes the arctangent of Y/X, but the signs of both
|
arguments are used to determine the quadrant of the result, and X
|
is permitted to be zero. The return value is given in radians and
|
is in the range ‘-pi’ to ‘pi’, inclusive.
|
|
If X and Y are coordinates of a point in the plane, ‘atan2’ returns
|
the signed angle between the line from the origin to that point and
|
the x-axis. Thus, ‘atan2’ is useful for converting Cartesian
|
coordinates to polar coordinates. (To compute the radial
|
coordinate, use ‘hypot’; see *note Exponents and Logarithms::.)
|
|
If both X and Y are zero, ‘atan2’ returns zero.
|
|
ISO C99 defines complex versions of the inverse trig functions.
|
|
-- Function: complex double casin (complex double Z)
|
-- Function: complex float casinf (complex float Z)
|
-- Function: complex long double casinl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the complex arcsine of Z—that is, the value
|
whose sine is Z. The value returned is in radians.
|
|
Unlike the real-valued functions, ‘casin’ is defined for all values
|
of Z.
|
|
-- Function: complex double cacos (complex double Z)
|
-- Function: complex float cacosf (complex float Z)
|
-- Function: complex long double cacosl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the complex arccosine of Z—that is, the
|
value whose cosine is Z. The value returned is in radians.
|
|
Unlike the real-valued functions, ‘cacos’ is defined for all values
|
of Z.
|
|
-- Function: complex double catan (complex double Z)
|
-- Function: complex float catanf (complex float Z)
|
-- Function: complex long double catanl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the complex arctangent of Z—that is, the
|
value whose tangent is Z. The value is in units of radians.
|
|
|
File: libc.info, Node: Exponents and Logarithms, Next: Hyperbolic Functions, Prev: Inverse Trig Functions, Up: Mathematics
|
|
19.4 Exponentiation and Logarithms
|
==================================
|
|
-- Function: double exp (double X)
|
-- Function: float expf (float X)
|
-- Function: long double expl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute ‘e’ (the base of natural logarithms) raised
|
to the power X.
|
|
If the magnitude of the result is too large to be representable,
|
‘exp’ signals overflow.
|
|
-- Function: double exp2 (double X)
|
-- Function: float exp2f (float X)
|
-- Function: long double exp2l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute ‘2’ raised to the power X. Mathematically,
|
‘exp2 (x)’ is the same as ‘exp (x * log (2))’.
|
|
-- Function: double exp10 (double X)
|
-- Function: float exp10f (float X)
|
-- Function: long double exp10l (long double X)
|
-- Function: double pow10 (double X)
|
-- Function: float pow10f (float X)
|
-- Function: long double pow10l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute ‘10’ raised to the power X.
|
Mathematically, ‘exp10 (x)’ is the same as ‘exp (x * log (10))’.
|
|
The ‘exp10’ functions are from TS 18661-4:2015; the ‘pow10’ names
|
are GNU extensions. The name ‘exp10’ is preferred, since it is
|
analogous to ‘exp’ and ‘exp2’.
|
|
-- Function: double log (double X)
|
-- Function: float logf (float X)
|
-- Function: long double logl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions compute the natural logarithm of X. ‘exp (log
|
(X))’ equals X, exactly in mathematics and approximately in C.
|
|
If X is negative, ‘log’ signals a domain error. If X is zero, it
|
returns negative infinity; if X is too close to zero, it may signal
|
overflow.
|
|
-- Function: double log10 (double X)
|
-- Function: float log10f (float X)
|
-- Function: long double log10l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the base-10 logarithm of X. ‘log10 (X)’
|
equals ‘log (X) / log (10)’.
|
|
-- Function: double log2 (double X)
|
-- Function: float log2f (float X)
|
-- Function: long double log2l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the base-2 logarithm of X. ‘log2 (X)’
|
equals ‘log (X) / log (2)’.
|
|
-- Function: double logb (double X)
|
-- Function: float logbf (float X)
|
-- Function: long double logbl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions extract the exponent of X and return it as a
|
floating-point value. If ‘FLT_RADIX’ is two, ‘logb’ is equal to
|
‘floor (log2 (x))’, except it’s probably faster.
|
|
If X is de-normalized, ‘logb’ returns the exponent X would have if
|
it were normalized. If X is infinity (positive or negative),
|
‘logb’ returns oo. If X is zero, ‘logb’ returns oo. It does not
|
signal.
|
|
-- Function: int ilogb (double X)
|
-- Function: int ilogbf (float X)
|
-- Function: int ilogbl (long double X)
|
-- Function: long int llogb (double X)
|
-- Function: long int llogbf (float X)
|
-- Function: long int llogbl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions are equivalent to the corresponding ‘logb’
|
functions except that they return signed integer values. The
|
‘ilogb’ functions are from ISO C99; the ‘llogb’ functions are from
|
TS 18661-1:2014.
|
|
Since integers cannot represent infinity and NaN, ‘ilogb’ instead
|
returns an integer that can’t be the exponent of a normal floating-point
|
number. ‘math.h’ defines constants so you can check for this.
|
|
-- Macro: int FP_ILOGB0
|
‘ilogb’ returns this value if its argument is ‘0’. The numeric
|
value is either ‘INT_MIN’ or ‘-INT_MAX’.
|
|
This macro is defined in ISO C99.
|
|
-- Macro: long int FP_LLOGB0
|
‘llogb’ returns this value if its argument is ‘0’. The numeric
|
value is either ‘LONG_MIN’ or ‘-LONG_MAX’.
|
|
This macro is defined in TS 18661-1:2014.
|
|
-- Macro: int FP_ILOGBNAN
|
‘ilogb’ returns this value if its argument is ‘NaN’. The numeric
|
value is either ‘INT_MIN’ or ‘INT_MAX’.
|
|
This macro is defined in ISO C99.
|
|
-- Macro: long int FP_LLOGBNAN
|
‘llogb’ returns this value if its argument is ‘NaN’. The numeric
|
value is either ‘LONG_MIN’ or ‘LONG_MAX’.
|
|
This macro is defined in TS 18661-1:2014.
|
|
These values are system specific. They might even be the same. The
|
proper way to test the result of ‘ilogb’ is as follows:
|
|
i = ilogb (f);
|
if (i == FP_ILOGB0 || i == FP_ILOGBNAN)
|
{
|
if (isnan (f))
|
{
|
/* Handle NaN. */
|
}
|
else if (f == 0.0)
|
{
|
/* Handle 0.0. */
|
}
|
else
|
{
|
/* Some other value with large exponent,
|
perhaps +Inf. */
|
}
|
}
|
|
-- Function: double pow (double BASE, double POWER)
|
-- Function: float powf (float BASE, float POWER)
|
-- Function: long double powl (long double BASE, long double POWER)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These are general exponentiation functions, returning BASE raised
|
to POWER.
|
|
Mathematically, ‘pow’ would return a complex number when BASE is
|
negative and POWER is not an integral value. ‘pow’ can’t do that,
|
so instead it signals a domain error. ‘pow’ may also underflow or
|
overflow the destination type.
|
|
-- Function: double sqrt (double X)
|
-- Function: float sqrtf (float X)
|
-- Function: long double sqrtl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the nonnegative square root of X.
|
|
If X is negative, ‘sqrt’ signals a domain error. Mathematically,
|
it should return a complex number.
|
|
-- Function: double cbrt (double X)
|
-- Function: float cbrtf (float X)
|
-- Function: long double cbrtl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the cube root of X. They cannot fail; every
|
representable real value has a representable real cube root.
|
|
-- Function: double hypot (double X, double Y)
|
-- Function: float hypotf (float X, float Y)
|
-- Function: long double hypotl (long double X, long double Y)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return ‘sqrt (X*X + Y*Y)’. This is the length of
|
the hypotenuse of a right triangle with sides of length X and Y, or
|
the distance of the point (X, Y) from the origin. Using this
|
function instead of the direct formula is wise, since the error is
|
much smaller. See also the function ‘cabs’ in *note Absolute
|
Value::.
|
|
-- Function: double expm1 (double X)
|
-- Function: float expm1f (float X)
|
-- Function: long double expm1l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return a value equivalent to ‘exp (X) - 1’. They
|
are computed in a way that is accurate even if X is near zero—a
|
case where ‘exp (X) - 1’ would be inaccurate owing to subtraction
|
of two numbers that are nearly equal.
|
|
-- Function: double log1p (double X)
|
-- Function: float log1pf (float X)
|
-- Function: long double log1pl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return a value equivalent to ‘log (1 + X)’. They
|
are computed in a way that is accurate even if X is near zero.
|
|
ISO C99 defines complex variants of some of the exponentiation and
|
logarithm functions.
|
|
-- Function: complex double cexp (complex double Z)
|
-- Function: complex float cexpf (complex float Z)
|
-- Function: complex long double cexpl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return ‘e’ (the base of natural logarithms) raised
|
to the power of Z. Mathematically, this corresponds to the value
|
|
exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))
|
|
-- Function: complex double clog (complex double Z)
|
-- Function: complex float clogf (complex float Z)
|
-- Function: complex long double clogl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the natural logarithm of Z. Mathematically,
|
this corresponds to the value
|
|
log (z) = log (cabs (z)) + I * carg (z)
|
|
‘clog’ has a pole at 0, and will signal overflow if Z equals or is
|
very close to 0. It is well-defined for all other values of Z.
|
|
-- Function: complex double clog10 (complex double Z)
|
-- Function: complex float clog10f (complex float Z)
|
-- Function: complex long double clog10l (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the base 10 logarithm of the complex value
|
Z. Mathematically, this corresponds to the value
|
|
log10 (z) = log10 (cabs (z)) + I * carg (z) / log (10)
|
|
These functions are GNU extensions.
|
|
-- Function: complex double csqrt (complex double Z)
|
-- Function: complex float csqrtf (complex float Z)
|
-- Function: complex long double csqrtl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex square root of the argument Z.
|
Unlike the real-valued functions, they are defined for all values
|
of Z.
|
|
-- Function: complex double cpow (complex double BASE, complex double
|
POWER)
|
-- Function: complex float cpowf (complex float BASE, complex float
|
POWER)
|
-- Function: complex long double cpowl (complex long double BASE,
|
complex long double POWER)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return BASE raised to the power of POWER. This is
|
equivalent to ‘cexp (y * clog (x))’
|
|
|
File: libc.info, Node: Hyperbolic Functions, Next: Special Functions, Prev: Exponents and Logarithms, Up: Mathematics
|
|
19.5 Hyperbolic Functions
|
=========================
|
|
The functions in this section are related to the exponential functions;
|
see *note Exponents and Logarithms::.
|
|
-- Function: double sinh (double X)
|
-- Function: float sinhf (float X)
|
-- Function: long double sinhl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the hyperbolic sine of X, defined
|
mathematically as ‘(exp (X) - exp (-X)) / 2’. They may signal
|
overflow if X is too large.
|
|
-- Function: double cosh (double X)
|
-- Function: float coshf (float X)
|
-- Function: long double coshl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the hyperbolic cosine of X, defined
|
mathematically as ‘(exp (X) + exp (-X)) / 2’. They may signal
|
overflow if X is too large.
|
|
-- Function: double tanh (double X)
|
-- Function: float tanhf (float X)
|
-- Function: long double tanhl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the hyperbolic tangent of X, defined
|
mathematically as ‘sinh (X) / cosh (X)’. They may signal overflow
|
if X is too large.
|
|
There are counterparts for the hyperbolic functions which take
|
complex arguments.
|
|
-- Function: complex double csinh (complex double Z)
|
-- Function: complex float csinhf (complex float Z)
|
-- Function: complex long double csinhl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex hyperbolic sine of Z, defined
|
mathematically as ‘(exp (Z) - exp (-Z)) / 2’.
|
|
-- Function: complex double ccosh (complex double Z)
|
-- Function: complex float ccoshf (complex float Z)
|
-- Function: complex long double ccoshl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex hyperbolic cosine of Z, defined
|
mathematically as ‘(exp (Z) + exp (-Z)) / 2’.
|
|
-- Function: complex double ctanh (complex double Z)
|
-- Function: complex float ctanhf (complex float Z)
|
-- Function: complex long double ctanhl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the complex hyperbolic tangent of Z, defined
|
mathematically as ‘csinh (Z) / ccosh (Z)’.
|
|
-- Function: double asinh (double X)
|
-- Function: float asinhf (float X)
|
-- Function: long double asinhl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse hyperbolic sine of X—the value
|
whose hyperbolic sine is X.
|
|
-- Function: double acosh (double X)
|
-- Function: float acoshf (float X)
|
-- Function: long double acoshl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse hyperbolic cosine of X—the value
|
whose hyperbolic cosine is X. If X is less than ‘1’, ‘acosh’
|
signals a domain error.
|
|
-- Function: double atanh (double X)
|
-- Function: float atanhf (float X)
|
-- Function: long double atanhl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse hyperbolic tangent of X—the
|
value whose hyperbolic tangent is X. If the absolute value of X is
|
greater than ‘1’, ‘atanh’ signals a domain error; if it is equal to
|
1, ‘atanh’ returns infinity.
|
|
-- Function: complex double casinh (complex double Z)
|
-- Function: complex float casinhf (complex float Z)
|
-- Function: complex long double casinhl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse complex hyperbolic sine of Z—the
|
value whose complex hyperbolic sine is Z.
|
|
-- Function: complex double cacosh (complex double Z)
|
-- Function: complex float cacoshf (complex float Z)
|
-- Function: complex long double cacoshl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse complex hyperbolic cosine of
|
Z—the value whose complex hyperbolic cosine is Z. Unlike the
|
real-valued functions, there are no restrictions on the value of Z.
|
|
-- Function: complex double catanh (complex double Z)
|
-- Function: complex float catanhf (complex float Z)
|
-- Function: complex long double catanhl (complex long double Z)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
These functions return the inverse complex hyperbolic tangent of
|
Z—the value whose complex hyperbolic tangent is Z. Unlike the
|
real-valued functions, there are no restrictions on the value of Z.
|
|
|
File: libc.info, Node: Special Functions, Next: Errors in Math Functions, Prev: Hyperbolic Functions, Up: Mathematics
|
|
19.6 Special Functions
|
======================
|
|
These are some more exotic mathematical functions which are sometimes
|
useful. Currently they only have real-valued versions.
|
|
-- Function: double erf (double X)
|
-- Function: float erff (float X)
|
-- Function: long double erfl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘erf’ returns the error function of X. The error function is
|
defined as
|
erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt
|
|
-- Function: double erfc (double X)
|
-- Function: float erfcf (float X)
|
-- Function: long double erfcl (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘erfc’ returns ‘1.0 - erf(X)’, but computed in a fashion that
|
avoids round-off error when X is large.
|
|
-- Function: double lgamma (double X)
|
-- Function: float lgammaf (float X)
|
-- Function: long double lgammal (long double X)
|
Preliminary: | MT-Unsafe race:signgam | AS-Unsafe | AC-Safe | *Note
|
POSIX Safety Concepts::.
|
|
‘lgamma’ returns the natural logarithm of the absolute value of the
|
gamma function of X. The gamma function is defined as
|
gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
|
|
The sign of the gamma function is stored in the global variable
|
SIGNGAM, which is declared in ‘math.h’. It is ‘1’ if the
|
intermediate result was positive or zero, or ‘-1’ if it was
|
negative.
|
|
To compute the real gamma function you can use the ‘tgamma’
|
function or you can compute the values as follows:
|
lgam = lgamma(x);
|
gam = signgam*exp(lgam);
|
|
The gamma function has singularities at the non-positive integers.
|
‘lgamma’ will raise the zero divide exception if evaluated at a
|
singularity.
|
|
-- Function: double lgamma_r (double X, int *SIGNP)
|
-- Function: float lgammaf_r (float X, int *SIGNP)
|
-- Function: long double lgammal_r (long double X, int *SIGNP)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘lgamma_r’ is just like ‘lgamma’, but it stores the sign of the
|
intermediate result in the variable pointed to by SIGNP instead of
|
in the SIGNGAM global. This means it is reentrant.
|
|
-- Function: double gamma (double X)
|
-- Function: float gammaf (float X)
|
-- Function: long double gammal (long double X)
|
Preliminary: | MT-Unsafe race:signgam | AS-Unsafe | AC-Safe | *Note
|
POSIX Safety Concepts::.
|
|
These functions exist for compatibility reasons. They are
|
equivalent to ‘lgamma’ etc. It is better to use ‘lgamma’ since for
|
one the name reflects better the actual computation, and moreover
|
‘lgamma’ is standardized in ISO C99 while ‘gamma’ is not.
|
|
-- Function: double tgamma (double X)
|
-- Function: float tgammaf (float X)
|
-- Function: long double tgammal (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘tgamma’ applies the gamma function to X. The gamma function is
|
defined as
|
gamma (x) = integral from 0 to oo of t^(x-1) e^-t dt
|
|
This function was introduced in ISO C99.
|
|
-- Function: double j0 (double X)
|
-- Function: float j0f (float X)
|
-- Function: long double j0l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘j0’ returns the Bessel function of the first kind of order 0 of X.
|
It may signal underflow if X is too large.
|
|
-- Function: double j1 (double X)
|
-- Function: float j1f (float X)
|
-- Function: long double j1l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘j1’ returns the Bessel function of the first kind of order 1 of X.
|
It may signal underflow if X is too large.
|
|
-- Function: double jn (int N, double X)
|
-- Function: float jnf (int N, float X)
|
-- Function: long double jnl (int N, long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘jn’ returns the Bessel function of the first kind of order N of X.
|
It may signal underflow if X is too large.
|
|
-- Function: double y0 (double X)
|
-- Function: float y0f (float X)
|
-- Function: long double y0l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘y0’ returns the Bessel function of the second kind of order 0 of
|
X. It may signal underflow if X is too large. If X is negative,
|
‘y0’ signals a domain error; if it is zero, ‘y0’ signals overflow
|
and returns -oo.
|
|
-- Function: double y1 (double X)
|
-- Function: float y1f (float X)
|
-- Function: long double y1l (long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘y1’ returns the Bessel function of the second kind of order 1 of
|
X. It may signal underflow if X is too large. If X is negative,
|
‘y1’ signals a domain error; if it is zero, ‘y1’ signals overflow
|
and returns -oo.
|
|
-- Function: double yn (int N, double X)
|
-- Function: float ynf (int N, float X)
|
-- Function: long double ynl (int N, long double X)
|
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
|
Concepts::.
|
|
‘yn’ returns the Bessel function of the second kind of order N of
|
X. It may signal underflow if X is too large. If X is negative,
|
‘yn’ signals a domain error; if it is zero, ‘yn’ signals overflow
|
and returns -oo.
|
|
|
File: libc.info, Node: Errors in Math Functions, Next: Pseudo-Random Numbers, Prev: Special Functions, Up: Mathematics
|
|
19.7 Known Maximum Errors in Math Functions
|
===========================================
|
|
This section lists the known errors of the functions in the math
|
library. Errors are measured in “units of the last place”. This is a
|
measure for the relative error. For a number z with the representation
|
d.d…d*2^e (we assume IEEE floating-point numbers with base 2) the ULP is
|
represented by
|
|
|d.d...d - (z / 2^e)| / 2^(p - 1)
|
|
where p is the number of bits in the mantissa of the floating-point
|
number representation. Ideally the error for all functions is always
|
less than 0.5ulps in round-to-nearest mode. Using rounding bits this is
|
also possible and normally implemented for the basic operations. Except
|
for certain functions such as ‘sqrt’, ‘fma’ and ‘rint’ whose results are
|
fully specified by reference to corresponding IEEE 754 floating-point
|
operations, and conversions between strings and floating point, the GNU
|
C Library does not aim for correctly rounded results for functions in
|
the math library, and does not aim for correctness in whether “inexact”
|
exceptions are raised. Instead, the goals for accuracy of functions
|
without fully specified results are as follows; some functions have bugs
|
meaning they do not meet these goals in all cases. In the future, the
|
GNU C Library may provide some other correctly rounding functions under
|
the names such as ‘crsin’ proposed for an extension to ISO C.
|
|
• Each function with a floating-point result behaves as if it
|
computes an infinite-precision result that is within a few ulp (in
|
both real and complex parts, for functions with complex results) of
|
the mathematically correct value of the function (interpreted
|
together with ISO C or POSIX semantics for the function in
|
question) at the exact value passed as the input. Exceptions are
|
raised appropriately for this value and in accordance with IEEE 754
|
/ ISO C / POSIX semantics, and it is then rounded according to the
|
current rounding direction to the result that is returned to the
|
user. ‘errno’ may also be set (*note Math Error Reporting::).
|
(The “inexact” exception may be raised, or not raised, even if this
|
is inconsistent with the infinite-precision value.)
|
|
• For the IBM ‘long double’ format, as used on PowerPC GNU/Linux, the
|
accuracy goal is weaker for input values not exactly representable
|
in 106 bits of precision; it is as if the input value is some value
|
within 0.5ulp of the value actually passed, where “ulp” is
|
interpreted in terms of a fixed-precision 106-bit mantissa, but not
|
necessarily the exact value actually passed with discontiguous
|
mantissa bits.
|
|
• For the IBM ‘long double’ format, functions whose results are fully
|
specified by reference to corresponding IEEE 754 floating-point
|
operations have the same accuracy goals as other functions, but
|
with the error bound being the same as that for division (3ulp).
|
Furthermore, “inexact” and “underflow” exceptions may be raised for
|
all functions for any inputs, even where such exceptions are
|
inconsistent with the returned value, since the underlying
|
floating-point arithmetic has that property.
|
|
• Functions behave as if the infinite-precision result computed is
|
zero, infinity or NaN if and only if that is the mathematically
|
correct infinite-precision result. They behave as if the
|
infinite-precision result computed always has the same sign as the
|
mathematically correct result.
|
|
• If the mathematical result is more than a few ulp above the
|
overflow threshold for the current rounding direction, the value
|
returned is the appropriate overflow value for the current rounding
|
direction, with the overflow exception raised.
|
|
• If the mathematical result has magnitude well below half the least
|
subnormal magnitude, the returned value is either zero or the least
|
subnormal (in each case, with the correct sign), according to the
|
current rounding direction and with the underflow exception raised.
|
|
• Where the mathematical result underflows (before rounding) and is
|
not exactly representable as a floating-point value, the function
|
does not behave as if the computed infinite-precision result is an
|
exact value in the subnormal range. This means that the underflow
|
exception is raised other than possibly for cases where the
|
mathematical result is very close to the underflow threshold and
|
the function behaves as if it computes an infinite-precision result
|
that does not underflow. (So there may be spurious underflow
|
exceptions in cases where the underflowing result is exact, but not
|
missing underflow exceptions in cases where it is inexact.)
|
|
• The GNU C Library does not aim for functions to satisfy other
|
properties of the underlying mathematical function, such as
|
monotonicity, where not implied by the above goals.
|
|
• All the above applies to both real and complex parts, for complex
|
functions.
|
|
Therefore many of the functions in the math library have errors. The
|
table lists the maximum error for each function which is exposed by one
|
of the existing tests in the test suite. The table tries to cover as
|
much as possible and list the actual maximum error (or at least a
|
ballpark figure) but this is often not achieved due to the large search
|
space.
|
|
The table lists the ULP values for different architectures.
|
Different architectures have different results since their hardware
|
support for floating-point operations varies and also the existing
|
hardware support is different.
|
|
Function AArch64 ARM Alpha ColdFire Generic
|
acosf 1 1 1 - -
|
acos - - - - -
|
acosl 1 - 1 - -
|
acoshf 2 2 2 - -
|
acosh 2 2 2 - -
|
acoshl 2 - 2 - -
|
asinf 1 1 1 - -
|
asin - - - - -
|
asinl 1 - 1 - -
|
asinhf 1 1 1 - -
|
asinh 1 1 1 - -
|
asinhl 3 - 3 - -
|
atanf 1 1 1 - -
|
atan 1 - - - -
|
atanl 1 - 1 - -
|
atanhf 2 2 2 1 -
|
atanh 2 2 2 - -
|
atanhl 3 - 3 - -
|
atan2f 1 1 1 1 -
|
atan2 - - - - -
|
atan2l 1 - 1 - -
|
cabsf - - - - -
|
cabs 1 1 1 - -
|
cabsl 1 - 1 - -
|
cacosf 2 + i 2 2 + i 2 2 + i 2 - -
|
cacos 1 + i 1 1 + i 1 1 + i 1 - -
|
cacosl 2 + i 2 - 2 + i 2 - -
|
cacoshf 2 + i 2 2 + i 2 2 + i 2 0 + i 1 -
|
cacosh 1 + i 1 1 + i 1 1 + i 1 - -
|
cacoshl 2 + i 2 - 2 + i 2 - -
|
cargf 1 1 1 - -
|
carg 1 - - - -
|
cargl 2 - 2 - -
|
casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 0 -
|
casin 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
|
casinl 2 + i 2 - 2 + i 2 - -
|
casinhf 2 + i 1 2 + i 1 2 + i 1 1 + i 6 -
|
casinh 1 + i 1 1 + i 1 1 + i 1 5 + i 3 -
|
casinhl 2 + i 2 - 2 + i 2 - -
|
catanf 1 + i 1 1 + i 1 1 + i 1 0 + i 1 -
|
catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 -
|
catanl 1 + i 1 - 1 + i 1 - -
|
catanhf 1 + i 1 1 + i 1 1 + i 1 - -
|
catanh 1 + i 0 1 + i 0 1 + i 0 4 + i 0 -
|
catanhl 1 + i 1 - 1 + i 1 - -
|
cbrtf 1 1 1 - -
|
cbrt 3 3 3 1 -
|
cbrtl 1 - 1 - -
|
ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
|
ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
|
ccosl 1 + i 1 - 1 + i 1 - -
|
ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
|
ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 0 -
|
ccoshl 1 + i 1 - 1 + i 1 - -
|
ceilf - - - - -
|
ceil - - - - -
|
ceill - - - - -
|
cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 -
|
cexp 2 + i 1 2 + i 1 2 + i 1 - -
|
cexpl 1 + i 1 - 1 + i 1 - -
|
cimagf - - - - -
|
cimag - - - - -
|
cimagl - - - - -
|
clogf 3 + i 1 3 + i 1 3 + i 1 1 + i 0 -
|
clog 3 + i 1 3 + i 0 3 + i 0 - -
|
clogl 2 + i 1 - 2 + i 1 - -
|
clog10f 4 + i 2 4 + i 2 4 + i 2 1 + i 1 -
|
clog10 3 + i 2 3 + i 2 3 + i 2 0 + i 1 -
|
clog10l 2 + i 2 - 2 + i 2 - -
|
conjf - - - - -
|
conj - - - - -
|
conjl - - - - -
|
copysignf - - - - -
|
copysign - - - - -
|
copysignl - - - - -
|
cosf 1 1 1 1 -
|
cos - - - 2 -
|
cosl 1 - 1 - -
|
coshf 1 1 1 - -
|
cosh 1 1 1 - -
|
coshl 1 - 1 - -
|
cpowf 5 + i 2 4 + i 2 4 + i 2 4 + i 2 -
|
cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 2 -
|
cpowl 4 + i 1 - 4 + i 1 - -
|
cprojf - - - - -
|
cproj - - - - -
|
cprojl - - - - -
|
crealf - - - - -
|
creal - - - - -
|
creall - - - - -
|
csinf 1 + i 0 1 + i 0 1 + i 0 - -
|
csin 1 + i 0 1 + i 0 1 + i 0 - -
|
csinl 1 + i 1 - 1 + i 1 - -
|
csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 -
|
csinh 0 + i 1 0 + i 1 0 + i 1 0 + i 1 -
|
csinhl 1 + i 1 - 1 + i 1 - -
|
csqrtf 2 + i 2 2 + i 2 2 + i 2 1 + i 0 -
|
csqrt 2 + i 2 2 + i 2 2 + i 2 - -
|
csqrtl 2 + i 2 - 2 + i 2 - -
|
ctanf 1 + i 1 1 + i 1 1 + i 1 - -
|
ctan 1 + i 2 1 + i 2 1 + i 2 0 + i 1 -
|
ctanl 3 + i 3 - 3 + i 3 - -
|
ctanhf 2 + i 1 1 + i 2 1 + i 2 2 + i 1 -
|
ctanh 2 + i 2 2 + i 2 2 + i 2 1 + i 0 -
|
ctanhl 3 + i 3 - 3 + i 3 - -
|
erff 1 1 1 - -
|
erf 1 1 1 1 -
|
erfl 1 - 1 - -
|
erfcf 2 2 2 - -
|
erfc 2 3 3 1 -
|
erfcl 2 - 2 - -
|
expf 1 1 1 - -
|
exp - - - - -
|
expl 1 - 1 - -
|
exp10f - - - 2 -
|
exp10 2 2 2 6 -
|
exp10l 2 - 2 - -
|
exp2f 1 1 1 - -
|
exp2 1 1 1 - -
|
exp2l 1 - 1 - -
|
expm1f 1 1 1 1 -
|
expm1 1 1 1 1 -
|
expm1l 1 - 1 - -
|
fabsf - - - - -
|
fabs - - - - -
|
fabsl - - - - -
|
fdimf - - - - -
|
fdim - - - - -
|
fdiml - - - - -
|
floorf - - - - -
|
floor - - - - -
|
floorl - - - - -
|
fmaf - - - - -
|
fma - - - - -
|
fmal - - - - -
|
fmaxf - - - - -
|
fmax - - - - -
|
fmaxl - - - - -
|
fmaxmagf - - - - -
|
fmaxmag - - - - -
|
fmaxmagl - - - - -
|
fminf - - - - -
|
fmin - - - - -
|
fminl - - - - -
|
fminmagf - - - - -
|
fminmag - - - - -
|
fminmagl - - - - -
|
fmodf - - - - -
|
fmod - - - - -
|
fmodl - - - - -
|
frexpf - - - - -
|
frexp - - - - -
|
frexpl - - - - -
|
fromfpf - - - - -
|
fromfp - - - - -
|
fromfpl - - - - -
|
fromfpxf - - - - -
|
fromfpx - - - - -
|
fromfpxl - - - - -
|
gammaf 4 4 4 - -
|
gamma 3 4 4 - -
|
gammal 5 - 5 - -
|
hypotf - - - 1 -
|
hypot 1 1 1 - -
|
hypotl 1 - 1 - -
|
ilogbf - - - - -
|
ilogb - - - - -
|
ilogbl - - - - -
|
j0f 2 2 2 2 -
|
j0 2 2 2 2 -
|
j0l 2 - 2 - -
|
j1f 2 2 2 2 -
|
j1 1 1 1 1 -
|
j1l 4 - 4 - -
|
jnf 4 4 4 4 -
|
jn 4 4 4 4 -
|
jnl 7 - 7 - -
|
lgammaf 4 4 4 2 -
|
lgamma 3 4 4 1 -
|
lgammal 5 - 5 - -
|
llogbf - - - - -
|
llogb - - - - -
|
llogbl - - - - -
|
lrintf - - - - -
|
lrint - - - - -
|
lrintl - - - - -
|
llrintf - - - - -
|
llrint - - - - -
|
llrintl - - - - -
|
logf 1 1 1 - -
|
log - - - - -
|
logl 1 - 1 - -
|
log10f 2 2 2 2 -
|
log10 2 2 2 1 -
|
log10l 1 - 1 - -
|
log1pf 1 1 1 1 -
|
log1p 1 1 1 - -
|
log1pl 2 - 2 - -
|
log2f 1 1 1 - -
|
log2 1 2 2 - -
|
log2l 2 - 2 - -
|
logbf - - - - -
|
logb - - - - -
|
logbl - - - - -
|
lroundf - - - - -
|
lround - - - - -
|
lroundl - - - - -
|
llroundf - - - - -
|
llround - - - - -
|
llroundl - - - - -
|
modff - - - - -
|
modf - - - - -
|
modfl - - - - -
|
nearbyintf - - - - -
|
nearbyint - - - - -
|
nearbyintl - - - - -
|
nextafterf - - - - -
|
nextafter - - - - -
|
nextafterl - - - - -
|
nextdownf - - - - -
|
nextdown - - - - -
|
nextdownl - - - - -
|
nexttowardf - - - - -
|
nexttoward - - - - -
|
nexttowardl - - - - -
|
nextupf - - - - -
|
nextup - - - - -
|
nextupl - - - - -
|
powf 1 1 1 - -
|
pow - - - - -
|
powl 2 - 2 - -
|
remainderf - - - - -
|
remainder - - - - -
|
remainderl - - - - -
|
remquof - - - - -
|
remquo - - - - -
|
remquol - - - - -
|
rintf - - - - -
|
rint - - - - -
|
rintl - - - - -
|
roundf - - - - -
|
round - - - - -
|
roundl - - - - -
|
roundevenf - - - - -
|
roundeven - - - - -
|
roundevenl - - - - -
|
scalbf - - - - -
|
scalb - - - - -
|
scalbl - - - - -
|
scalbnf - - - - -
|
scalbn - - - - -
|
scalbnl - - - - -
|
sinf 1 1 1 - -
|
sin - - - - -
|
sinl 1 - 1 - -
|
sincosf 1 1 1 1 -
|
sincos - - - 1 -
|
sincosl 1 - 1 - -
|
sinhf 2 2 2 - -
|
sinh 2 2 2 - -
|
sinhl 2 - 2 - -
|
sqrtf - - - - -
|
sqrt - - - - -
|
sqrtl - - - - -
|
tanf 1 1 1 - -
|
tan - - - 1 -
|
tanl 1 - 1 - -
|
tanhf 2 2 2 - -
|
tanh 2 2 2 - -
|
tanhl 2 - 2 - -
|
tgammaf 4 4 4 1 -
|
tgamma 5 5 5 1 -
|
tgammal 4 - 4 - -
|
truncf - - - - -
|
trunc - - - - -
|
truncl - - - - -
|
ufromfpf - - - - -
|
ufromfp - - - - -
|
ufromfpl - - - - -
|
ufromfpxf - - - - -
|
ufromfpx - - - - -
|
ufromfpxl - - - - -
|
y0f 1 1 1 1 -
|
y0 2 2 2 2 -
|
y0l 3 - 3 - -
|
y1f 2 2 2 2 -
|
y1 3 3 3 3 -
|
y1l 2 - 2 - -
|
ynf 2 2 2 2 -
|
yn 3 3 3 3 -
|
ynl 5 - 5 - -
|
Function HPPA IA64 M68k MIPS 32-bit MIPS 64-bit
|
acosf 1 - - 1 1
|
acos - - - - -
|
acosl - - - - 1
|
acoshf 2 - 1 2 2
|
acosh 2 - 1 2 2
|
acoshl - - 1 - 2
|
asinf 1 - - 1 1
|
asin - - - - -
|
asinl - - - - 1
|
asinhf 1 - 1 1 1
|
asinh 1 - 1 1 1
|
asinhl - - 1 - 3
|
atanf 1 - - 1 1
|
atan - - - - -
|
atanl - - - - 1
|
atanhf 2 - - 2 2
|
atanh 2 - - 2 2
|
atanhl - - - - 3
|
atan2f 1 - 1 1 1
|
atan2 - - - - -
|
atan2l - - 1 - 1
|
cabsf - - - - -
|
cabs 1 - 1 1 1
|
cabsl - - 1 - 1
|
cacosf 2 + i 2 2 + i 2 2 + i 1 2 + i 2 2 + i 2
|
cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacosl - 1 + i 2 1 + i 2 - 2 + i 2
|
cacoshf 2 + i 2 2 + i 2 1 + i 2 2 + i 2 2 + i 2
|
cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacoshl - 2 + i 1 2 + i 1 - 2 + i 2
|
cargf 1 - 1 1 1
|
carg - - - - -
|
cargl - - 1 - 2
|
casinf 1 + i 2 1 + i 2 1 + i 1 1 + i 2 1 + i 2
|
casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinl 1 + i 0 1 + i 2 1 + i 2 - 2 + i 2
|
casinhf 2 + i 1 2 + i 1 1 + i 1 2 + i 1 2 + i 1
|
casinh 5 + i 3 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinhl 5 + i 3 2 + i 1 2 + i 1 - 2 + i 2
|
catanf 1 + i 1 0 + i 1 0 + i 1 1 + i 1 1 + i 1
|
catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
|
catanl 0 + i 1 0 + i 1 1 + i 1 - 1 + i 1
|
catanhf 1 + i 1 1 + i 0 1 + i 0 1 + i 1 1 + i 1
|
catanh 4 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
|
catanhl 4 + i 0 1 + i 0 1 + i 1 - 1 + i 1
|
cbrtf 1 - 1 1 1
|
cbrt 3 - 1 3 3
|
cbrtl 1 - 1 - 1
|
ccosf 1 + i 1 0 + i 1 - 1 + i 1 1 + i 1
|
ccos 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
|
ccosl 1 + i 0 1 + i 1 1 + i 1 - 1 + i 1
|
ccoshf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
|
ccosh 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
|
ccoshl 1 + i 0 0 + i 1 0 + i 1 - 1 + i 1
|
ceilf - - - - -
|
ceil - - - - -
|
ceill - - - - -
|
cexpf 1 + i 2 1 + i 2 - 1 + i 2 1 + i 2
|
cexp 2 + i 1 2 + i 1 - 2 + i 1 2 + i 1
|
cexpl - 1 + i 1 1 + i 1 - 1 + i 1
|
cimagf - - - - -
|
cimag - - - - -
|
cimagl - - - - -
|
clogf 3 + i 1 1 + i 0 2 + i 1 3 + i 1 3 + i 1
|
clog 3 + i 0 1 + i 1 3 + i 1 3 + i 0 3 + i 0
|
clogl - 1 + i 1 3 + i 1 - 2 + i 1
|
clog10f 4 + i 2 2 + i 1 2 + i 1 4 + i 2 4 + i 2
|
clog10 3 + i 2 2 + i 1 2 + i 1 3 + i 2 3 + i 2
|
clog10l 0 + i 1 1 + i 1 3 + i 2 - 2 + i 2
|
conjf - - - - -
|
conj - - - - -
|
conjl - - - - -
|
copysignf - - - - -
|
copysign - - - - -
|
copysignl - - - - -
|
cosf 1 - - 1 1
|
cos 2 1 1 - -
|
cosl 2 - - - 1
|
coshf 1 - - 1 1
|
cosh 1 - - 1 1
|
coshl - - - - 1
|
cpowf 4 + i 2 5 + i 2 3 + i 5 4 + i 2 4 + i 2
|
cpow 2 + i 2 2 + i 0 1 + i 0 2 + i 0 2 + i 0
|
cpowl 2 + i 2 3 + i 4 3 + i 1 - 4 + i 1
|
cprojf - - - - -
|
cproj - - - - -
|
cprojl - - - - -
|
crealf - - - - -
|
creal - - - - -
|
creall - - - - -
|
csinf 1 + i 0 1 + i 1 - 1 + i 0 1 + i 0
|
csin 1 + i 0 1 + i 0 - 1 + i 0 1 + i 0
|
csinl - 1 + i 0 1 + i 0 - 1 + i 1
|
csinhf 1 + i 1 1 + i 1 - 1 + i 1 1 + i 1
|
csinh 0 + i 1 1 + i 1 - 0 + i 1 0 + i 1
|
csinhl 0 + i 1 1 + i 0 1 + i 0 - 1 + i 1
|
csqrtf 2 + i 2 1 + i 1 1 + i 1 2 + i 2 2 + i 2
|
csqrt 2 + i 2 1 + i 1 1 + i 1 2 + i 2 2 + i 2
|
csqrtl - 1 + i 1 2 + i 2 - 2 + i 2
|
ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ctan 1 + i 2 1 + i 2 1 + i 1 1 + i 2 1 + i 2
|
ctanl 0 + i 1 2 + i 2 2 + i 2 - 3 + i 3
|
ctanhf 1 + i 2 1 + i 1 1 + i 2 1 + i 2 1 + i 2
|
ctanh 2 + i 2 2 + i 2 1 + i 1 2 + i 2 2 + i 2
|
ctanhl 1 + i 0 1 + i 2 2 + i 2 - 3 + i 3
|
erff 1 - 1 1 1
|
erf 1 - - 1 1
|
erfl 1 - 1 - 1
|
erfcf 2 - 1 2 2
|
erfc 3 - - 3 3
|
erfcl 1 - 2 - 2
|
expf 1 - - 1 1
|
exp - - - - -
|
expl - - - - 1
|
exp10f 2 - - - -
|
exp10 6 - - 2 2
|
exp10l 6 - - - 2
|
exp2f 1 - - 1 1
|
exp2 1 - 1 1 1
|
exp2l - - - - 1
|
expm1f 1 - - 1 1
|
expm1 1 - - 1 1
|
expm1l 1 1 - - 1
|
fabsf - - - - -
|
fabs - - - - -
|
fabsl - - - - -
|
fdimf - - - - -
|
fdim - - - - -
|
fdiml - - - - -
|
floorf - - - - -
|
floor - - - - -
|
floorl - - - - -
|
fmaf - - - - -
|
fma - - - - -
|
fmal - - - - -
|
fmaxf - - - - -
|
fmax - - - - -
|
fmaxl - - - - -
|
fmaxmagf - - - - -
|
fmaxmag - - - - -
|
fmaxmagl - - - - -
|
fminf - - - - -
|
fmin - - - - -
|
fminl - - - - -
|
fminmagf - - - - -
|
fminmag - - - - -
|
fminmagl - - - - -
|
fmodf - - - - -
|
fmod - - - - -
|
fmodl - - - - -
|
frexpf - - - - -
|
frexp - - - - -
|
frexpl - - - - -
|
fromfpf - - - - -
|
fromfp - - - - -
|
fromfpl - - - - -
|
fromfpxf - - - - -
|
fromfpx - - - - -
|
fromfpxl - - - - -
|
gammaf 4 - 1 4 4
|
gamma 4 - - 4 4
|
gammal - - 2 - 5
|
hypotf 1 - - - -
|
hypot 1 - 1 1 1
|
hypotl - - 1 - 1
|
ilogbf - - - - -
|
ilogb - - - - -
|
ilogbl - - - - -
|
j0f 2 2 2 2 2
|
j0 2 2 1 2 2
|
j0l 2 2 2 - 2
|
j1f 2 2 2 2 2
|
j1 1 1 - 1 1
|
j1l 1 1 1 - 4
|
jnf 5 4 2 4 4
|
jn 4 4 2 4 4
|
jnl 4 4 4 - 7
|
lgammaf 4 - 1 4 4
|
lgamma 4 - - 4 4
|
lgammal 1 - 2 - 5
|
llogbf - - - - -
|
llogb - - - - -
|
llogbl - - - - -
|
lrintf - - - - -
|
lrint - - - - -
|
lrintl - - - - -
|
llrintf - - - - -
|
llrint - - - - -
|
llrintl - - - - -
|
logf 1 - - 1 1
|
log - - - - -
|
logl - - - - 1
|
log10f 2 - - 2 2
|
log10 2 - - 2 2
|
log10l 1 - - - 1
|
log1pf 1 - - 1 1
|
log1p 1 - - 1 1
|
log1pl - - - - 2
|
log2f 1 - - 1 1
|
log2 2 - - 2 2
|
log2l - - - - 2
|
logbf - - - - -
|
logb - - - - -
|
logbl - - - - -
|
lroundf - - - - -
|
lround - - - - -
|
lroundl - - - - -
|
llroundf - - - - -
|
llround - - - - -
|
llroundl - - - - -
|
modff - - - - -
|
modf - - - - -
|
modfl - - - - -
|
nearbyintf - - - - -
|
nearbyint - - - - -
|
nearbyintl - - - - -
|
nextafterf - - - - -
|
nextafter - - - - -
|
nextafterl - - - - -
|
nextdownf - - - - -
|
nextdown - - - - -
|
nextdownl - - - - -
|
nexttowardf - - - - -
|
nexttoward - - - - -
|
nexttowardl - - - - -
|
nextupf - - - - -
|
nextup - - - - -
|
nextupl - - - - -
|
powf 1 - 7 1 1
|
pow - - 1 - -
|
powl - - 9 - 2
|
remainderf - - - - -
|
remainder - - - - -
|
remainderl - - - - -
|
remquof - - - - -
|
remquo - - - - -
|
remquol - - - - -
|
rintf - - - - -
|
rint - - - - -
|
rintl - - - - -
|
roundf - - - - -
|
round - - - - -
|
roundl - - - - -
|
roundevenf - - - - -
|
roundeven - - - - -
|
roundevenl - - - - -
|
scalbf - - - - -
|
scalb - - - - -
|
scalbl - - - - -
|
scalbnf - - - - -
|
scalbn - - - - -
|
scalbnl - - - - -
|
sinf 1 - - 1 1
|
sin - 1 1 - -
|
sinl - - - - 1
|
sincosf 1 - - 1 1
|
sincos 1 1 - - -
|
sincosl 1 - - - 1
|
sinhf 2 - - 2 2
|
sinh 2 - - 2 2
|
sinhl - - - - 2
|
sqrtf - - - - -
|
sqrt - - - - -
|
sqrtl - - - - -
|
tanf 1 - - 1 1
|
tan 1 - - - -
|
tanl 1 - - - 1
|
tanhf 2 - - 2 2
|
tanh 2 - - 2 2
|
tanhl - - - - 2
|
tgammaf 4 - 4 4 4
|
tgamma 5 - 1 5 5
|
tgammal 1 1 9 - 4
|
truncf - - - - -
|
trunc - - - - -
|
truncl - - - - -
|
ufromfpf - - - - -
|
ufromfp - - - - -
|
ufromfpl - - - - -
|
ufromfpxf - - - - -
|
ufromfpx - - - - -
|
ufromfpxl - - - - -
|
y0f 1 1 1 1 1
|
y0 2 2 1 2 2
|
y0l 2 1 1 - 3
|
y1f 2 2 3 2 2
|
y1 3 3 1 3 3
|
y1l 3 2 2 - 2
|
ynf 2 3 3 2 2
|
yn 3 3 2 3 3
|
ynl 3 2 4 - 5
|
Function MicroBlaze Nios II PowerPC PowerPC S/390
|
soft-float
|
acosf - 1 1 1 1
|
acos - - - - -
|
acosl - - 1 1 1
|
acoshf - 2 2 2 2
|
acosh 1 2 2 2 2
|
acoshl - - 2 1 2
|
asinf - 1 1 1 1
|
asin - - - - -
|
asinl - - 2 2 1
|
asinhf 1 1 1 1 1
|
asinh 1 1 1 1 1
|
asinhl - - 2 2 3
|
atanf - 1 1 1 1
|
atan - - 1 - -
|
atanl - - 1 1 1
|
atanhf 1 2 2 2 2
|
atanh - 2 2 2 2
|
atanhl - - 2 2 3
|
atan2f 1 1 1 1 1
|
atan2 - - - - -
|
atan2l - - 2 2 1
|
cabsf - - - - -
|
cabs - 1 1 1 1
|
cabsl - - 1 1 1
|
cacosf 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
|
cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacosl - - 1 + i 2 2 + i 1 2 + i 2
|
cacoshf 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
|
cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacoshl - - 2 + i 1 1 + i 2 2 + i 2
|
cargf - 1 1 1 1
|
carg - - 1 - -
|
cargl - - 2 2 2
|
casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
|
casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinl - - 1 + i 2 2 + i 1 2 + i 2
|
casinhf 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
|
casinh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinhl - - 2 + i 1 1 + i 2 2 + i 2
|
catanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
|
catanl - - 1 + i 1 1 + i 1 1 + i 1
|
catanhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
catanh 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
|
catanhl - - 1 + i 1 1 + i 1 1 + i 1
|
cbrtf 1 1 1 1 1
|
cbrt 1 3 3 3 3
|
cbrtl - - 1 1 1
|
ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccosl - - 1 + i 2 1 + i 2 1 + i 1
|
ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccoshl - - 1 + i 2 1 + i 2 1 + i 1
|
ceilf - - - - -
|
ceil - - - - -
|
ceill - - - - -
|
cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
|
cexp 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
|
cexpl - - 2 + i 2 1 + i 1 1 + i 1
|
cimagf - - - - -
|
cimag - - - - -
|
cimagl - - - - -
|
clogf 1 + i 1 3 + i 1 3 + i 1 3 + i 1 3 + i 1
|
clog 1 + i 0 3 + i 0 3 + i 1 3 + i 0 3 + i 0
|
clogl - - 5 + i 2 2 + i 2 2 + i 1
|
clog10f 2 + i 1 4 + i 2 4 + i 2 4 + i 2 4 + i 2
|
clog10 2 + i 1 3 + i 2 3 + i 2 3 + i 2 3 + i 2
|
clog10l - - 3 + i 2 3 + i 2 2 + i 2
|
conjf - - - - -
|
conj - - - - -
|
conjl - - - - -
|
copysignf - - - - -
|
copysign - - - - -
|
copysignl - - - - -
|
cosf 1 1 1 1 1
|
cos - - - - -
|
cosl - - 4 4 1
|
coshf 1 1 1 1 1
|
cosh 1 1 1 1 1
|
coshl - - 3 3 1
|
cpowf 4 + i 2 4 + i 2 5 + i 2 4 + i 2 5 + i 2
|
cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 0 2 + i 0
|
cpowl - - 4 + i 2 4 + i 1 4 + i 1
|
cprojf - - - - -
|
cproj - - - - -
|
cprojl - - - - -
|
crealf - - - - -
|
creal - - - - -
|
creall - - - - -
|
csinf 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
|
csin 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
|
csinl - - 2 + i 1 2 + i 1 1 + i 1
|
csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
csinh 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
|
csinhl - - 1 + i 2 1 + i 2 1 + i 1
|
csqrtf 1 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2
|
csqrt 1 + i 1 2 + i 2 2 + i 2 2 + i 2 2 + i 2
|
csqrtl - - 1 + i 1 1 + i 1 2 + i 2
|
ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ctan 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
|
ctanl - - 3 + i 2 3 + i 2 3 + i 3
|
ctanhf 1 + i 2 1 + i 2 2 + i 1 1 + i 2 2 + i 1
|
ctanh 2 + i 2 2 + i 2 2 + i 2 2 + i 2 2 + i 2
|
ctanhl - - 3 + i 3 2 + i 3 3 + i 3
|
erff - 1 1 1 1
|
erf 1 1 1 1 1
|
erfl - - 1 1 1
|
erfcf 1 2 2 2 2
|
erfc 1 3 2 3 2
|
erfcl - - 3 3 2
|
expf - 1 1 1 1
|
exp - - 1 - -
|
expl - - 1 1 1
|
exp10f - - - - -
|
exp10 1 2 2 2 2
|
exp10l - - 1 1 2
|
exp2f - 1 1 1 1
|
exp2 - 1 1 1 1
|
exp2l - - 2 1 1
|
expm1f 1 1 1 1 1
|
expm1 1 1 1 1 1
|
expm1l - - 1 1 1
|
fabsf - - - - -
|
fabs - - - - -
|
fabsl - - - - -
|
fdimf - - - - -
|
fdim - - - - -
|
fdiml - - - - -
|
floorf - - - - -
|
floor - - - - -
|
floorl - - - - -
|
fmaf - - - - -
|
fma - - - - -
|
fmal - - 1 1 -
|
fmaxf - - - - -
|
fmax - - - - -
|
fmaxl - - - - -
|
fmaxmagf - - - - -
|
fmaxmag - - - - -
|
fmaxmagl - - - - -
|
fminf - - - - -
|
fmin - - - - -
|
fminl - - - - -
|
fminmagf - - - - -
|
fminmag - - - - -
|
fminmagl - - - - -
|
fmodf - - - - -
|
fmod - - - - -
|
fmodl - - 1 1 -
|
frexpf - - - - -
|
frexp - - - - -
|
frexpl - - - - -
|
fromfpf - - - - -
|
fromfp - - - - -
|
fromfpl - - - - -
|
fromfpxf - - - - -
|
fromfpx - - - - -
|
fromfpxl - - - - -
|
gammaf 1 4 4 4 4
|
gamma 1 4 3 4 3
|
gammal - - 3 3 5
|
hypotf - - - - -
|
hypot 1 1 1 1 1
|
hypotl - - 1 1 1
|
ilogbf - - - - -
|
ilogb - - - - -
|
ilogbl - - - - -
|
j0f 2 2 2 2 2
|
j0 2 2 2 2 2
|
j0l - - 2 2 2
|
j1f 2 2 2 2 2
|
j1 1 1 1 1 1
|
j1l - - 2 1 4
|
jnf 4 4 4 4 4
|
jn 4 4 4 4 4
|
jnl - - 4 4 7
|
lgammaf 1 4 4 4 4
|
lgamma 1 4 3 4 3
|
lgammal - - 3 3 5
|
llogbf - - - - -
|
llogb - - - - -
|
llogbl - - - - -
|
lrintf - - - - -
|
lrint - - - - -
|
lrintl - - - - -
|
llrintf - - - - -
|
llrint - - - - -
|
llrintl - - - - -
|
logf 1 1 1 1 1
|
log - - - - -
|
logl - - 1 1 1
|
log10f 2 2 2 2 2
|
log10 1 2 2 2 2
|
log10l - - 1 1 1
|
log1pf 1 1 1 1 1
|
log1p - 1 1 1 1
|
log1pl - - 2 2 2
|
log2f - 1 1 1 1
|
log2 - 2 1 2 1
|
log2l - - 1 1 2
|
logbf - - - - -
|
logb - - - - -
|
logbl - - - - -
|
lroundf - - - - -
|
lround - - - - -
|
lroundl - - - - -
|
llroundf - - - - -
|
llround - - - - -
|
llroundl - - - - -
|
modff - - - - -
|
modf - - - - -
|
modfl - - - - -
|
nearbyintf - - - - -
|
nearbyint - - - - -
|
nearbyintl - - - - -
|
nextafterf - - - - -
|
nextafter - - - - -
|
nextafterl - - - - -
|
nextdownf - - - - -
|
nextdown - - - - -
|
nextdownl - - - - -
|
nexttowardf - - - - -
|
nexttoward - - - - -
|
nexttowardl - - - - -
|
nextupf - - - - -
|
nextup - - - - -
|
nextupl - - - - -
|
powf 1 3 1 1 1
|
pow - - - - -
|
powl - - 1 1 2
|
remainderf - - - - -
|
remainder - - - - -
|
remainderl - - - - -
|
remquof - - - - -
|
remquo - - - - -
|
remquol - - - - -
|
rintf - - - - -
|
rint - - - - -
|
rintl - - - - -
|
roundf - - - - -
|
round - - - - -
|
roundl - - - - -
|
roundevenf - - - - -
|
roundeven - - - - -
|
roundevenl - - - - -
|
scalbf - - - - -
|
scalb - - - - -
|
scalbl - - - - -
|
scalbnf - - - - -
|
scalbn - - - - -
|
scalbnl - - - - -
|
sinf 1 1 1 1 1
|
sin - - - - -
|
sinl - - 1 1 1
|
sincosf 1 1 1 1 1
|
sincos - - - - -
|
sincosl - - 1 1 1
|
sinhf - 2 2 2 2
|
sinh - 2 2 2 2
|
sinhl - - 3 3 2
|
sqrtf - - - - -
|
sqrt - - - - -
|
sqrtl - - 1 1 -
|
tanf - 1 1 1 1
|
tan - - - - -
|
tanl - - 2 2 1
|
tanhf - 2 2 2 2
|
tanh - 2 2 2 2
|
tanhl - - 1 1 2
|
tgammaf 3 5 4 4 4
|
tgamma 4 5 5 5 5
|
tgammal - - 5 3 4
|
truncf - - - - -
|
trunc - - - - -
|
truncl - - - - -
|
ufromfpf - - - - -
|
ufromfp - - - - -
|
ufromfpl - - - - -
|
ufromfpxf - - - - -
|
ufromfpx - - - - -
|
ufromfpxl - - - - -
|
y0f 1 1 1 1 1
|
y0 2 2 2 2 2
|
y0l - - 1 1 3
|
y1f 2 2 2 2 2
|
y1 3 3 3 3 3
|
y1l - - 2 2 2
|
ynf 2 2 2 2 2
|
yn 3 3 3 3 3
|
ynl - - 2 2 5
|
Function SH Sparc Tile i686 ix86
|
acosf - 1 1 - -
|
acos - - - 1 1
|
acosl - 1 - 1 1
|
acoshf - 2 2 - -
|
acosh 1 2 2 1 1
|
acoshl - 2 - 2 2
|
asinf - 1 1 - -
|
asin - - - 1 1
|
asinl - 1 - 1 1
|
asinhf 1 1 1 - -
|
asinh 1 1 1 1 1
|
asinhl - 3 - 3 3
|
atanf - 1 1 - -
|
atan - - - 1 1
|
atanl - 1 - 1 1
|
atanhf 1 2 2 - -
|
atanh - 2 2 1 1
|
atanhl - 3 - 3 3
|
atan2f 1 1 1 - -
|
atan2 - - - 1 1
|
atan2l - 1 - 1 1
|
cabsf - - - - -
|
cabs - 1 1 1 1
|
cabsl - 1 - 1 1
|
cacosf 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
|
cacos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacosl - 2 + i 2 - 1 + i 2 1 + i 2
|
cacoshf 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
|
cacosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
cacoshl - 2 + i 2 - 2 + i 1 2 + i 1
|
cargf - 1 1 - -
|
carg - - - 1 1
|
cargl - 2 - 1 1
|
casinf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
|
casin 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinl - 2 + i 2 - 1 + i 2 1 + i 2
|
casinhf 2 + i 1 2 + i 1 2 + i 1 1 + i 1 1 + i 1
|
casinh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
casinhl - 2 + i 2 - 2 + i 1 2 + i 1
|
catanf 1 + i 1 1 + i 1 1 + i 1 0 + i 1 0 + i 1
|
catan 0 + i 1 0 + i 1 0 + i 1 0 + i 1 0 + i 1
|
catanl - 1 + i 1 - 0 + i 1 0 + i 1
|
catanhf 1 + i 1 1 + i 1 1 + i 1 1 + i 0 1 + i 0
|
catanh 1 + i 0 1 + i 0 1 + i 0 1 + i 0 1 + i 0
|
catanhl - 1 + i 1 - 1 + i 0 1 + i 0
|
cbrtf 1 1 1 1 1
|
cbrt 1 3 3 1 1
|
cbrtl - 1 - 3 3
|
ccosf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccos 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccosl - 1 + i 1 - 1 + i 1 1 + i 1
|
ccoshf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccosh 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ccoshl - 1 + i 1 - 1 + i 1 1 + i 1
|
ceilf - - - - -
|
ceil - - - - -
|
ceill - - - - -
|
cexpf 1 + i 2 1 + i 2 1 + i 2 1 + i 2 1 + i 2
|
cexp 2 + i 1 2 + i 1 2 + i 1 2 + i 1 2 + i 1
|
cexpl - 1 + i 1 - 1 + i 1 1 + i 1
|
cimagf - - - - -
|
cimag - - - - -
|
cimagl - - - - -
|
clogf 1 + i 1 3 + i 1 3 + i 1 1 + i 0 1 + i 0
|
clog 1 + i 0 3 + i 0 3 + i 0 2 + i 1 2 + i 1
|
clogl - 4 + i 1 - 3 + i 1 3 + i 1
|
clog10f 2 + i 1 4 + i 2 4 + i 2 2 + i 0 2 + i 0
|
clog10 2 + i 1 3 + i 2 3 + i 2 2 + i 1 2 + i 1
|
clog10l - 4 + i 2 - 4 + i 2 4 + i 2
|
conjf - - - - -
|
conj - - - - -
|
conjl - - - - -
|
copysignf - - - - -
|
copysign - - - - -
|
copysignl - - - - -
|
cosf 1 1 1 - 1
|
cos - - - - -
|
cosl - 1 - 1 1
|
coshf 1 1 1 1 1
|
cosh 1 1 1 1 1
|
coshl - 1 - 2 2
|
cpowf 4 + i 2 4 + i 2 4 + i 2 5 + i 2 5 + i 2
|
cpow 2 + i 0 2 + i 0 2 + i 0 2 + i 1 2 + i 0
|
cpowl - 4 + i 1 - 3 + i 4 3 + i 4
|
cprojf - - - - -
|
cproj - - - - -
|
cprojl - - - - -
|
crealf - - - - -
|
creal - - - - -
|
creall - - - - -
|
csinf 1 + i 0 1 + i 0 1 + i 0 1 + i 1 1 + i 1
|
csin 1 + i 0 1 + i 0 1 + i 0 1 + i 1 1 + i 0
|
csinl - 1 + i 1 - 1 + i 0 1 + i 0
|
csinhf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 0 + i 1
|
csinh 0 + i 1 0 + i 1 0 + i 1 1 + i 1 0 + i 1
|
csinhl - 1 + i 1 - 1 + i 1 1 + i 1
|
csqrtf 1 + i 1 2 + i 2 2 + i 2 0 + i 1 0 + i 1
|
csqrt 1 + i 1 2 + i 2 2 + i 2 1 + i 1 1 + i 1
|
csqrtl - 2 + i 2 - 2 + i 2 2 + i 2
|
ctanf 1 + i 1 1 + i 1 1 + i 1 1 + i 1 1 + i 1
|
ctan 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
|
ctanl - 3 + i 3 - 2 + i 1 2 + i 1
|
ctanhf 1 + i 2 1 + i 2 1 + i 2 1 + i 1 1 + i 1
|
ctanh 2 + i 2 2 + i 2 2 + i 2 1 + i 1 1 + i 1
|
ctanhl - 3 + i 3 - 1 + i 2 1 + i 2
|
erff - 1 1 1 1
|
erf 1 1 1 1 1
|
erfl - 1 - 1 1
|
erfcf 1 2 2 1 1
|
erfc 1 3 3 1 1
|
erfcl - 2 - 3 3
|
expf - 1 1 - -
|
exp - - - 1 1
|
expl - 1 - 1 1
|
exp10f - - - - -
|
exp10 1 2 2 1 1
|
exp10l - 2 - 1 1
|
exp2f - 1 1 - -
|
exp2 - 1 1 1 1
|
exp2l - 1 - 1 1
|
expm1f 1 1 1 - -
|
expm1 1 1 1 1 1
|
expm1l - 1 - 2 2
|
fabsf - - - - -
|
fabs - - - - -
|
fabsl - - - - -
|
fdimf - - - - -
|
fdim - - - - -
|
fdiml - - - - -
|
floorf - - - - -
|
floor - - - - -
|
floorl - - - - -
|
fmaf - - - - -
|
fma - - - - -
|
fmal - - - - -
|
fmaxf - - - - -
|
fmax - - - - -
|
fmaxl - - - - -
|
fmaxmagf - - - - -
|
fmaxmag - - - - -
|
fmaxmagl - - - - -
|
fminf - - - - -
|
fmin - - - - -
|
fminl - - - - -
|
fminmagf - - - - -
|
fminmag - - - - -
|
fminmagl - - - - -
|
fmodf - - - - -
|
fmod - - - - -
|
fmodl - - - - -
|
frexpf - - - - -
|
frexp - - - - -
|
frexpl - - - - -
|
fromfpf - - - - -
|
fromfp - - - - -
|
fromfpl - - - - -
|
fromfpxf - - - - -
|
fromfpx - - - - -
|
fromfpxl - - - - -
|
gammaf 1 4 4 3 2
|
gamma 1 4 4 3 3
|
gammal - 5 - 4 4
|
hypotf - - - - -
|
hypot 1 1 1 1 1
|
hypotl - 1 - 1 1
|
ilogbf - - - - -
|
ilogb - - - - -
|
ilogbl - - - - -
|
j0f 2 2 2 1 1
|
j0 2 2 2 1 1
|
j0l - 2 - 2 2
|
j1f 2 2 2 1 1
|
j1 1 1 1 2 2
|
j1l - 4 - 1 1
|
jnf 4 4 4 3 3
|
jn 4 4 4 2 2
|
jnl - 7 - 4 4
|
lgammaf 1 4 4 3 2
|
lgamma 1 4 4 3 3
|
lgammal - 5 - 4 4
|
llogbf - - - - -
|
llogb - - - - -
|
llogbl - - - - -
|
lrintf - - - - -
|
lrint - - - - -
|
lrintl - - - - -
|
llrintf - - - - -
|
llrint - - - - -
|
llrintl - - - - -
|
logf 1 1 1 - -
|
log - - - 1 1
|
logl - 1 - 1 1
|
log10f 2 2 2 - -
|
log10 1 2 2 1 1
|
log10l - 1 - 1 1
|
log1pf 1 1 1 - -
|
log1p - 1 1 1 1
|
log1pl - 2 - 2 2
|
log2f - 1 1 - -
|
log2 - 2 2 1 1
|
log2l - 2 - 1 1
|
logbf - - - - -
|
logb - - - - -
|
logbl - - - - -
|
lroundf - - - - -
|
lround - - - - -
|
lroundl - - - - -
|
llroundf - - - - -
|
llround - - - - -
|
llroundl - - - - -
|
modff - - - - -
|
modf - - - - -
|
modfl - - - - -
|
nearbyintf - - - - -
|
nearbyint - - - - -
|
nearbyintl - - - - -
|
nextafterf - - - - -
|
nextafter - - - - -
|
nextafterl - - - - -
|
nextdownf - - - - -
|
nextdown - - - - -
|
nextdownl - - - - -
|
nexttowardf - - - - -
|
nexttoward - - - - -
|
nexttowardl - - - - -
|
nextupf - - - - -
|
nextup - - - - -
|
nextupl - - - - -
|
powf 1 3 3 - -
|
pow - - - 1 1
|
powl - 2 - 1 1
|
remainderf - - - - -
|
remainder - - - - -
|
remainderl - - - - -
|
remquof - - - - -
|
remquo - - - - -
|
remquol - - - - -
|
rintf - - - - -
|
rint - - - - -
|
rintl - - - - -
|
roundf - - - - -
|
round - - - - -
|
roundl - - - - -
|
roundevenf - - - - -
|
roundeven - - - - -
|
roundevenl - - - - -
|
scalbf - - - - -
|
scalb - - - - -
|
scalbl - - - - -
|
scalbnf - - - - -
|
scalbn - - - - -
|
scalbnl - - - - -
|
sinf 1 1 1 - 1
|
sin - - - - -
|
sinl - 1 - 1 1
|
sincosf 1 1 1 - 1
|
sincos - - - - -
|
sincosl - 1 - 1 1
|
sinhf - 2 2 - -
|
sinh - 2 2 1 1
|
sinhl - 2 - 2 2
|
sqrtf - - - - -
|
sqrt - - - - -
|
sqrtl - - - - -
|
tanf - 1 1 1 1
|
tan - - - - -
|
tanl - 1 - 2 2
|
tanhf - 2 2 - -
|
tanh - 2 2 1 1
|
tanhl - 2 - 3 3
|
tgammaf 3 5 5 3 3
|
tgamma 4 5 5 3 3
|
tgammal - 4 - 5 5
|
truncf - - - - -
|
trunc - - - - -
|
truncl - - - - -
|
ufromfpf - - - - -
|
ufromfp - - - - -
|
ufromfpl - - - - -
|
ufromfpxf - - - - -
|
ufromfpx - - - - -
|
ufromfpxl - - - - -
|
y0f 1 1 1 1 1
|
y0 2 2 2 1 1
|
y0l - 3 - 1 1
|
y1f 2 2 2 2 2
|
y1 3 3 3 2 2
|
y1l - 2 - 2 2
|
ynf 2 2 2 3 3
|
yn 3 3 3 2 2
|
ynl - 5 - 4 4
|