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

File: libc.info, Node: Portable Positioning, Next: Stream Buffering, Prev: File Positioning, Up: I/O on Streams
12.19 Portable File-Position Functions
======================================
On GNU systems, the file position is truly a character count. You can
specify any character count value as an argument to 'fseek' or 'fseeko'
and get reliable results for any random access file. However, some ISO C
systems do not represent file positions in this way.
On some systems where text streams truly differ from binary streams,
it is impossible to represent the file position of a text stream as a
count of characters from the beginning of the file. For example, the
file position on some systems must encode both a record offset within
the file, and a character offset within the record.
As a consequence, if you want your programs to be portable to these
systems, you must observe certain rules:
* The value returned from 'ftell' on a text stream has no predictable
relationship to the number of characters you have read so far. The
only thing you can rely on is that you can use it subsequently as
the OFFSET argument to 'fseek' or 'fseeko' to move back to the same
file position.
* In a call to 'fseek' or 'fseeko' on a text stream, either the
OFFSET must be zero, or WHENCE must be 'SEEK_SET' and the OFFSET
must be the result of an earlier call to 'ftell' on the same
stream.
* The value of the file position indicator of a text stream is
undefined while there are characters that have been pushed back
with 'ungetc' that haven't been read or discarded. *Note
Unreading::.
But even if you observe these rules, you may still have trouble for
long files, because 'ftell' and 'fseek' use a 'long int' value to
represent the file position. This type may not have room to encode all
the file positions in a large file. Using the 'ftello' and 'fseeko'
functions might help here since the 'off_t' type is expected to be able
to hold all file position values but this still does not help to handle
additional information which must be associated with a file position.
So if you do want to support systems with peculiar encodings for the
file positions, it is better to use the functions 'fgetpos' and
'fsetpos' instead. These functions represent the file position using
the data type 'fpos_t', whose internal representation varies from system
to system.
These symbols are declared in the header file 'stdio.h'.
-- Data Type: fpos_t
This is the type of an object that can encode information about the
file position of a stream, for use by the functions 'fgetpos' and
'fsetpos'.
In the GNU C Library, 'fpos_t' is an opaque data structure that
contains internal data to represent file offset and conversion
state information. In other systems, it might have a different
internal representation.
When compiling with '_FILE_OFFSET_BITS == 64' on a 32 bit machine
this type is in fact equivalent to 'fpos64_t' since the LFS
interface transparently replaces the old interface.
-- Data Type: fpos64_t
This is the type of an object that can encode information about the
file position of a stream, for use by the functions 'fgetpos64' and
'fsetpos64'.
In the GNU C Library, 'fpos64_t' is an opaque data structure that
contains internal data to represent file offset and conversion
state information. In other systems, it might have a different
internal representation.
-- Function: int fgetpos (FILE *STREAM, fpos_t *POSITION)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function stores the value of the file position indicator for
the stream STREAM in the 'fpos_t' object pointed to by POSITION.
If successful, 'fgetpos' returns zero; otherwise it returns a
nonzero value and stores an implementation-defined positive value
in 'errno'.
When the sources are compiled with '_FILE_OFFSET_BITS == 64' on a
32 bit system the function is in fact 'fgetpos64'. I.e., the LFS
interface transparently replaces the old interface.
-- Function: int fgetpos64 (FILE *STREAM, fpos64_t *POSITION)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function is similar to 'fgetpos' but the file position is
returned in a variable of type 'fpos64_t' to which POSITION points.
If the sources are compiled with '_FILE_OFFSET_BITS == 64' on a 32
bits machine this function is available under the name 'fgetpos'
and so transparently replaces the old interface.
-- Function: int fsetpos (FILE *STREAM, const fpos_t *POSITION)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function sets the file position indicator for the stream
STREAM to the position POSITION, which must have been set by a
previous call to 'fgetpos' on the same stream. If successful,
'fsetpos' clears the end-of-file indicator on the stream, discards
any characters that were "pushed back" by the use of 'ungetc', and
returns a value of zero. Otherwise, 'fsetpos' returns a nonzero
value and stores an implementation-defined positive value in
'errno'.
When the sources are compiled with '_FILE_OFFSET_BITS == 64' on a
32 bit system the function is in fact 'fsetpos64'. I.e., the LFS
interface transparently replaces the old interface.
-- Function: int fsetpos64 (FILE *STREAM, const fpos64_t *POSITION)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function is similar to 'fsetpos' but the file position used
for positioning is provided in a variable of type 'fpos64_t' to
which POSITION points.
If the sources are compiled with '_FILE_OFFSET_BITS == 64' on a 32
bits machine this function is available under the name 'fsetpos'
and so transparently replaces the old interface.

File: libc.info, Node: Stream Buffering, Next: Other Kinds of Streams, Prev: Portable Positioning, Up: I/O on Streams
12.20 Stream Buffering
======================
Characters that are written to a stream are normally accumulated and
transmitted asynchronously to the file in a block, instead of appearing
as soon as they are output by the application program. Similarly,
streams often retrieve input from the host environment in blocks rather
than on a character-by-character basis. This is called "buffering".
If you are writing programs that do interactive input and output
using streams, you need to understand how buffering works when you
design the user interface to your program. Otherwise, you might find
that output (such as progress or prompt messages) doesn't appear when
you intended it to, or displays some other unexpected behavior.
This section deals only with controlling when characters are
transmitted between the stream and the file or device, and _not_ with
how things like echoing, flow control, and the like are handled on
specific classes of devices. For information on common control
operations on terminal devices, see *note Low-Level Terminal
Interface::.
You can bypass the stream buffering facilities altogether by using
the low-level input and output functions that operate on file
descriptors instead. *Note Low-Level I/O::.
* Menu:
* Buffering Concepts:: Terminology is defined here.
* Flushing Buffers:: How to ensure that output buffers are flushed.
* Controlling Buffering:: How to specify what kind of buffering to use.

File: libc.info, Node: Buffering Concepts, Next: Flushing Buffers, Up: Stream Buffering
12.20.1 Buffering Concepts
--------------------------
There are three different kinds of buffering strategies:
* Characters written to or read from an "unbuffered" stream are
transmitted individually to or from the file as soon as possible.
* Characters written to a "line buffered" stream are transmitted to
the file in blocks when a newline character is encountered.
* Characters written to or read from a "fully buffered" stream are
transmitted to or from the file in blocks of arbitrary size.
Newly opened streams are normally fully buffered, with one exception:
a stream connected to an interactive device such as a terminal is
initially line buffered. *Note Controlling Buffering::, for information
on how to select a different kind of buffering. Usually the automatic
selection gives you the most convenient kind of buffering for the file
or device you open.
The use of line buffering for interactive devices implies that output
messages ending in a newline will appear immediately--which is usually
what you want. Output that doesn't end in a newline might or might not
show up immediately, so if you want them to appear immediately, you
should flush buffered output explicitly with 'fflush', as described in
*note Flushing Buffers::.

File: libc.info, Node: Flushing Buffers, Next: Controlling Buffering, Prev: Buffering Concepts, Up: Stream Buffering
12.20.2 Flushing Buffers
------------------------
"Flushing" output on a buffered stream means transmitting all
accumulated characters to the file. There are many circumstances when
buffered output on a stream is flushed automatically:
* When you try to do output and the output buffer is full.
* When the stream is closed. *Note Closing Streams::.
* When the program terminates by calling 'exit'. *Note Normal
Termination::.
* When a newline is written, if the stream is line buffered.
* Whenever an input operation on _any_ stream actually reads data
from its file.
If you want to flush the buffered output at another time, call
'fflush', which is declared in the header file 'stdio.h'.
-- Function: int fflush (FILE *STREAM)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function causes any buffered output on STREAM to be delivered
to the file. If STREAM is a null pointer, then 'fflush' causes
buffered output on _all_ open output streams to be flushed.
This function returns 'EOF' if a write error occurs, or zero
otherwise.
-- Function: int fflush_unlocked (FILE *STREAM)
Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Unsafe
corrupt | *Note POSIX Safety Concepts::.
The 'fflush_unlocked' function is equivalent to the 'fflush'
function except that it does not implicitly lock the stream.
The 'fflush' function can be used to flush all streams currently
opened. While this is useful in some situations it does often more than
necessary since it might be done in situations when terminal input is
required and the program wants to be sure that all output is visible on
the terminal. But this means that only line buffered streams have to be
flushed. Solaris introduced a function especially for this. It was
always available in the GNU C Library in some form but never officially
exported.
-- Function: void _flushlbf (void)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
The '_flushlbf' function flushes all line buffered streams
currently opened.
This function is declared in the 'stdio_ext.h' header.
*Compatibility Note:* Some brain-damaged operating systems have been
known to be so thoroughly fixated on line-oriented input and output that
flushing a line buffered stream causes a newline to be written!
Fortunately, this "feature" seems to be becoming less common. You do
not need to worry about this with the GNU C Library.
In some situations it might be useful to not flush the output pending
for a stream but instead simply forget it. If transmission is costly
and the output is not needed anymore this is valid reasoning. In this
situation a non-standard function introduced in Solaris and available in
the GNU C Library can be used.
-- Function: void __fpurge (FILE *STREAM)
Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Unsafe
corrupt | *Note POSIX Safety Concepts::.
The '__fpurge' function causes the buffer of the stream STREAM to
be emptied. If the stream is currently in read mode all input in
the buffer is lost. If the stream is in output mode the buffered
output is not written to the device (or whatever other underlying
storage) and the buffer the cleared.
This function is declared in 'stdio_ext.h'.

File: libc.info, Node: Controlling Buffering, Prev: Flushing Buffers, Up: Stream Buffering
12.20.3 Controlling Which Kind of Buffering
-------------------------------------------
After opening a stream (but before any other operations have been
performed on it), you can explicitly specify what kind of buffering you
want it to have using the 'setvbuf' function.
The facilities listed in this section are declared in the header file
'stdio.h'.
-- Function: int setvbuf (FILE *STREAM, char *BUF, int MODE, size_t
SIZE)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function is used to specify that the stream STREAM should have
the buffering mode MODE, which can be either '_IOFBF' (for full
buffering), '_IOLBF' (for line buffering), or '_IONBF' (for
unbuffered input/output).
If you specify a null pointer as the BUF argument, then 'setvbuf'
allocates a buffer itself using 'malloc'. This buffer will be
freed when you close the stream.
Otherwise, BUF should be a character array that can hold at least
SIZE characters. You should not free the space for this array as
long as the stream remains open and this array remains its buffer.
You should usually either allocate it statically, or 'malloc'
(*note Unconstrained Allocation::) the buffer. Using an automatic
array is not a good idea unless you close the file before exiting
the block that declares the array.
While the array remains a stream buffer, the stream I/O functions
will use the buffer for their internal purposes. You shouldn't try
to access the values in the array directly while the stream is
using it for buffering.
The 'setvbuf' function returns zero on success, or a nonzero value
if the value of MODE is not valid or if the request could not be
honored.
-- Macro: int _IOFBF
The value of this macro is an integer constant expression that can
be used as the MODE argument to the 'setvbuf' function to specify
that the stream should be fully buffered.
-- Macro: int _IOLBF
The value of this macro is an integer constant expression that can
be used as the MODE argument to the 'setvbuf' function to specify
that the stream should be line buffered.
-- Macro: int _IONBF
The value of this macro is an integer constant expression that can
be used as the MODE argument to the 'setvbuf' function to specify
that the stream should be unbuffered.
-- Macro: int BUFSIZ
The value of this macro is an integer constant expression that is
good to use for the SIZE argument to 'setvbuf'. This value is
guaranteed to be at least '256'.
The value of 'BUFSIZ' is chosen on each system so as to make stream
I/O efficient. So it is a good idea to use 'BUFSIZ' as the size
for the buffer when you call 'setvbuf'.
Actually, you can get an even better value to use for the buffer
size by means of the 'fstat' system call: it is found in the
'st_blksize' field of the file attributes. *Note Attribute
Meanings::.
Sometimes people also use 'BUFSIZ' as the allocation size of
buffers used for related purposes, such as strings used to receive
a line of input with 'fgets' (*note Character Input::). There is
no particular reason to use 'BUFSIZ' for this instead of any other
integer, except that it might lead to doing I/O in chunks of an
efficient size.
-- Function: void setbuf (FILE *STREAM, char *BUF)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
If BUF is a null pointer, the effect of this function is equivalent
to calling 'setvbuf' with a MODE argument of '_IONBF'. Otherwise,
it is equivalent to calling 'setvbuf' with BUF, and a MODE of
'_IOFBF' and a SIZE argument of 'BUFSIZ'.
The 'setbuf' function is provided for compatibility with old code;
use 'setvbuf' in all new programs.
-- Function: void setbuffer (FILE *STREAM, char *BUF, size_t SIZE)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
If BUF is a null pointer, this function makes STREAM unbuffered.
Otherwise, it makes STREAM fully buffered using BUF as the buffer.
The SIZE argument specifies the length of BUF.
This function is provided for compatibility with old BSD code. Use
'setvbuf' instead.
-- Function: void setlinebuf (FILE *STREAM)
Preliminary: | MT-Safe | AS-Unsafe corrupt | AC-Unsafe lock corrupt
| *Note POSIX Safety Concepts::.
This function makes STREAM be line buffered, and allocates the
buffer for you.
This function is provided for compatibility with old BSD code. Use
'setvbuf' instead.
It is possible to query whether a given stream is line buffered or
not using a non-standard function introduced in Solaris and available in
the GNU C Library.
-- Function: int __flbf (FILE *STREAM)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The '__flbf' function will return a nonzero value in case the
stream STREAM is line buffered. Otherwise the return value is
zero.
This function is declared in the 'stdio_ext.h' header.
Two more extensions allow to determine the size of the buffer and how
much of it is used. These functions were also introduced in Solaris.
-- Function: size_t __fbufsize (FILE *STREAM)
Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Safe |
*Note POSIX Safety Concepts::.
The '__fbufsize' function return the size of the buffer in the
stream STREAM. This value can be used to optimize the use of the
stream.
This function is declared in the 'stdio_ext.h' header.
-- Function: size_t __fpending (FILE *STREAM)
Preliminary: | MT-Safe race:stream | AS-Unsafe corrupt | AC-Safe |
*Note POSIX Safety Concepts::.
The '__fpending' function returns the number of bytes currently in
the output buffer. For wide-oriented stream the measuring unit is
wide characters. This function should not be used on buffers in
read mode or opened read-only.
This function is declared in the 'stdio_ext.h' header.

File: libc.info, Node: Other Kinds of Streams, Next: Formatted Messages, Prev: Stream Buffering, Up: I/O on Streams
12.21 Other Kinds of Streams
============================
The GNU C Library provides ways for you to define additional kinds of
streams that do not necessarily correspond to an open file.
One such type of stream takes input from or writes output to a
string. These kinds of streams are used internally to implement the
'sprintf' and 'sscanf' functions. You can also create such a stream
explicitly, using the functions described in *note String Streams::.
More generally, you can define streams that do input/output to
arbitrary objects using functions supplied by your program. This
protocol is discussed in *note Custom Streams::.
*Portability Note:* The facilities described in this section are
specific to GNU. Other systems or C implementations might or might not
provide equivalent functionality.
* Menu:
* String Streams:: Streams that get data from or put data in
a string or memory buffer.
* Custom Streams:: Defining your own streams with an arbitrary
input data source and/or output data sink.

File: libc.info, Node: String Streams, Next: Custom Streams, Up: Other Kinds of Streams
12.21.1 String Streams
----------------------
The 'fmemopen' and 'open_memstream' functions allow you to do I/O to a
string or memory buffer. These facilities are declared in 'stdio.h'.
-- Function: FILE * fmemopen (void *BUF, size_t SIZE, const char
*OPENTYPE)
Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
*Note POSIX Safety Concepts::.
This function opens a stream that allows the access specified by
the OPENTYPE argument, that reads from or writes to the buffer
specified by the argument BUF. This array must be at least SIZE
bytes long.
If you specify a null pointer as the BUF argument, 'fmemopen'
dynamically allocates an array SIZE bytes long (as with 'malloc';
*note Unconstrained Allocation::). This is really only useful if
you are going to write things to the buffer and then read them back
in again, because you have no way of actually getting a pointer to
the buffer (for this, try 'open_memstream', below). The buffer is
freed when the stream is closed.
The argument OPENTYPE is the same as in 'fopen' (*note Opening
Streams::). If the OPENTYPE specifies append mode, then the
initial file position is set to the first null character in the
buffer. Otherwise the initial file position is at the beginning of
the buffer.
When a stream open for writing is flushed or closed, a null
character (zero byte) is written at the end of the buffer if it
fits. You should add an extra byte to the SIZE argument to account
for this. Attempts to write more than SIZE bytes to the buffer
result in an error.
For a stream open for reading, null characters (zero bytes) in the
buffer do not count as "end of file". Read operations indicate end
of file only when the file position advances past SIZE bytes. So,
if you want to read characters from a null-terminated string, you
should supply the length of the string as the SIZE argument.
Here is an example of using 'fmemopen' to create a stream for reading
from a string:
#include <stdio.h>
static char buffer[] = "foobar";
int
main (void)
{
int ch;
FILE *stream;
stream = fmemopen (buffer, strlen (buffer), "r");
while ((ch = fgetc (stream)) != EOF)
printf ("Got %c\n", ch);
fclose (stream);
return 0;
}
This program produces the following output:
Got f
Got o
Got o
Got b
Got a
Got r
-- Function: FILE * open_memstream (char **PTR, size_t *SIZELOC)
Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
POSIX Safety Concepts::.
This function opens a stream for writing to a buffer. The buffer
is allocated dynamically and grown as necessary, using 'malloc'.
After you've closed the stream, this buffer is your responsibility
to clean up using 'free' or 'realloc'. *Note Unconstrained
Allocation::.
When the stream is closed with 'fclose' or flushed with 'fflush',
the locations PTR and SIZELOC are updated to contain the pointer to
the buffer and its size. The values thus stored remain valid only
as long as no further output on the stream takes place. If you do
more output, you must flush the stream again to store new values
before you use them again.
A null character is written at the end of the buffer. This null
character is _not_ included in the size value stored at SIZELOC.
You can move the stream's file position with 'fseek' or 'fseeko'
(*note File Positioning::). Moving the file position past the end
of the data already written fills the intervening space with
zeroes.
Here is an example of using 'open_memstream':
#include <stdio.h>
int
main (void)
{
char *bp;
size_t size;
FILE *stream;
stream = open_memstream (&bp, &size);
fprintf (stream, "hello");
fflush (stream);
printf ("buf = `%s', size = %d\n", bp, size);
fprintf (stream, ", world");
fclose (stream);
printf ("buf = `%s', size = %d\n", bp, size);
return 0;
}
This program produces the following output:
buf = `hello', size = 5
buf = `hello, world', size = 12

File: libc.info, Node: Custom Streams, Prev: String Streams, Up: Other Kinds of Streams
12.21.2 Programming Your Own Custom Streams
-------------------------------------------
This section describes how you can make a stream that gets input from an
arbitrary data source or writes output to an arbitrary data sink
programmed by you. We call these "custom streams". The functions and
types described here are all GNU extensions.
* Menu:
* Streams and Cookies:: The "cookie" records where to fetch or
store data that is read or written.
* Hook Functions:: How you should define the four "hook
functions" that a custom stream needs.

File: libc.info, Node: Streams and Cookies, Next: Hook Functions, Up: Custom Streams
12.21.2.1 Custom Streams and Cookies
....................................
Inside every custom stream is a special object called the "cookie".
This is an object supplied by you which records where to fetch or store
the data read or written. It is up to you to define a data type to use
for the cookie. The stream functions in the library never refer
directly to its contents, and they don't even know what the type is;
they record its address with type 'void *'.
To implement a custom stream, you must specify _how_ to fetch or
store the data in the specified place. You do this by defining "hook
functions" to read, write, change "file position", and close the stream.
All four of these functions will be passed the stream's cookie so they
can tell where to fetch or store the data. The library functions don't
know what's inside the cookie, but your functions will know.
When you create a custom stream, you must specify the cookie pointer,
and also the four hook functions stored in a structure of type
'cookie_io_functions_t'.
These facilities are declared in 'stdio.h'.
-- Data Type: cookie_io_functions_t
This is a structure type that holds the functions that define the
communications protocol between the stream and its cookie. It has
the following members:
'cookie_read_function_t *read'
This is the function that reads data from the cookie. If the
value is a null pointer instead of a function, then read
operations on this stream always return 'EOF'.
'cookie_write_function_t *write'
This is the function that writes data to the cookie. If the
value is a null pointer instead of a function, then data
written to the stream is discarded.
'cookie_seek_function_t *seek'
This is the function that performs the equivalent of file
positioning on the cookie. If the value is a null pointer
instead of a function, calls to 'fseek' or 'fseeko' on this
stream can only seek to locations within the buffer; any
attempt to seek outside the buffer will return an 'ESPIPE'
error.
'cookie_close_function_t *close'
This function performs any appropriate cleanup on the cookie
when closing the stream. If the value is a null pointer
instead of a function, nothing special is done to close the
cookie when the stream is closed.
-- Function: FILE * fopencookie (void *COOKIE, const char *OPENTYPE,
cookie_io_functions_t IO-FUNCTIONS)
Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
*Note POSIX Safety Concepts::.
This function actually creates the stream for communicating with
the COOKIE using the functions in the IO-FUNCTIONS argument. The
OPENTYPE argument is interpreted as for 'fopen'; see *note Opening
Streams::. (But note that the "truncate on open" option is
ignored.) The new stream is fully buffered.
The 'fopencookie' function returns the newly created stream, or a
null pointer in case of an error.

File: libc.info, Node: Hook Functions, Prev: Streams and Cookies, Up: Custom Streams
12.21.2.2 Custom Stream Hook Functions
......................................
Here are more details on how you should define the four hook functions
that a custom stream needs.
You should define the function to read data from the cookie as:
ssize_t READER (void *COOKIE, char *BUFFER, size_t SIZE)
This is very similar to the 'read' function; see *note I/O
Primitives::. Your function should transfer up to SIZE bytes into the
BUFFER, and return the number of bytes read, or zero to indicate
end-of-file. You can return a value of '-1' to indicate an error.
You should define the function to write data to the cookie as:
ssize_t WRITER (void *COOKIE, const char *BUFFER, size_t SIZE)
This is very similar to the 'write' function; see *note I/O
Primitives::. Your function should transfer up to SIZE bytes from the
buffer, and return the number of bytes written. You can return a value
of '0' to indicate an error. You must not return any negative value.
You should define the function to perform seek operations on the
cookie as:
int SEEKER (void *COOKIE, off64_t *POSITION, int WHENCE)
For this function, the POSITION and WHENCE arguments are interpreted
as for 'fgetpos'; see *note Portable Positioning::.
After doing the seek operation, your function should store the
resulting file position relative to the beginning of the file in
POSITION. Your function should return a value of '0' on success and
'-1' to indicate an error.
You should define the function to do cleanup operations on the cookie
appropriate for closing the stream as:
int CLEANER (void *COOKIE)
Your function should return '-1' to indicate an error, and '0'
otherwise.
-- Data Type: cookie_read_function
This is the data type that the read function for a custom stream
should have. If you declare the function as shown above, this is
the type it will have.
-- Data Type: cookie_write_function
The data type of the write function for a custom stream.
-- Data Type: cookie_seek_function
The data type of the seek function for a custom stream.
-- Data Type: cookie_close_function
The data type of the close function for a custom stream.

File: libc.info, Node: Formatted Messages, Prev: Other Kinds of Streams, Up: I/O on Streams
12.22 Formatted Messages
========================
On systems which are based on System V messages of programs (especially
the system tools) are printed in a strict form using the 'fmtmsg'
function. The uniformity sometimes helps the user to interpret messages
and the strictness tests of the 'fmtmsg' function ensure that the
programmer follows some minimal requirements.
* Menu:
* Printing Formatted Messages:: The 'fmtmsg' function.
* Adding Severity Classes:: Add more severity classes.
* Example:: How to use 'fmtmsg' and 'addseverity'.

File: libc.info, Node: Printing Formatted Messages, Next: Adding Severity Classes, Up: Formatted Messages
12.22.1 Printing Formatted Messages
-----------------------------------
Messages can be printed to standard error and/or to the console. To
select the destination the programmer can use the following two values,
bitwise OR combined if wanted, for the CLASSIFICATION parameter of
'fmtmsg':
'MM_PRINT'
Display the message in standard error.
'MM_CONSOLE'
Display the message on the system console.
The erroneous piece of the system can be signalled by exactly one of
the following values which also is bitwise ORed with the CLASSIFICATION
parameter to 'fmtmsg':
'MM_HARD'
The source of the condition is some hardware.
'MM_SOFT'
The source of the condition is some software.
'MM_FIRM'
The source of the condition is some firmware.
A third component of the CLASSIFICATION parameter to 'fmtmsg' can
describe the part of the system which detects the problem. This is done
by using exactly one of the following values:
'MM_APPL'
The erroneous condition is detected by the application.
'MM_UTIL'
The erroneous condition is detected by a utility.
'MM_OPSYS'
The erroneous condition is detected by the operating system.
A last component of CLASSIFICATION can signal the results of this
message. Exactly one of the following values can be used:
'MM_RECOVER'
It is a recoverable error.
'MM_NRECOV'
It is a non-recoverable error.
-- Function: int fmtmsg (long int CLASSIFICATION, const char *LABEL,
int SEVERITY, const char *TEXT, const char *ACTION, const char
*TAG)
Preliminary: | MT-Safe | AS-Unsafe lock | AC-Safe | *Note POSIX
Safety Concepts::.
Display a message described by its parameters on the device(s)
specified in the CLASSIFICATION parameter. The LABEL parameter
identifies the source of the message. The string should consist of
two colon separated parts where the first part has not more than 10
and the second part not more than 14 characters. The TEXT
parameter describes the condition of the error, the ACTION
parameter possible steps to recover from the error and the TAG
parameter is a reference to the online documentation where more
information can be found. It should contain the LABEL value and a
unique identification number.
Each of the parameters can be a special value which means this
value is to be omitted. The symbolic names for these values are:
'MM_NULLLBL'
Ignore LABEL parameter.
'MM_NULLSEV'
Ignore SEVERITY parameter.
'MM_NULLMC'
Ignore CLASSIFICATION parameter. This implies that nothing is
actually printed.
'MM_NULLTXT'
Ignore TEXT parameter.
'MM_NULLACT'
Ignore ACTION parameter.
'MM_NULLTAG'
Ignore TAG parameter.
There is another way certain fields can be omitted from the output
to standard error. This is described below in the description of
environment variables influencing the behavior.
The SEVERITY parameter can have one of the values in the following
table:
'MM_NOSEV'
Nothing is printed, this value is the same as 'MM_NULLSEV'.
'MM_HALT'
This value is printed as 'HALT'.
'MM_ERROR'
This value is printed as 'ERROR'.
'MM_WARNING'
This value is printed as 'WARNING'.
'MM_INFO'
This value is printed as 'INFO'.
The numeric value of these five macros are between '0' and '4'.
Using the environment variable 'SEV_LEVEL' or using the
'addseverity' function one can add more severity levels with their
corresponding string to print. This is described below (*note
Adding Severity Classes::).
If no parameter is ignored the output looks like this:
LABEL: SEVERITY-STRING: TEXT
TO FIX: ACTION TAG
The colons, new line characters and the 'TO FIX' string are
inserted if necessary, i.e., if the corresponding parameter is not
ignored.
This function is specified in the X/Open Portability Guide. It is
also available on all systems derived from System V.
The function returns the value 'MM_OK' if no error occurred. If
only the printing to standard error failed, it returns 'MM_NOMSG'.
If printing to the console fails, it returns 'MM_NOCON'. If
nothing is printed 'MM_NOTOK' is returned. Among situations where
all outputs fail this last value is also returned if a parameter
value is incorrect.
There are two environment variables which influence the behavior of
'fmtmsg'. The first is 'MSGVERB'. It is used to control the output
actually happening on standard error (_not_ the console output). Each
of the five fields can explicitly be enabled. To do this the user has
to put the 'MSGVERB' variable with a format like the following in the
environment before calling the 'fmtmsg' function the first time:
MSGVERB=KEYWORD[:KEYWORD[:...]]
Valid KEYWORDs are 'label', 'severity', 'text', 'action', and 'tag'.
If the environment variable is not given or is the empty string, a not
supported keyword is given or the value is somehow else invalid, no part
of the message is masked out.
The second environment variable which influences the behavior of
'fmtmsg' is 'SEV_LEVEL'. This variable and the change in the behavior
of 'fmtmsg' is not specified in the X/Open Portability Guide. It is
available in System V systems, though. It can be used to introduce new
severity levels. By default, only the five severity levels described
above are available. Any other numeric value would make 'fmtmsg' print
nothing.
If the user puts 'SEV_LEVEL' with a format like
SEV_LEVEL=[DESCRIPTION[:DESCRIPTION[:...]]]
in the environment of the process before the first call to 'fmtmsg',
where DESCRIPTION has a value of the form
SEVERITY-KEYWORD,LEVEL,PRINTSTRING
The SEVERITY-KEYWORD part is not used by 'fmtmsg' but it has to be
present. The LEVEL part is a string representation of a number. The
numeric value must be a number greater than 4. This value must be used
in the SEVERITY parameter of 'fmtmsg' to select this class. It is not
possible to overwrite any of the predefined classes. The PRINTSTRING is
the string printed when a message of this class is processed by 'fmtmsg'
(see above, 'fmtsmg' does not print the numeric value but instead the
string representation).

File: libc.info, Node: Adding Severity Classes, Next: Example, Prev: Printing Formatted Messages, Up: Formatted Messages
12.22.2 Adding Severity Classes
-------------------------------
There is another possibility to introduce severity classes besides using
the environment variable 'SEV_LEVEL'. This simplifies the task of
introducing new classes in a running program. One could use the
'setenv' or 'putenv' function to set the environment variable, but this
is toilsome.
-- Function: int addseverity (int SEVERITY, const char *STRING)
Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe lock mem |
*Note POSIX Safety Concepts::.
This function allows the introduction of new severity classes which
can be addressed by the SEVERITY parameter of the 'fmtmsg'
function. The SEVERITY parameter of 'addseverity' must match the
value for the parameter with the same name of 'fmtmsg', and STRING
is the string printed in the actual messages instead of the numeric
value.
If STRING is 'NULL' the severity class with the numeric value
according to SEVERITY is removed.
It is not possible to overwrite or remove one of the default
severity classes. All calls to 'addseverity' with SEVERITY set to
one of the values for the default classes will fail.
The return value is 'MM_OK' if the task was successfully performed.
If the return value is 'MM_NOTOK' something went wrong. This could
mean that no more memory is available or a class is not available
when it has to be removed.
This function is not specified in the X/Open Portability Guide
although the 'fmtsmg' function is. It is available on System V
systems.

File: libc.info, Node: Example, Prev: Adding Severity Classes, Up: Formatted Messages
12.22.3 How to use 'fmtmsg' and 'addseverity'
---------------------------------------------
Here is a simple example program to illustrate the use of the both
functions described in this section.
#include <fmtmsg.h>
int
main (void)
{
addseverity (5, "NOTE2");
fmtmsg (MM_PRINT, "only1field", MM_INFO, "text2", "action2", "tag2");
fmtmsg (MM_PRINT, "UX:cat", 5, "invalid syntax", "refer to manual",
"UX:cat:001");
fmtmsg (MM_PRINT, "label:foo", 6, "text", "action", "tag");
return 0;
}
The second call to 'fmtmsg' illustrates a use of this function as it
usually occurs on System V systems, which heavily use this function. It
seems worthwhile to give a short explanation here of how this system
works on System V. The value of the LABEL field ('UX:cat') says that the
error occurred in the Unix program 'cat'. The explanation of the error
follows and the value for the ACTION parameter is '"refer to manual"'.
One could be more specific here, if necessary. The TAG field contains,
as proposed above, the value of the string given for the LABEL
parameter, and additionally a unique ID ('001' in this case). For a GNU
environment this string could contain a reference to the corresponding
node in the Info page for the program.
Running this program without specifying the 'MSGVERB' and 'SEV_LEVEL'
function produces the following output:
UX:cat: NOTE2: invalid syntax
TO FIX: refer to manual UX:cat:001
We see the different fields of the message and how the extra glue
(the colons and the 'TO FIX' string) are printed. But only one of the
three calls to 'fmtmsg' produced output. The first call does not print
anything because the LABEL parameter is not in the correct form. The
string must contain two fields, separated by a colon (*note Printing
Formatted Messages::). The third 'fmtmsg' call produced no output since
the class with the numeric value '6' is not defined. Although a class
with numeric value '5' is also not defined by default, the call to
'addseverity' introduces it and the second call to 'fmtmsg' produces the
above output.
When we change the environment of the program to contain
'SEV_LEVEL=XXX,6,NOTE' when running it we get a different result:
UX:cat: NOTE2: invalid syntax
TO FIX: refer to manual UX:cat:001
label:foo: NOTE: text
TO FIX: action tag
Now the third call to 'fmtmsg' produced some output and we see how
the string 'NOTE' from the environment variable appears in the message.
Now we can reduce the output by specifying which fields we are
interested in. If we additionally set the environment variable
'MSGVERB' to the value 'severity:label:action' we get the following
output:
UX:cat: NOTE2
TO FIX: refer to manual
label:foo: NOTE
TO FIX: action
I.e., the output produced by the TEXT and the TAG parameters to 'fmtmsg'
vanished. Please also note that now there is no colon after the 'NOTE'
and 'NOTE2' strings in the output. This is not necessary since there is
no more output on this line because the text is missing.

File: libc.info, Node: Low-Level I/O, Next: File System Interface, Prev: I/O on Streams, Up: Top
13 Low-Level Input/Output
*************************
This chapter describes functions for performing low-level input/output
operations on file descriptors. These functions include the primitives
for the higher-level I/O functions described in *note I/O on Streams::,
as well as functions for performing low-level control operations for
which there are no equivalents on streams.
Stream-level I/O is more flexible and usually more convenient;
therefore, programmers generally use the descriptor-level functions only
when necessary. These are some of the usual reasons:
* For reading binary files in large chunks.
* For reading an entire file into core before parsing it.
* To perform operations other than data transfer, which can only be
done with a descriptor. (You can use 'fileno' to get the
descriptor corresponding to a stream.)
* To pass descriptors to a child process. (The child can create its
own stream to use a descriptor that it inherits, but cannot inherit
a stream directly.)
* Menu:
* Opening and Closing Files:: How to open and close file
descriptors.
* I/O Primitives:: Reading and writing data.
* File Position Primitive:: Setting a descriptor's file
position.
* Descriptors and Streams:: Converting descriptor to stream
or vice-versa.
* Stream/Descriptor Precautions:: Precautions needed if you use both
descriptors and streams.
* Scatter-Gather:: Fast I/O to discontinuous buffers.
* Memory-mapped I/O:: Using files like memory.
* Waiting for I/O:: How to check for input or output
on multiple file descriptors.
* Synchronizing I/O:: Making sure all I/O actions completed.
* Asynchronous I/O:: Perform I/O in parallel.
* Control Operations:: Various other operations on file
descriptors.
* Duplicating Descriptors:: Fcntl commands for duplicating
file descriptors.
* Descriptor Flags:: Fcntl commands for manipulating
flags associated with file
descriptors.
* File Status Flags:: Fcntl commands for manipulating
flags associated with open files.
* File Locks:: Fcntl commands for implementing
file locking.
* Interrupt Input:: Getting an asynchronous signal when
input arrives.
* IOCTLs:: Generic I/O Control operations.

File: libc.info, Node: Opening and Closing Files, Next: I/O Primitives, Up: Low-Level I/O
13.1 Opening and Closing Files
==============================
This section describes the primitives for opening and closing files
using file descriptors. The 'open' and 'creat' functions are declared
in the header file 'fcntl.h', while 'close' is declared in 'unistd.h'.
-- Function: int open (const char *FILENAME, int FLAGS[, mode_t MODE])
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
Concepts::.
The 'open' function creates and returns a new file descriptor for
the file named by FILENAME. Initially, the file position indicator
for the file is at the beginning of the file. The argument MODE
(*note Permission Bits::) is used only when a file is created, but
it doesn't hurt to supply the argument in any case.
The FLAGS argument controls how the file is to be opened. This is
a bit mask; you create the value by the bitwise OR of the
appropriate parameters (using the '|' operator in C). *Note File
Status Flags::, for the parameters available.
The normal return value from 'open' is a non-negative integer file
descriptor. In the case of an error, a value of -1 is returned
instead. In addition to the usual file name errors (*note File
Name Errors::), the following 'errno' error conditions are defined
for this function:
'EACCES'
The file exists but is not readable/writable as requested by
the FLAGS argument, the file does not exist and the directory
is unwritable so it cannot be created.
'EEXIST'
Both 'O_CREAT' and 'O_EXCL' are set, and the named file
already exists.
'EINTR'
The 'open' operation was interrupted by a signal. *Note
Interrupted Primitives::.
'EISDIR'
The FLAGS argument specified write access, and the file is a
directory.
'EMFILE'
The process has too many files open. The maximum number of
file descriptors is controlled by the 'RLIMIT_NOFILE' resource
limit; *note Limits on Resources::.
'ENFILE'
The entire system, or perhaps the file system which contains
the directory, cannot support any additional open files at the
moment. (This problem cannot happen on GNU/Hurd systems.)
'ENOENT'
The named file does not exist, and 'O_CREAT' is not specified.
'ENOSPC'
The directory or file system that would contain the new file
cannot be extended, because there is no disk space left.
'ENXIO'
'O_NONBLOCK' and 'O_WRONLY' are both set in the FLAGS
argument, the file named by FILENAME is a FIFO (*note Pipes
and FIFOs::), and no process has the file open for reading.
'EROFS'
The file resides on a read-only file system and any of
'O_WRONLY', 'O_RDWR', and 'O_TRUNC' are set in the FLAGS
argument, or 'O_CREAT' is set and the file does not already
exist.
If on a 32 bit machine the sources are translated with
'_FILE_OFFSET_BITS == 64' the function 'open' returns a file
descriptor opened in the large file mode which enables the file
handling functions to use files up to 2^63 bytes in size and offset
from -2^63 to 2^63. This happens transparently for the user since
all of the lowlevel file handling functions are equally replaced.
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
'open' is called. If the thread gets canceled these resources stay
allocated until the program ends. To avoid this calls to 'open'
should be protected using cancellation handlers.
The 'open' function is the underlying primitive for the 'fopen' and
'freopen' functions, that create streams.
-- Function: int open64 (const char *FILENAME, int FLAGS[, mode_t
MODE])
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
Concepts::.
This function is similar to 'open'. It returns a file descriptor
which can be used to access the file named by FILENAME. The only
difference is that on 32 bit systems the file is opened in the
large file mode. I.e., file length and file offsets can exceed 31
bits.
When the sources are translated with '_FILE_OFFSET_BITS == 64' this
function is actually available under the name 'open'. I.e., the
new, extended API using 64 bit file sizes and offsets transparently
replaces the old API.
-- Obsolete function: int creat (const char *FILENAME, mode_t MODE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
Concepts::.
This function is obsolete. The call:
creat (FILENAME, MODE)
is equivalent to:
open (FILENAME, O_WRONLY | O_CREAT | O_TRUNC, MODE)
If on a 32 bit machine the sources are translated with
'_FILE_OFFSET_BITS == 64' the function 'creat' returns a file
descriptor opened in the large file mode which enables the file
handling functions to use files up to 2^63 in size and offset from
-2^63 to 2^63. This happens transparently for the user since all
of the lowlevel file handling functions are equally replaced.
-- Obsolete function: int creat64 (const char *FILENAME, mode_t MODE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
Concepts::.
This function is similar to 'creat'. It returns a file descriptor
which can be used to access the file named by FILENAME. The only
the difference is that on 32 bit systems the file is opened in the
large file mode. I.e., file length and file offsets can exceed 31
bits.
To use this file descriptor one must not use the normal operations
but instead the counterparts named '*64', e.g., 'read64'.
When the sources are translated with '_FILE_OFFSET_BITS == 64' this
function is actually available under the name 'open'. I.e., the
new, extended API using 64 bit file sizes and offsets transparently
replaces the old API.
-- Function: int close (int FILEDES)
Preliminary: | MT-Safe | AS-Safe | AC-Safe fd | *Note POSIX Safety
Concepts::.
The function 'close' closes the file descriptor FILEDES. Closing a
file has the following consequences:
* The file descriptor is deallocated.
* Any record locks owned by the process on the file are
unlocked.
* When all file descriptors associated with a pipe or FIFO have
been closed, any unread data is discarded.
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
'close' is called. If the thread gets canceled these resources
stay allocated until the program ends. To avoid this, calls to
'close' should be protected using cancellation handlers.
The normal return value from 'close' 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.
'EINTR'
The 'close' call was interrupted by a signal. *Note
Interrupted Primitives::. Here is an example of how to handle
'EINTR' properly:
TEMP_FAILURE_RETRY (close (desc));
'ENOSPC'
'EIO'
'EDQUOT'
When the file is accessed by NFS, these errors from 'write'
can sometimes not be detected until 'close'. *Note I/O
Primitives::, for details on their meaning.
Please note that there is _no_ separate 'close64' function. This
is not necessary since this function does not determine nor depend
on the mode of the file. The kernel which performs the 'close'
operation knows which mode the descriptor is used for and can
handle this situation.
To close a stream, call 'fclose' (*note Closing Streams::) instead of
trying to close its underlying file descriptor with 'close'. This
flushes any buffered output and updates the stream object to indicate
that it is closed.

File: libc.info, Node: I/O Primitives, Next: File Position Primitive, Prev: Opening and Closing Files, Up: Low-Level I/O
13.2 Input and Output Primitives
================================
This section describes the functions for performing primitive input and
output operations on file descriptors: 'read', 'write', and 'lseek'.
These functions are declared in the header file 'unistd.h'.
-- Data Type: ssize_t
This data type is used to represent the sizes of blocks that can be
read or written in a single operation. It is similar to 'size_t',
but must be a signed type.
-- Function: ssize_t read (int FILEDES, void *BUFFER, size_t SIZE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'read' function reads up to SIZE bytes from the file with
descriptor FILEDES, storing the results in the BUFFER. (This is
not necessarily a character string, and no terminating null
character is added.)
The return value is the number of bytes actually read. This might
be less than SIZE; for example, if there aren't that many bytes
left in the file or if there aren't that many bytes immediately
available. The exact behavior depends on what kind of file it is.
Note that reading less than SIZE bytes is not an error.
A value of zero indicates end-of-file (except if the value of the
SIZE argument is also zero). This is not considered an error. If
you keep calling 'read' while at end-of-file, it will keep
returning zero and doing nothing else.
If 'read' returns at least one character, there is no way you can
tell whether end-of-file was reached. But if you did reach the
end, the next read will return zero.
In case of an error, 'read' returns -1. The following 'errno'
error conditions are defined for this function:
'EAGAIN'
Normally, when no input is immediately available, 'read' waits
for some input. But if the 'O_NONBLOCK' flag is set for the
file (*note File Status Flags::), 'read' returns immediately
without reading any data, and reports this error.
*Compatibility Note:* Most versions of BSD Unix use a
different error code for this: 'EWOULDBLOCK'. In the GNU C
Library, 'EWOULDBLOCK' is an alias for 'EAGAIN', so it doesn't
matter which name you use.
On some systems, reading a large amount of data from a
character special file can also fail with 'EAGAIN' if the
kernel cannot find enough physical memory to lock down the
user's pages. This is limited to devices that transfer with
direct memory access into the user's memory, which means it
does not include terminals, since they always use separate
buffers inside the kernel. This problem never happens on
GNU/Hurd systems.
Any condition that could result in 'EAGAIN' can instead result
in a successful 'read' which returns fewer bytes than
requested. Calling 'read' again immediately would result in
'EAGAIN'.
'EBADF'
The FILEDES argument is not a valid file descriptor, or is not
open for reading.
'EINTR'
'read' was interrupted by a signal while it was waiting for
input. *Note Interrupted Primitives::. A signal will not
necessary cause 'read' to return 'EINTR'; it may instead
result in a successful 'read' which returns fewer bytes than
requested.
'EIO'
For many devices, and for disk files, this error code
indicates a hardware error.
'EIO' also occurs when a background process tries to read from
the controlling terminal, and the normal action of stopping
the process by sending it a 'SIGTTIN' signal isn't working.
This might happen if the signal is being blocked or ignored,
or because the process group is orphaned. *Note Job
Control::, for more information about job control, and *note
Signal Handling::, for information about signals.
'EINVAL'
In some systems, when reading from a character or block
device, position and size offsets must be aligned to a
particular block size. This error indicates that the offsets
were not properly aligned.
Please note that there is no function named 'read64'. This is not
necessary since this function does not directly modify or handle
the possibly wide file offset. Since the kernel handles this state
internally, the 'read' function can be used for all cases.
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
'read' is called. If the thread gets canceled these resources stay
allocated until the program ends. To avoid this, calls to 'read'
should be protected using cancellation handlers.
The 'read' function is the underlying primitive for all of the
functions that read from streams, such as 'fgetc'.
-- Function: ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE,
off_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'pread' function is similar to the 'read' function. The first
three arguments are identical, and the return values and error
codes also correspond.
The difference is the fourth argument and its handling. The data
block is not read from the current position of the file descriptor
'filedes'. Instead the data is read from the file starting at
position OFFSET. The position of the file descriptor itself is not
affected by the operation. The value is the same as before the
call.
When the source file is compiled with '_FILE_OFFSET_BITS == 64' the
'pread' function is in fact 'pread64' and the type 'off_t' has 64
bits, which makes it possible to handle files up to 2^63 bytes in
length.
The return value of 'pread' describes the number of bytes read. In
the error case it returns -1 like 'read' does and the error codes
are also the same, with these additions:
'EINVAL'
The value given for OFFSET is negative and therefore illegal.
'ESPIPE'
The file descriptor FILEDES is associate with a pipe or a FIFO
and this device does not allow positioning of the file
pointer.
The function is an extension defined in the Unix Single
Specification version 2.
-- Function: ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE,
off64_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function is similar to the 'pread' function. The difference
is that the OFFSET parameter is of type 'off64_t' instead of
'off_t' which makes it possible on 32 bit machines to address files
larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
'filedes' must be opened using 'open64' since otherwise the large
offsets possible with 'off64_t' will lead to errors with a
descriptor in small file mode.
When the source file is compiled with '_FILE_OFFSET_BITS == 64' on
a 32 bit machine this function is actually available under the name
'pread' and so transparently replaces the 32 bit interface.
-- Function: ssize_t write (int FILEDES, const void *BUFFER, size_t
SIZE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'write' function writes up to SIZE bytes from BUFFER to the
file with descriptor FILEDES. The data in BUFFER is not
necessarily a character string and a null character is output like
any other character.
The return value is the number of bytes actually written. This may
be SIZE, but can always be smaller. Your program should always
call 'write' in a loop, iterating until all the data is written.
Once 'write' returns, the data is enqueued to be written and can be
read back right away, but it is not necessarily written out to
permanent storage immediately. You can use 'fsync' when you need
to be sure your data has been permanently stored before continuing.
(It is more efficient for the system to batch up consecutive writes
and do them all at once when convenient. Normally they will always
be written to disk within a minute or less.) Modern systems
provide another function 'fdatasync' which guarantees integrity
only for the file data and is therefore faster. You can use the
'O_FSYNC' open mode to make 'write' always store the data to disk
before returning; *note Operating Modes::.
In the case of an error, 'write' returns -1. The following 'errno'
error conditions are defined for this function:
'EAGAIN'
Normally, 'write' blocks until the write operation is
complete. But if the 'O_NONBLOCK' flag is set for the file
(*note Control Operations::), it returns immediately without
writing any data and reports this error. An example of a
situation that might cause the process to block on output is
writing to a terminal device that supports flow control, where
output has been suspended by receipt of a STOP character.
*Compatibility Note:* Most versions of BSD Unix use a
different error code for this: 'EWOULDBLOCK'. In the GNU C
Library, 'EWOULDBLOCK' is an alias for 'EAGAIN', so it doesn't
matter which name you use.
On some systems, writing a large amount of data from a
character special file can also fail with 'EAGAIN' if the
kernel cannot find enough physical memory to lock down the
user's pages. This is limited to devices that transfer with
direct memory access into the user's memory, which means it
does not include terminals, since they always use separate
buffers inside the kernel. This problem does not arise on
GNU/Hurd systems.
'EBADF'
The FILEDES argument is not a valid file descriptor, or is not
open for writing.
'EFBIG'
The size of the file would become larger than the
implementation can support.
'EINTR'
The 'write' operation was interrupted by a signal while it was
blocked waiting for completion. A signal will not necessarily
cause 'write' to return 'EINTR'; it may instead result in a
successful 'write' which writes fewer bytes than requested.
*Note Interrupted Primitives::.
'EIO'
For many devices, and for disk files, this error code
indicates a hardware error.
'ENOSPC'
The device containing the file is full.
'EPIPE'
This error is returned when you try to write to a pipe or FIFO
that isn't open for reading by any process. When this
happens, a 'SIGPIPE' signal is also sent to the process; see
*note Signal Handling::.
'EINVAL'
In some systems, when writing to a character or block device,
position and size offsets must be aligned to a particular
block size. This error indicates that the offsets were not
properly aligned.
Unless you have arranged to prevent 'EINTR' failures, you should
check 'errno' after each failing call to 'write', and if the error
was 'EINTR', you should simply repeat the call. *Note Interrupted
Primitives::. The easy way to do this is with the macro
'TEMP_FAILURE_RETRY', as follows:
nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count));
Please note that there is no function named 'write64'. This is not
necessary since this function does not directly modify or handle
the possibly wide file offset. Since the kernel handles this state
internally the 'write' function can be used for all cases.
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
'write' is called. If the thread gets canceled these resources
stay allocated until the program ends. To avoid this, calls to
'write' should be protected using cancellation handlers.
The 'write' function is the underlying primitive for all of the
functions that write to streams, such as 'fputc'.
-- Function: ssize_t pwrite (int FILEDES, const void *BUFFER, size_t
SIZE, off_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'pwrite' function is similar to the 'write' function. The
first three arguments are identical, and the return values and
error codes also correspond.
The difference is the fourth argument and its handling. The data
block is not written to the current position of the file descriptor
'filedes'. Instead the data is written to the file starting at
position OFFSET. The position of the file descriptor itself is not
affected by the operation. The value is the same as before the
call.
When the source file is compiled with '_FILE_OFFSET_BITS == 64' the
'pwrite' function is in fact 'pwrite64' and the type 'off_t' has 64
bits, which makes it possible to handle files up to 2^63 bytes in
length.
The return value of 'pwrite' describes the number of written bytes.
In the error case it returns -1 like 'write' does and the error
codes are also the same, with these additions:
'EINVAL'
The value given for OFFSET is negative and therefore illegal.
'ESPIPE'
The file descriptor FILEDES is associated with a pipe or a
FIFO and this device does not allow positioning of the file
pointer.
The function is an extension defined in the Unix Single
Specification version 2.
-- Function: ssize_t pwrite64 (int FILEDES, const void *BUFFER, size_t
SIZE, off64_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function is similar to the 'pwrite' function. The difference
is that the OFFSET parameter is of type 'off64_t' instead of
'off_t' which makes it possible on 32 bit machines to address files
larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
'filedes' must be opened using 'open64' since otherwise the large
offsets possible with 'off64_t' will lead to errors with a
descriptor in small file mode.
When the source file is compiled using '_FILE_OFFSET_BITS == 64' on
a 32 bit machine this function is actually available under the name
'pwrite' and so transparently replaces the 32 bit interface.

File: libc.info, Node: File Position Primitive, Next: Descriptors and Streams, Prev: I/O Primitives, Up: Low-Level I/O
13.3 Setting the File Position of a Descriptor
==============================================
Just as you can set the file position of a stream with 'fseek', you can
set the file position of a descriptor with 'lseek'. This specifies the
position in the file for the next 'read' or 'write' operation. *Note
File Positioning::, for more information on the file position and what
it means.
To read the current file position value from a descriptor, use 'lseek
(DESC, 0, SEEK_CUR)'.
-- Function: off_t lseek (int FILEDES, off_t OFFSET, int WHENCE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'lseek' function is used to change the file position of the
file with descriptor FILEDES.
The WHENCE argument specifies how the OFFSET should be interpreted,
in the same way as for the 'fseek' function, and it must be one of
the symbolic constants 'SEEK_SET', 'SEEK_CUR', or 'SEEK_END'.
'SEEK_SET'
Specifies that OFFSET is a count of characters from the
beginning of the file.
'SEEK_CUR'
Specifies that OFFSET is a count of characters from the
current file position. This count may be positive or
negative.
'SEEK_END'
Specifies that OFFSET is a count of characters from the end of
the file. A negative count specifies a position within the
current extent of the file; a positive count specifies a
position past the current end. If you set the position past
the current end, and actually write data, you will extend the
file with zeros up to that position.
The return value from 'lseek' is normally the resulting file
position, measured in bytes from the beginning of the file. You
can use this feature together with 'SEEK_CUR' to read the current
file position.
If you want to append to the file, setting the file position to the
current end of file with 'SEEK_END' is not sufficient. Another
process may write more data after you seek but before you write,
extending the file so the position you write onto clobbers their
data. Instead, use the 'O_APPEND' operating mode; *note Operating
Modes::.
You can set the file position past the current end of the file.
This does not by itself make the file longer; 'lseek' never changes
the file. But subsequent output at that position will extend the
file. Characters between the previous end of file and the new
position are filled with zeros. Extending the file in this way can
create a "hole": the blocks of zeros are not actually allocated on
disk, so the file takes up less space than it appears to; it is
then called a "sparse file".
If the file position cannot be changed, or the operation is in some
way invalid, 'lseek' returns a value of -1. The following 'errno'
error conditions are defined for this function:
'EBADF'
The FILEDES is not a valid file descriptor.
'EINVAL'
The WHENCE argument value is not valid, or the resulting file
offset is not valid. A file offset is invalid.
'ESPIPE'
The FILEDES corresponds to an object that cannot be
positioned, such as a pipe, FIFO or terminal device. (POSIX.1
specifies this error only for pipes and FIFOs, but on GNU
systems, you always get 'ESPIPE' if the object is not
seekable.)
When the source file is compiled with '_FILE_OFFSET_BITS == 64' the
'lseek' function is in fact 'lseek64' and the type 'off_t' has 64
bits which makes it possible to handle files up to 2^63 bytes in
length.
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
'lseek' is called. If the thread gets canceled these resources
stay allocated until the program ends. To avoid this calls to
'lseek' should be protected using cancellation handlers.
The 'lseek' function is the underlying primitive for the 'fseek',
'fseeko', 'ftell', 'ftello' and 'rewind' functions, which operate
on streams instead of file descriptors.
-- Function: off64_t lseek64 (int FILEDES, off64_t OFFSET, int WHENCE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function is similar to the 'lseek' function. The difference
is that the OFFSET parameter is of type 'off64_t' instead of
'off_t' which makes it possible on 32 bit machines to address files
larger than 2^31 bytes and up to 2^63 bytes. The file descriptor
'filedes' must be opened using 'open64' since otherwise the large
offsets possible with 'off64_t' will lead to errors with a
descriptor in small file mode.
When the source file is compiled with '_FILE_OFFSET_BITS == 64' on
a 32 bits machine this function is actually available under the
name 'lseek' and so transparently replaces the 32 bit interface.
You can have multiple descriptors for the same file if you open the
file more than once, or if you duplicate a descriptor with 'dup'.
Descriptors that come from separate calls to 'open' have independent
file positions; using 'lseek' on one descriptor has no effect on the
other. For example,
{
int d1, d2;
char buf[4];
d1 = open ("foo", O_RDONLY);
d2 = open ("foo", O_RDONLY);
lseek (d1, 1024, SEEK_SET);
read (d2, buf, 4);
}
will read the first four characters of the file 'foo'. (The
error-checking code necessary for a real program has been omitted here
for brevity.)
By contrast, descriptors made by duplication share a common file
position with the original descriptor that was duplicated. Anything
which alters the file position of one of the duplicates, including
reading or writing data, affects all of them alike. Thus, for example,
{
int d1, d2, d3;
char buf1[4], buf2[4];
d1 = open ("foo", O_RDONLY);
d2 = dup (d1);
d3 = dup (d2);
lseek (d3, 1024, SEEK_SET);
read (d1, buf1, 4);
read (d2, buf2, 4);
}
will read four characters starting with the 1024'th character of 'foo',
and then four more characters starting with the 1028'th character.
-- Data Type: off_t
This is a signed integer type used to represent file sizes. In the
GNU C Library, this type is no narrower than 'int'.
If the source is compiled with '_FILE_OFFSET_BITS == 64' this type
is transparently replaced by 'off64_t'.
-- Data Type: off64_t
This type is used similar to 'off_t'. The difference is that even
on 32 bit machines, where the 'off_t' type would have 32 bits,
'off64_t' has 64 bits and so is able to address files up to 2^63
bytes in length.
When compiling with '_FILE_OFFSET_BITS == 64' this type is
available under the name 'off_t'.
These aliases for the 'SEEK_...' constants exist for the sake of
compatibility with older BSD systems. They are defined in two different
header files: 'fcntl.h' and 'sys/file.h'.
'L_SET'
An alias for 'SEEK_SET'.
'L_INCR'
An alias for 'SEEK_CUR'.
'L_XTND'
An alias for 'SEEK_END'.

File: libc.info, Node: Descriptors and Streams, Next: Stream/Descriptor Precautions, Prev: File Position Primitive, Up: Low-Level I/O
13.4 Descriptors and Streams
============================
Given an open file descriptor, you can create a stream for it with the
'fdopen' function. You can get the underlying file descriptor for an
existing stream with the 'fileno' function. These functions are
declared in the header file 'stdio.h'.
-- Function: FILE * fdopen (int FILEDES, const char *OPENTYPE)
Preliminary: | MT-Safe | AS-Unsafe heap lock | AC-Unsafe mem lock |
*Note POSIX Safety Concepts::.
The 'fdopen' function returns a new stream for the file descriptor
FILEDES.
The OPENTYPE argument is interpreted in the same way as for the
'fopen' function (*note Opening Streams::), except that the 'b'
option is not permitted; this is because GNU systems make no
distinction between text and binary files. Also, '"w"' and '"w+"'
do not cause truncation of the file; these have an effect only when
opening a file, and in this case the file has already been opened.
You must make sure that the OPENTYPE argument matches the actual
mode of the open file descriptor.
The return value is the new stream. If the stream cannot be
created (for example, if the modes for the file indicated by the
file descriptor do not permit the access specified by the OPENTYPE
argument), a null pointer is returned instead.
In some other systems, 'fdopen' may fail to detect that the modes
for file descriptor do not permit the access specified by
'opentype'. The GNU C Library always checks for this.
For an example showing the use of the 'fdopen' function, see *note
Creating a Pipe::.
-- Function: int fileno (FILE *STREAM)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function returns the file descriptor associated with the
stream STREAM. If an error is detected (for example, if the STREAM
is not valid) or if STREAM does not do I/O to a file, 'fileno'
returns -1.
-- Function: int fileno_unlocked (FILE *STREAM)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'fileno_unlocked' function is equivalent to the 'fileno'
function except that it does not implicitly lock the stream if the
state is 'FSETLOCKING_INTERNAL'.
This function is a GNU extension.
There are also symbolic constants defined in 'unistd.h' for the file
descriptors belonging to the standard streams 'stdin', 'stdout', and
'stderr'; see *note Standard Streams::.
'STDIN_FILENO'
This macro has value '0', which is the file descriptor for standard
input.
'STDOUT_FILENO'
This macro has value '1', which is the file descriptor for standard
output.
'STDERR_FILENO'
This macro has value '2', which is the file descriptor for standard
error output.

File: libc.info, Node: Stream/Descriptor Precautions, Next: Scatter-Gather, Prev: Descriptors and Streams, Up: Low-Level I/O
13.5 Dangers of Mixing Streams and Descriptors
==============================================
You can have multiple file descriptors and streams (let's call both
streams and descriptors "channels" for short) connected to the same
file, but you must take care to avoid confusion between channels. There
are two cases to consider: "linked" channels that share a single file
position value, and "independent" channels that have their own file
positions.
It's best to use just one channel in your program for actual data
transfer to any given file, except when all the access is for input.
For example, if you open a pipe (something you can only do at the file
descriptor level), either do all I/O with the descriptor, or construct a
stream from the descriptor with 'fdopen' and then do all I/O with the
stream.
* Menu:
* Linked Channels:: Dealing with channels sharing a file position.
* Independent Channels:: Dealing with separately opened, unlinked channels.
* Cleaning Streams:: Cleaning a stream makes it safe to use
another channel.

File: libc.info, Node: Linked Channels, Next: Independent Channels, Up: Stream/Descriptor Precautions
13.5.1 Linked Channels
----------------------
Channels that come from a single opening share the same file position;
we call them "linked" channels. Linked channels result when you make a
stream from a descriptor using 'fdopen', when you get a descriptor from
a stream with 'fileno', when you copy a descriptor with 'dup' or 'dup2',
and when descriptors are inherited during 'fork'. For files that don't
support random access, such as terminals and pipes, _all_ channels are
effectively linked. On random-access files, all append-type output
streams are effectively linked to each other.
If you have been using a stream for I/O (or have just opened the
stream), and you want to do I/O using another channel (either a stream
or a descriptor) that is linked to it, you must first "clean up" the
stream that you have been using. *Note Cleaning Streams::.
Terminating a process, or executing a new program in the process,
destroys all the streams in the process. If descriptors linked to these
streams persist in other processes, their file positions become
undefined as a result. To prevent this, you must clean up the streams
before destroying them.

File: libc.info, Node: Independent Channels, Next: Cleaning Streams, Prev: Linked Channels, Up: Stream/Descriptor Precautions
13.5.2 Independent Channels
---------------------------
When you open channels (streams or descriptors) separately on a seekable
file, each channel has its own file position. These are called
"independent channels".
The system handles each channel independently. Most of the time,
this is quite predictable and natural (especially for input): each
channel can read or write sequentially at its own place in the file.
However, if some of the channels are streams, you must take these
precautions:
* You should clean an output stream after use, before doing anything
else that might read or write from the same part of the file.
* You should clean an input stream before reading data that may have
been modified using an independent channel. Otherwise, you might
read obsolete data that had been in the stream's buffer.
If you do output to one channel at the end of the file, this will
certainly leave the other independent channels positioned somewhere
before the new end. You cannot reliably set their file positions to the
new end of file before writing, because the file can always be extended
by another process between when you set the file position and when you
write the data. Instead, use an append-type descriptor or stream; they
always output at the current end of the file. In order to make the
end-of-file position accurate, you must clean the output channel you
were using, if it is a stream.
It's impossible for two channels to have separate file pointers for a
file that doesn't support random access. Thus, channels for reading or
writing such files are always linked, never independent. Append-type
channels are also always linked. For these channels, follow the rules
for linked channels; see *note Linked Channels::.

File: libc.info, Node: Cleaning Streams, Prev: Independent Channels, Up: Stream/Descriptor Precautions
13.5.3 Cleaning Streams
-----------------------
You can use 'fflush' to clean a stream in most cases.
You can skip the 'fflush' if you know the stream is already clean. A
stream is clean whenever its buffer is empty. For example, an
unbuffered stream is always clean. An input stream that is at
end-of-file is clean. A line-buffered stream is clean when the last
character output was a newline. However, a just-opened input stream
might not be clean, as its input buffer might not be empty.
There is one case in which cleaning a stream is impossible on most
systems. This is when the stream is doing input from a file that is not
random-access. Such streams typically read ahead, and when the file is
not random access, there is no way to give back the excess data already
read. When an input stream reads from a random-access file, 'fflush'
does clean the stream, but leaves the file pointer at an unpredictable
place; you must set the file pointer before doing any further I/O.
Closing an output-only stream also does 'fflush', so this is a valid
way of cleaning an output stream.
You need not clean a stream before using its descriptor for control
operations such as setting terminal modes; these operations don't affect
the file position and are not affected by it. You can use any
descriptor for these operations, and all channels are affected
simultaneously. However, text already "output" to a stream but still
buffered by the stream will be subject to the new terminal modes when
subsequently flushed. To make sure "past" output is covered by the
terminal settings that were in effect at the time, flush the output
streams for that terminal before setting the modes. *Note Terminal
Modes::.

File: libc.info, Node: Scatter-Gather, Next: Memory-mapped I/O, Prev: Stream/Descriptor Precautions, Up: Low-Level I/O
13.6 Fast Scatter-Gather I/O
============================
Some applications may need to read or write data to multiple buffers,
which are separated in memory. Although this can be done easily enough
with multiple calls to 'read' and 'write', it is inefficient because
there is overhead associated with each kernel call.
Instead, many platforms provide special high-speed primitives to
perform these "scatter-gather" operations in a single kernel call. The
GNU C Library will provide an emulation on any system that lacks these
primitives, so they are not a portability threat. They are defined in
'sys/uio.h'.
These functions are controlled with arrays of 'iovec' structures,
which describe the location and size of each buffer.
-- Data Type: struct iovec
The 'iovec' structure describes a buffer. It contains two fields:
'void *iov_base'
Contains the address of a buffer.
'size_t iov_len'
Contains the length of the buffer.
-- Function: ssize_t readv (int FILEDES, const struct iovec *VECTOR,
int COUNT)
Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
POSIX Safety Concepts::.
The 'readv' function reads data from FILEDES and scatters it into
the buffers described in VECTOR, which is taken to be COUNT
structures long. As each buffer is filled, data is sent to the
next.
Note that 'readv' is not guaranteed to fill all the buffers. It
may stop at any point, for the same reasons 'read' would.
The return value is a count of bytes (_not_ buffers) read, 0
indicating end-of-file, or -1 indicating an error. The possible
errors are the same as in 'read'.
-- Function: ssize_t writev (int FILEDES, const struct iovec *VECTOR,
int COUNT)
Preliminary: | MT-Safe | AS-Unsafe heap | AC-Unsafe mem | *Note
POSIX Safety Concepts::.
The 'writev' function gathers data from the buffers described in
VECTOR, which is taken to be COUNT structures long, and writes them
to 'filedes'. As each buffer is written, it moves on to the next.
Like 'readv', 'writev' may stop midstream under the same conditions
'write' would.
The return value is a count of bytes written, or -1 indicating an
error. The possible errors are the same as in 'write'.
Note that if the buffers are small (under about 1kB), high-level
streams may be easier to use than these functions. However, 'readv' and
'writev' are more efficient when the individual buffers themselves (as
opposed to the total output), are large. In that case, a high-level
stream would not be able to cache the data effectively.

File: libc.info, Node: Memory-mapped I/O, Next: Waiting for I/O, Prev: Scatter-Gather, Up: Low-Level I/O
13.7 Memory-mapped I/O
======================
On modern operating systems, it is possible to "mmap" (pronounced
"em-map") a file to a region of memory. When this is done, the file can
be accessed just like an array in the program.
This is more efficient than 'read' or 'write', as only the regions of
the file that a program actually accesses are loaded. Accesses to
not-yet-loaded parts of the mmapped region are handled in the same way
as swapped out pages.
Since mmapped pages can be stored back to their file when physical
memory is low, it is possible to mmap files orders of magnitude larger
than both the physical memory _and_ swap space. The only limit is
address space. The theoretical limit is 4GB on a 32-bit machine -
however, the actual limit will be smaller since some areas will be
reserved for other purposes. If the LFS interface is used the file size
on 32-bit systems is not limited to 2GB (offsets are signed which
reduces the addressable area of 4GB by half); the full 64-bit are
available.
Memory mapping only works on entire pages of memory. Thus, addresses
for mapping must be page-aligned, and length values will be rounded up.
To determine the size of a page the machine uses one should use
size_t page_size = (size_t) sysconf (_SC_PAGESIZE);
These functions are declared in 'sys/mman.h'.
-- Function: void * mmap (void *ADDRESS, size_t LENGTH, int PROTECT,
int FLAGS, int FILEDES, off_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'mmap' function creates a new mapping, connected to bytes
(OFFSET) to (OFFSET + LENGTH - 1) in the file open on FILEDES. A
new reference for the file specified by FILEDES is created, which
is not removed by closing the file.
ADDRESS gives a preferred starting address for the mapping. 'NULL'
expresses no preference. Any previous mapping at that address is
automatically removed. The address you give may still be changed,
unless you use the 'MAP_FIXED' flag.
PROTECT contains flags that control what kind of access is
permitted. They include 'PROT_READ', 'PROT_WRITE', and
'PROT_EXEC', which permit reading, writing, and execution,
respectively. Inappropriate access will cause a segfault (*note
Program Error Signals::).
Note that most hardware designs cannot support write permission
without read permission, and many do not distinguish read and
execute permission. Thus, you may receive wider permissions than
you ask for, and mappings of write-only files may be denied even if
you do not use 'PROT_READ'.
FLAGS contains flags that control the nature of the map. One of
'MAP_SHARED' or 'MAP_PRIVATE' must be specified.
They include:
'MAP_PRIVATE'
This specifies that writes to the region should never be
written back to the attached file. Instead, a copy is made
for the process, and the region will be swapped normally if
memory runs low. No other process will see the changes.
Since private mappings effectively revert to ordinary memory
when written to, you must have enough virtual memory for a
copy of the entire mmapped region if you use this mode with
'PROT_WRITE'.
'MAP_SHARED'
This specifies that writes to the region will be written back
to the file. Changes made will be shared immediately with
other processes mmaping the same file.
Note that actual writing may take place at any time. You need
to use 'msync', described below, if it is important that other
processes using conventional I/O get a consistent view of the
file.
'MAP_FIXED'
This forces the system to use the exact mapping address
specified in ADDRESS and fail if it can't.
'MAP_ANONYMOUS'
'MAP_ANON'
This flag tells the system to create an anonymous mapping, not
connected to a file. FILEDES and OFF are ignored, and the
region is initialized with zeros.
Anonymous maps are used as the basic primitive to extend the
heap on some systems. They are also useful to share data
between multiple tasks without creating a file.
On some systems using private anonymous mmaps is more
efficient than using 'malloc' for large blocks. This is not
an issue with the GNU C Library, as the included 'malloc'
automatically uses 'mmap' where appropriate.
'mmap' returns the address of the new mapping, or 'MAP_FAILED' for
an error.
Possible errors include:
'EINVAL'
Either ADDRESS was unusable, or inconsistent FLAGS were given.
'EACCES'
FILEDES was not open for the type of access specified in
PROTECT.
'ENOMEM'
Either there is not enough memory for the operation, or the
process is out of address space.
'ENODEV'
This file is of a type that doesn't support mapping.
'ENOEXEC'
The file is on a filesystem that doesn't support mapping.
-- Function: void * mmap64 (void *ADDRESS, size_t LENGTH, int PROTECT,
int FLAGS, int FILEDES, off64_t OFFSET)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
The 'mmap64' function is equivalent to the 'mmap' function but the
OFFSET parameter is of type 'off64_t'. On 32-bit systems this
allows the file associated with the FILEDES descriptor to be larger
than 2GB. FILEDES must be a descriptor returned from a call to
'open64' or 'fopen64' and 'freopen64' where the descriptor is
retrieved with 'fileno'.
When the sources are translated with '_FILE_OFFSET_BITS == 64' this
function is actually available under the name 'mmap'. I.e., the
new, extended API using 64 bit file sizes and offsets transparently
replaces the old API.
-- Function: int munmap (void *ADDR, size_t LENGTH)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
'munmap' removes any memory maps from (ADDR) to (ADDR + LENGTH).
LENGTH should be the length of the mapping.
It is safe to unmap multiple mappings in one command, or include
unmapped space in the range. It is also possible to unmap only
part of an existing mapping. However, only entire pages can be
removed. If LENGTH is not an even number of pages, it will be
rounded up.
It returns 0 for success and -1 for an error.
One error is possible:
'EINVAL'
The memory range given was outside the user mmap range or
wasn't page aligned.
-- Function: int msync (void *ADDRESS, size_t LENGTH, int FLAGS)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
When using shared mappings, the kernel can write the file at any
time before the mapping is removed. To be certain data has
actually been written to the file and will be accessible to
non-memory-mapped I/O, it is necessary to use this function.
It operates on the region ADDRESS to (ADDRESS + LENGTH). It may be
used on part of a mapping or multiple mappings, however the region
given should not contain any unmapped space.
FLAGS can contain some options:
'MS_SYNC'
This flag makes sure the data is actually written _to disk_.
Normally 'msync' only makes sure that accesses to a file with
conventional I/O reflect the recent changes.
'MS_ASYNC'
This tells 'msync' to begin the synchronization, but not to
wait for it to complete.
'msync' returns 0 for success and -1 for error. Errors include:
'EINVAL'
An invalid region was given, or the FLAGS were invalid.
'EFAULT'
There is no existing mapping in at least part of the given
region.
-- Function: void * mremap (void *ADDRESS, size_t LENGTH, size_t
NEW_LENGTH, int FLAG)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function can be used to change the size of an existing memory
area. ADDRESS and LENGTH must cover a region entirely mapped in
the same 'mmap' statement. A new mapping with the same
characteristics will be returned with the length NEW_LENGTH.
One option is possible, 'MREMAP_MAYMOVE'. If it is given in FLAGS,
the system may remove the existing mapping and create a new one of
the desired length in another location.
The address of the resulting mapping is returned, or -1. Possible
error codes include:
'EFAULT'
There is no existing mapping in at least part of the original
region, or the region covers two or more distinct mappings.
'EINVAL'
The address given is misaligned or inappropriate.
'EAGAIN'
The region has pages locked, and if extended it would exceed
the process's resource limit for locked pages. *Note Limits
on Resources::.
'ENOMEM'
The region is private writable, and insufficient virtual
memory is available to extend it. Also, this error will occur
if 'MREMAP_MAYMOVE' is not given and the extension would
collide with another mapped region.
This function is only available on a few systems. Except for
performing optional optimizations one should not rely on this function.
Not all file descriptors may be mapped. Sockets, pipes, and most
devices only allow sequential access and do not fit into the mapping
abstraction. In addition, some regular files may not be mmapable, and
older kernels may not support mapping at all. Thus, programs using
'mmap' should have a fallback method to use should it fail. *Note
(standards)Mmap::.
-- Function: int madvise (void *ADDR, size_t LENGTH, int ADVICE)
Preliminary: | MT-Safe | AS-Safe | AC-Safe | *Note POSIX Safety
Concepts::.
This function can be used to provide the system with ADVICE about
the intended usage patterns of the memory region starting at ADDR
and extending LENGTH bytes.
The valid BSD values for ADVICE are:
'MADV_NORMAL'
The region should receive no further special treatment.
'MADV_RANDOM'
The region will be accessed via random page references. The
kernel should page-in the minimal number of pages for each
page fault.
'MADV_SEQUENTIAL'
The region will be accessed via sequential page references.
This may cause the kernel to aggressively read-ahead,
expecting further sequential references after any page fault
within this region.
'MADV_WILLNEED'
The region will be needed. The pages within this region may
be pre-faulted in by the kernel.
'MADV_DONTNEED'
The region is no longer needed. The kernel may free these
pages, causing any changes to the pages to be lost, as well as
swapped out pages to be discarded.
The POSIX names are slightly different, but with the same meanings:
'POSIX_MADV_NORMAL'
This corresponds with BSD's 'MADV_NORMAL'.
'POSIX_MADV_RANDOM'
This corresponds with BSD's 'MADV_RANDOM'.
'POSIX_MADV_SEQUENTIAL'
This corresponds with BSD's 'MADV_SEQUENTIAL'.
'POSIX_MADV_WILLNEED'
This corresponds with BSD's 'MADV_WILLNEED'.
'POSIX_MADV_DONTNEED'
This corresponds with BSD's 'MADV_DONTNEED'.
'madvise' returns 0 for success and -1 for error. Errors include:
'EINVAL'
An invalid region was given, or the ADVICE was invalid.
'EFAULT'
There is no existing mapping in at least part of the given
region.
-- Function: int shm_open (const char *NAME, int OFLAG, mode_t MODE)
Preliminary: | MT-Safe locale | AS-Unsafe init heap lock |
AC-Unsafe lock mem fd | *Note POSIX Safety Concepts::.
This function returns a file descriptor that can be used to
allocate shared memory via mmap. Unrelated processes can use same
NAME to create or open existing shared memory objects.
A NAME argument specifies the shared memory object to be opened.
In the GNU C Library it must be a string smaller than 'NAME_MAX'
bytes starting with an optional slash but containing no other
slashes.
The semantics of OFLAG and MODE arguments is same as in 'open'.
'shm_open' returns the file descriptor on success or -1 on error.
On failure 'errno' is set.
-- Function: int shm_unlink (const char *NAME)
Preliminary: | MT-Safe locale | AS-Unsafe init heap lock |
AC-Unsafe lock mem fd | *Note POSIX Safety Concepts::.
This function is inverse of 'shm_open' and removes the object with
the given NAME previously created by 'shm_open'.
'shm_unlink' returns 0 on success or -1 on error. On failure
'errno' is set.

File: libc.info, Node: Waiting for I/O, Next: Synchronizing I/O, Prev: Memory-mapped I/O, Up: Low-Level I/O
13.8 Waiting for Input or Output
================================
Sometimes a program needs to accept input on multiple input channels
whenever input arrives. For example, some workstations may have devices
such as a digitizing tablet, function button box, or dial box that are
connected via normal asynchronous serial interfaces; good user interface
style requires responding immediately to input on any device. Another
example is a program that acts as a server to several other processes
via pipes or sockets.
You cannot normally use 'read' for this purpose, because this blocks
the program until input is available on one particular file descriptor;
input on other channels won't wake it up. You could set nonblocking
mode and poll each file descriptor in turn, but this is very
inefficient.
A better solution is to use the 'select' function. This blocks the
program until input or output is ready on a specified set of file
descriptors, or until a timer expires, whichever comes first. This
facility is declared in the header file 'sys/types.h'.
In the case of a server socket (*note Listening::), we say that
"input" is available when there are pending connections that could be
accepted (*note Accepting Connections::). 'accept' for server sockets
blocks and interacts with 'select' just as 'read' does for normal input.
The file descriptor sets for the 'select' function are specified as
'fd_set' objects. Here is the description of the data type and some
macros for manipulating these objects.
-- Data Type: fd_set
The 'fd_set' data type represents file descriptor sets for the
'select' function. It is actually a bit array.
-- Macro: int FD_SETSIZE
The value of this macro is the maximum number of file descriptors
that a 'fd_set' object can hold information about. On systems with
a fixed maximum number, 'FD_SETSIZE' is at least that number. On
some systems, including GNU, there is no absolute limit on the