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