| 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: Non-reentrant String Conversion, Next: Shift State, Prev: Non-reentrant Character Conversion, Up: Non-reentrant Conversion |
| |
| 6.4.2 Non-reentrant Conversion of Strings |
| ----------------------------------------- |
| |
| For convenience the ISO C90 standard also defines functions to convert |
| entire strings instead of single characters. These functions suffer |
| from the same problems as their reentrant counterparts from Amendment 1 |
| to ISO C90; see *note Converting Strings::. |
| |
| -- Function: size_t mbstowcs (wchar_t *WSTRING, const char *STRING, |
| size_t SIZE) |
| Preliminary: | MT-Safe | AS-Unsafe corrupt heap lock dlopen | |
| AC-Unsafe corrupt lock mem fd | *Note POSIX Safety Concepts::. |
| |
| The 'mbstowcs' ("multibyte string to wide character string") |
| function converts the null-terminated string of multibyte |
| characters STRING to an array of wide character codes, storing not |
| more than SIZE wide characters into the array beginning at WSTRING. |
| The terminating null character counts towards the size, so if SIZE |
| is less than the actual number of wide characters resulting from |
| STRING, no terminating null character is stored. |
| |
| The conversion of characters from STRING begins in the initial |
| shift state. |
| |
| If an invalid multibyte character sequence is found, the 'mbstowcs' |
| function returns a value of -1. Otherwise, it returns the number |
| of wide characters stored in the array WSTRING. This number does |
| not include the terminating null character, which is present if the |
| number is less than SIZE. |
| |
| Here is an example showing how to convert a string of multibyte |
| characters, allocating enough space for the result. |
| |
| wchar_t * |
| mbstowcs_alloc (const char *string) |
| { |
| size_t size = strlen (string) + 1; |
| wchar_t *buf = xmalloc (size * sizeof (wchar_t)); |
| |
| size = mbstowcs (buf, string, size); |
| if (size == (size_t) -1) |
| return NULL; |
| buf = xrealloc (buf, (size + 1) * sizeof (wchar_t)); |
| return buf; |
| } |
| |
| -- Function: size_t wcstombs (char *STRING, const wchar_t *WSTRING, |
| size_t SIZE) |
| Preliminary: | MT-Safe | AS-Unsafe corrupt heap lock dlopen | |
| AC-Unsafe corrupt lock mem fd | *Note POSIX Safety Concepts::. |
| |
| The 'wcstombs' ("wide character string to multibyte string") |
| function converts the null-terminated wide character array WSTRING |
| into a string containing multibyte characters, storing not more |
| than SIZE bytes starting at STRING, followed by a terminating null |
| character if there is room. The conversion of characters begins in |
| the initial shift state. |
| |
| The terminating null character counts towards the size, so if SIZE |
| is less than or equal to the number of bytes needed in WSTRING, no |
| terminating null character is stored. |
| |
| If a code that does not correspond to a valid multibyte character |
| is found, the 'wcstombs' function returns a value of -1. |
| Otherwise, the return value is the number of bytes stored in the |
| array STRING. This number does not include the terminating null |
| character, which is present if the number is less than SIZE. |
| |
| |
| File: libc.info, Node: Shift State, Prev: Non-reentrant String Conversion, Up: Non-reentrant Conversion |
| |
| 6.4.3 States in Non-reentrant Functions |
| --------------------------------------- |
| |
| In some multibyte character codes, the _meaning_ of any particular byte |
| sequence is not fixed; it depends on what other sequences have come |
| earlier in the same string. Typically there are just a few sequences |
| that can change the meaning of other sequences; these few are called |
| "shift sequences" and we say that they set the "shift state" for other |
| sequences that follow. |
| |
| To illustrate shift state and shift sequences, suppose we decide that |
| the sequence '0200' (just one byte) enters Japanese mode, in which pairs |
| of bytes in the range from '0240' to '0377' are single characters, while |
| '0201' enters Latin-1 mode, in which single bytes in the range from |
| '0240' to '0377' are characters, and interpreted according to the ISO |
| Latin-1 character set. This is a multibyte code that has two |
| alternative shift states ("Japanese mode" and "Latin-1 mode"), and two |
| shift sequences that specify particular shift states. |
| |
| When the multibyte character code in use has shift states, then |
| 'mblen', 'mbtowc', and 'wctomb' must maintain and update the current |
| shift state as they scan the string. To make this work properly, you |
| must follow these rules: |
| |
| * Before starting to scan a string, call the function with a null |
| pointer for the multibyte character address--for example, 'mblen |
| (NULL, 0)'. This initializes the shift state to its standard |
| initial value. |
| |
| * Scan the string one character at a time, in order. Do not "back |
| up" and rescan characters already scanned, and do not intersperse |
| the processing of different strings. |
| |
| Here is an example of using 'mblen' following these rules: |
| |
| void |
| scan_string (char *s) |
| { |
| int length = strlen (s); |
| |
| /* Initialize shift state. */ |
| mblen (NULL, 0); |
| |
| while (1) |
| { |
| int thischar = mblen (s, length); |
| /* Deal with end of string and invalid characters. */ |
| if (thischar == 0) |
| break; |
| if (thischar == -1) |
| { |
| error ("invalid multibyte character"); |
| break; |
| } |
| /* Advance past this character. */ |
| s += thischar; |
| length -= thischar; |
| } |
| } |
| |
| The functions 'mblen', 'mbtowc' and 'wctomb' are not reentrant when |
| using a multibyte code that uses a shift state. However, no other |
| library functions call these functions, so you don't have to worry that |
| the shift state will be changed mysteriously. |
| |
| |
| File: libc.info, Node: Generic Charset Conversion, Prev: Non-reentrant Conversion, Up: Character Set Handling |
| |
| 6.5 Generic Charset Conversion |
| ============================== |
| |
| The conversion functions mentioned so far in this chapter all had in |
| common that they operate on character sets that are not directly |
| specified by the functions. The multibyte encoding used is specified by |
| the currently selected locale for the 'LC_CTYPE' category. The wide |
| character set is fixed by the implementation (in the case of the GNU C |
| Library it is always UCS-4 encoded ISO 10646. |
| |
| This has of course several problems when it comes to general |
| character conversion: |
| |
| * For every conversion where neither the source nor the destination |
| character set is the character set of the locale for the 'LC_CTYPE' |
| category, one has to change the 'LC_CTYPE' locale using |
| 'setlocale'. |
| |
| Changing the 'LC_CTYPE' locale introduces major problems for the |
| rest of the programs since several more functions (e.g., the |
| character classification functions, *note Classification of |
| Characters::) use the 'LC_CTYPE' category. |
| |
| * Parallel conversions to and from different character sets are not |
| possible since the 'LC_CTYPE' selection is global and shared by all |
| threads. |
| |
| * If neither the source nor the destination character set is the |
| character set used for 'wchar_t' representation, there is at least |
| a two-step process necessary to convert a text using the functions |
| above. One would have to select the source character set as the |
| multibyte encoding, convert the text into a 'wchar_t' text, select |
| the destination character set as the multibyte encoding, and |
| convert the wide character text to the multibyte (= destination) |
| character set. |
| |
| Even if this is possible (which is not guaranteed) it is a very |
| tiring work. Plus it suffers from the other two raised points even |
| more due to the steady changing of the locale. |
| |
| The XPG2 standard defines a completely new set of functions, which |
| has none of these limitations. They are not at all coupled to the |
| selected locales, and they have no constraints on the character sets |
| selected for source and destination. Only the set of available |
| conversions limits them. The standard does not specify that any |
| conversion at all must be available. Such availability is a measure of |
| the quality of the implementation. |
| |
| In the following text first the interface to 'iconv' and then the |
| conversion function, will be described. Comparisons with other |
| implementations will show what obstacles stand in the way of portable |
| applications. Finally, the implementation is described in so far as |
| might interest the advanced user who wants to extend conversion |
| capabilities. |
| |
| * Menu: |
| |
| * Generic Conversion Interface:: Generic Character Set Conversion Interface. |
| * iconv Examples:: A complete 'iconv' example. |
| * Other iconv Implementations:: Some Details about other 'iconv' |
| Implementations. |
| * glibc iconv Implementation:: The 'iconv' Implementation in the GNU C |
| library. |
| |
| |
| File: libc.info, Node: Generic Conversion Interface, Next: iconv Examples, Up: Generic Charset Conversion |
| |
| 6.5.1 Generic Character Set Conversion Interface |
| ------------------------------------------------ |
| |
| This set of functions follows the traditional cycle of using a resource: |
| open-use-close. The interface consists of three functions, each of |
| which implements one step. |
| |
| Before the interfaces are described it is necessary to introduce a |
| data type. Just like other open-use-close interfaces the functions |
| introduced here work using handles and the 'iconv.h' header defines a |
| special type for the handles used. |
| |
| -- Data Type: iconv_t |
| This data type is an abstract type defined in 'iconv.h'. The user |
| must not assume anything about the definition of this type; it must |
| be completely opaque. |
| |
| Objects of this type can get assigned handles for the conversions |
| using the 'iconv' functions. The objects themselves need not be |
| freed, but the conversions for which the handles stand for have to. |
| |
| The first step is the function to create a handle. |
| |
| -- Function: iconv_t iconv_open (const char *TOCODE, const char |
| *FROMCODE) |
| Preliminary: | MT-Safe locale | AS-Unsafe corrupt heap lock dlopen |
| | AC-Unsafe corrupt lock mem fd | *Note POSIX Safety Concepts::. |
| |
| The 'iconv_open' function has to be used before starting a |
| conversion. The two parameters this function takes determine the |
| source and destination character set for the conversion, and if the |
| implementation has the possibility to perform such a conversion, |
| the function returns a handle. |
| |
| If the wanted conversion is not available, the 'iconv_open' |
| function returns '(iconv_t) -1'. In this case the global variable |
| 'errno' can have the following values: |
| |
| 'EMFILE' |
| The process already has 'OPEN_MAX' file descriptors open. |
| 'ENFILE' |
| The system limit of open file is reached. |
| 'ENOMEM' |
| Not enough memory to carry out the operation. |
| 'EINVAL' |
| The conversion from FROMCODE to TOCODE is not supported. |
| |
| It is not possible to use the same descriptor in different threads |
| to perform independent conversions. The data structures associated |
| with the descriptor include information about the conversion state. |
| This must not be messed up by using it in different conversions. |
| |
| An 'iconv' descriptor is like a file descriptor as for every use a |
| new descriptor must be created. The descriptor does not stand for |
| all of the conversions from FROMSET to TOSET. |
| |
| The GNU C Library implementation of 'iconv_open' has one |
| significant extension to other implementations. To ease the |
| extension of the set of available conversions, the implementation |
| allows storing the necessary files with data and code in an |
| arbitrary number of directories. How this extension must be |
| written will be explained below (*note glibc iconv |
| Implementation::). Here it is only important to say that all |
| directories mentioned in the 'GCONV_PATH' environment variable are |
| considered only if they contain a file 'gconv-modules'. These |
| directories need not necessarily be created by the system |
| administrator. In fact, this extension is introduced to help users |
| writing and using their own, new conversions. Of course, this does |
| not work for security reasons in SUID binaries; in this case only |
| the system directory is considered and this normally is |
| 'PREFIX/lib/gconv'. The 'GCONV_PATH' environment variable is |
| examined exactly once at the first call of the 'iconv_open' |
| function. Later modifications of the variable have no effect. |
| |
| The 'iconv_open' function was introduced early in the X/Open |
| Portability Guide, version 2. It is supported by all commercial |
| Unices as it is required for the Unix branding. However, the |
| quality and completeness of the implementation varies widely. The |
| 'iconv_open' function is declared in 'iconv.h'. |
| |
| The 'iconv' implementation can associate large data structure with |
| the handle returned by 'iconv_open'. Therefore, it is crucial to free |
| all the resources once all conversions are carried out and the |
| conversion is not needed anymore. |
| |
| -- Function: int iconv_close (iconv_t CD) |
| Preliminary: | MT-Safe | AS-Unsafe corrupt heap lock dlopen | |
| AC-Unsafe corrupt lock mem | *Note POSIX Safety Concepts::. |
| |
| The 'iconv_close' function frees all resources associated with the |
| handle CD, which must have been returned by a successful call to |
| the 'iconv_open' function. |
| |
| If the function call was successful the return value is 0. |
| Otherwise it is -1 and 'errno' is set appropriately. Defined error |
| are: |
| |
| 'EBADF' |
| The conversion descriptor is invalid. |
| |
| The 'iconv_close' function was introduced together with the rest of |
| the 'iconv' functions in XPG2 and is declared in 'iconv.h'. |
| |
| The standard defines only one actual conversion function. This has, |
| therefore, the most general interface: it allows conversion from one |
| buffer to another. Conversion from a file to a buffer, vice versa, or |
| even file to file can be implemented on top of it. |
| |
| -- Function: size_t iconv (iconv_t CD, char **INBUF, size_t |
| *INBYTESLEFT, char **OUTBUF, size_t *OUTBYTESLEFT) |
| Preliminary: | MT-Safe race:cd | AS-Safe | AC-Unsafe corrupt | |
| *Note POSIX Safety Concepts::. |
| |
| The 'iconv' function converts the text in the input buffer |
| according to the rules associated with the descriptor CD and stores |
| the result in the output buffer. It is possible to call the |
| function for the same text several times in a row since for |
| stateful character sets the necessary state information is kept in |
| the data structures associated with the descriptor. |
| |
| The input buffer is specified by '*INBUF' and it contains |
| '*INBYTESLEFT' bytes. The extra indirection is necessary for |
| communicating the used input back to the caller (see below). It is |
| important to note that the buffer pointer is of type 'char' and the |
| length is measured in bytes even if the input text is encoded in |
| wide characters. |
| |
| The output buffer is specified in a similar way. '*OUTBUF' points |
| to the beginning of the buffer with at least '*OUTBYTESLEFT' bytes |
| room for the result. The buffer pointer again is of type 'char' |
| and the length is measured in bytes. If OUTBUF or '*OUTBUF' is a |
| null pointer, the conversion is performed but no output is |
| available. |
| |
| If INBUF is a null pointer, the 'iconv' function performs the |
| necessary action to put the state of the conversion into the |
| initial state. This is obviously a no-op for non-stateful |
| encodings, but if the encoding has a state, such a function call |
| might put some byte sequences in the output buffer, which perform |
| the necessary state changes. The next call with INBUF not being a |
| null pointer then simply goes on from the initial state. It is |
| important that the programmer never makes any assumption as to |
| whether the conversion has to deal with states. Even if the input |
| and output character sets are not stateful, the implementation |
| might still have to keep states. This is due to the implementation |
| chosen for the GNU C Library as it is described below. Therefore |
| an 'iconv' call to reset the state should always be performed if |
| some protocol requires this for the output text. |
| |
| The conversion stops for one of three reasons. The first is that |
| all characters from the input buffer are converted. This actually |
| can mean two things: either all bytes from the input buffer are |
| consumed or there are some bytes at the end of the buffer that |
| possibly can form a complete character but the input is incomplete. |
| The second reason for a stop is that the output buffer is full. |
| And the third reason is that the input contains invalid characters. |
| |
| In all of these cases the buffer pointers after the last successful |
| conversion, for input and output buffer, are stored in INBUF and |
| OUTBUF, and the available room in each buffer is stored in |
| INBYTESLEFT and OUTBYTESLEFT. |
| |
| Since the character sets selected in the 'iconv_open' call can be |
| almost arbitrary, there can be situations where the input buffer |
| contains valid characters, which have no identical representation |
| in the output character set. The behavior in this situation is |
| undefined. The _current_ behavior of the GNU C Library in this |
| situation is to return with an error immediately. This certainly |
| is not the most desirable solution; therefore, future versions will |
| provide better ones, but they are not yet finished. |
| |
| If all input from the input buffer is successfully converted and |
| stored in the output buffer, the function returns the number of |
| non-reversible conversions performed. In all other cases the |
| return value is '(size_t) -1' and 'errno' is set appropriately. In |
| such cases the value pointed to by INBYTESLEFT is nonzero. |
| |
| 'EILSEQ' |
| The conversion stopped because of an invalid byte sequence in |
| the input. After the call, '*INBUF' points at the first byte |
| of the invalid byte sequence. |
| |
| 'E2BIG' |
| The conversion stopped because it ran out of space in the |
| output buffer. |
| |
| 'EINVAL' |
| The conversion stopped because of an incomplete byte sequence |
| at the end of the input buffer. |
| |
| 'EBADF' |
| The CD argument is invalid. |
| |
| The 'iconv' function was introduced in the XPG2 standard and is |
| declared in the 'iconv.h' header. |
| |
| The definition of the 'iconv' function is quite good overall. It |
| provides quite flexible functionality. The only problems lie in the |
| boundary cases, which are incomplete byte sequences at the end of the |
| input buffer and invalid input. A third problem, which is not really a |
| design problem, is the way conversions are selected. The standard does |
| not say anything about the legitimate names, a minimal set of available |
| conversions. We will see how this negatively impacts other |
| implementations, as demonstrated below. |
| |
| |
| File: libc.info, Node: iconv Examples, Next: Other iconv Implementations, Prev: Generic Conversion Interface, Up: Generic Charset Conversion |
| |
| 6.5.2 A complete 'iconv' example |
| -------------------------------- |
| |
| The example below features a solution for a common problem. Given that |
| one knows the internal encoding used by the system for 'wchar_t' |
| strings, one often is in the position to read text from a file and store |
| it in wide character buffers. One can do this using 'mbsrtowcs', but |
| then we run into the problems discussed above. |
| |
| int |
| file2wcs (int fd, const char *charset, wchar_t *outbuf, size_t avail) |
| { |
| char inbuf[BUFSIZ]; |
| size_t insize = 0; |
| char *wrptr = (char *) outbuf; |
| int result = 0; |
| iconv_t cd; |
| |
| cd = iconv_open ("WCHAR_T", charset); |
| if (cd == (iconv_t) -1) |
| { |
| /* Something went wrong. */ |
| if (errno == EINVAL) |
| error (0, 0, "conversion from '%s' to wchar_t not available", |
| charset); |
| else |
| perror ("iconv_open"); |
| |
| /* Terminate the output string. */ |
| *outbuf = L'\0'; |
| |
| return -1; |
| } |
| |
| while (avail > 0) |
| { |
| size_t nread; |
| size_t nconv; |
| char *inptr = inbuf; |
| |
| /* Read more input. */ |
| nread = read (fd, inbuf + insize, sizeof (inbuf) - insize); |
| if (nread == 0) |
| { |
| /* When we come here the file is completely read. |
| This still could mean there are some unused |
| characters in the 'inbuf'. Put them back. */ |
| if (lseek (fd, -insize, SEEK_CUR) == -1) |
| result = -1; |
| |
| /* Now write out the byte sequence to get into the |
| initial state if this is necessary. */ |
| iconv (cd, NULL, NULL, &wrptr, &avail); |
| |
| break; |
| } |
| insize += nread; |
| |
| /* Do the conversion. */ |
| nconv = iconv (cd, &inptr, &insize, &wrptr, &avail); |
| if (nconv == (size_t) -1) |
| { |
| /* Not everything went right. It might only be |
| an unfinished byte sequence at the end of the |
| buffer. Or it is a real problem. */ |
| if (errno == EINVAL) |
| /* This is harmless. Simply move the unused |
| bytes to the beginning of the buffer so that |
| they can be used in the next round. */ |
| memmove (inbuf, inptr, insize); |
| else |
| { |
| /* It is a real problem. Maybe we ran out of |
| space in the output buffer or we have invalid |
| input. In any case back the file pointer to |
| the position of the last processed byte. */ |
| lseek (fd, -insize, SEEK_CUR); |
| result = -1; |
| break; |
| } |
| } |
| } |
| |
| /* Terminate the output string. */ |
| if (avail >= sizeof (wchar_t)) |
| *((wchar_t *) wrptr) = L'\0'; |
| |
| if (iconv_close (cd) != 0) |
| perror ("iconv_close"); |
| |
| return (wchar_t *) wrptr - outbuf; |
| } |
| |
| This example shows the most important aspects of using the 'iconv' |
| functions. It shows how successive calls to 'iconv' can be used to |
| convert large amounts of text. The user does not have to care about |
| stateful encodings as the functions take care of everything. |
| |
| An interesting point is the case where 'iconv' returns an error and |
| 'errno' is set to 'EINVAL'. This is not really an error in the |
| transformation. It can happen whenever the input character set contains |
| byte sequences of more than one byte for some character and texts are |
| not processed in one piece. In this case there is a chance that a |
| multibyte sequence is cut. The caller can then simply read the |
| remainder of the takes and feed the offending bytes together with new |
| character from the input to 'iconv' and continue the work. The internal |
| state kept in the descriptor is _not_ unspecified after such an event as |
| is the case with the conversion functions from the ISO C standard. |
| |
| The example also shows the problem of using wide character strings |
| with 'iconv'. As explained in the description of the 'iconv' function |
| above, the function always takes a pointer to a 'char' array and the |
| available space is measured in bytes. In the example, the output buffer |
| is a wide character buffer; therefore, we use a local variable WRPTR of |
| type 'char *', which is used in the 'iconv' calls. |
| |
| This looks rather innocent but can lead to problems on platforms that |
| have tight restriction on alignment. Therefore the caller of 'iconv' |
| has to make sure that the pointers passed are suitable for access of |
| characters from the appropriate character set. Since, in the above |
| case, the input parameter to the function is a 'wchar_t' pointer, this |
| is the case (unless the user violates alignment when computing the |
| parameter). But in other situations, especially when writing generic |
| functions where one does not know what type of character set one uses |
| and, therefore, treats text as a sequence of bytes, it might become |
| tricky. |
| |
| |
| File: libc.info, Node: Other iconv Implementations, Next: glibc iconv Implementation, Prev: iconv Examples, Up: Generic Charset Conversion |
| |
| 6.5.3 Some Details about other 'iconv' Implementations |
| ------------------------------------------------------ |
| |
| This is not really the place to discuss the 'iconv' implementation of |
| other systems but it is necessary to know a bit about them to write |
| portable programs. The above mentioned problems with the specification |
| of the 'iconv' functions can lead to portability issues. |
| |
| The first thing to notice is that, due to the large number of |
| character sets in use, it is certainly not practical to encode the |
| conversions directly in the C library. Therefore, the conversion |
| information must come from files outside the C library. This is usually |
| done in one or both of the following ways: |
| |
| * The C library contains a set of generic conversion functions that |
| can read the needed conversion tables and other information from |
| data files. These files get loaded when necessary. |
| |
| This solution is problematic as it requires a great deal of effort |
| to apply to all character sets (potentially an infinite set). The |
| differences in the structure of the different character sets is so |
| large that many different variants of the table-processing |
| functions must be developed. In addition, the generic nature of |
| these functions make them slower than specifically implemented |
| functions. |
| |
| * The C library only contains a framework that can dynamically load |
| object files and execute the conversion functions contained |
| therein. |
| |
| This solution provides much more flexibility. The C library itself |
| contains only very little code and therefore reduces the general |
| memory footprint. Also, with a documented interface between the C |
| library and the loadable modules it is possible for third parties |
| to extend the set of available conversion modules. A drawback of |
| this solution is that dynamic loading must be available. |
| |
| Some implementations in commercial Unices implement a mixture of |
| these possibilities; the majority implement only the second solution. |
| Using loadable modules moves the code out of the library itself and |
| keeps the door open for extensions and improvements, but this design is |
| also limiting on some platforms since not many platforms support dynamic |
| loading in statically linked programs. On platforms without this |
| capability it is therefore not possible to use this interface in |
| statically linked programs. The GNU C Library has, on ELF platforms, no |
| problems with dynamic loading in these situations; therefore, this point |
| is moot. The danger is that one gets acquainted with this situation and |
| forgets about the restrictions on other systems. |
| |
| A second thing to know about other 'iconv' implementations is that |
| the number of available conversions is often very limited. Some |
| implementations provide, in the standard release (not special |
| international or developer releases), at most 100 to 200 conversion |
| possibilities. This does not mean 200 different character sets are |
| supported; for example, conversions from one character set to a set of |
| 10 others might count as 10 conversions. Together with the other |
| direction this makes 20 conversion possibilities used up by one |
| character set. One can imagine the thin coverage these platform |
| provide. Some Unix vendors even provide only a handful of conversions, |
| which renders them useless for almost all uses. |
| |
| This directly leads to a third and probably the most problematic |
| point. The way the 'iconv' conversion functions are implemented on all |
| known Unix systems and the availability of the conversion functions from |
| character set A to B and the conversion from B to C does _not_ imply |
| that the conversion from A to C is available. |
| |
| This might not seem unreasonable and problematic at first, but it is |
| a quite big problem as one will notice shortly after hitting it. To |
| show the problem we assume to write a program that has to convert from A |
| to C. A call like |
| |
| cd = iconv_open ("C", "A"); |
| |
| fails according to the assumption above. But what does the program do |
| now? The conversion is necessary; therefore, simply giving up is not an |
| option. |
| |
| This is a nuisance. The 'iconv' function should take care of this. |
| But how should the program proceed from here on? If it tries to convert |
| to character set B, first the two 'iconv_open' calls |
| |
| cd1 = iconv_open ("B", "A"); |
| |
| and |
| |
| cd2 = iconv_open ("C", "B"); |
| |
| will succeed, but how to find B? |
| |
| Unfortunately, the answer is: there is no general solution. On some |
| systems guessing might help. On those systems most character sets can |
| convert to and from UTF-8 encoded ISO 10646 or Unicode text. Beside |
| this only some very system-specific methods can help. Since the |
| conversion functions come from loadable modules and these modules must |
| be stored somewhere in the filesystem, one _could_ try to find them and |
| determine from the available file which conversions are available and |
| whether there is an indirect route from A to C. |
| |
| This example shows one of the design errors of 'iconv' mentioned |
| above. It should at least be possible to determine the list of |
| available conversion programmatically so that if 'iconv_open' says there |
| is no such conversion, one could make sure this also is true for |
| indirect routes. |
| |
| |
| File: libc.info, Node: glibc iconv Implementation, Prev: Other iconv Implementations, Up: Generic Charset Conversion |
| |
| 6.5.4 The 'iconv' Implementation in the GNU C Library |
| ----------------------------------------------------- |
| |
| After reading about the problems of 'iconv' implementations in the last |
| section it is certainly good to note that the implementation in the GNU |
| C Library has none of the problems mentioned above. What follows is a |
| step-by-step analysis of the points raised above. The evaluation is |
| based on the current state of the development (as of January 1999). The |
| development of the 'iconv' functions is not complete, but basic |
| functionality has solidified. |
| |
| The GNU C Library's 'iconv' implementation uses shared loadable |
| modules to implement the conversions. A very small number of |
| conversions are built into the library itself but these are only rather |
| trivial conversions. |
| |
| All the benefits of loadable modules are available in the GNU C |
| Library implementation. This is especially appealing since the |
| interface is well documented (see below), and it, therefore, is easy to |
| write new conversion modules. The drawback of using loadable objects is |
| not a problem in the GNU C Library, at least on ELF systems. Since the |
| library is able to load shared objects even in statically linked |
| binaries, static linking need not be forbidden in case one wants to use |
| 'iconv'. |
| |
| The second mentioned problem is the number of supported conversions. |
| Currently, the GNU C Library supports more than 150 character sets. The |
| way the implementation is designed the number of supported conversions |
| is greater than 22350 (150 times 149). If any conversion from or to a |
| character set is missing, it can be added easily. |
| |
| Particularly impressive as it may be, this high number is due to the |
| fact that the GNU C Library implementation of 'iconv' does not have the |
| third problem mentioned above (i.e., whenever there is a conversion from |
| a character set A to B and from B to C it is always possible to convert |
| from A to C directly). If the 'iconv_open' returns an error and sets |
| 'errno' to 'EINVAL', there is no known way, directly or indirectly, to |
| perform the wanted conversion. |
| |
| Triangulation is achieved by providing for each character set a |
| conversion from and to UCS-4 encoded ISO 10646. Using ISO 10646 as an |
| intermediate representation it is possible to "triangulate" (i.e., |
| convert with an intermediate representation). |
| |
| There is no inherent requirement to provide a conversion to ISO 10646 |
| for a new character set, and it is also possible to provide other |
| conversions where neither source nor destination character set is |
| ISO 10646. The existing set of conversions is simply meant to cover all |
| conversions that might be of interest. |
| |
| All currently available conversions use the triangulation method |
| above, making conversion run unnecessarily slow. If, for example, |
| somebody often needs the conversion from ISO-2022-JP to EUC-JP, a |
| quicker solution would involve direct conversion between the two |
| character sets, skipping the input to ISO 10646 first. The two |
| character sets of interest are much more similar to each other than to |
| ISO 10646. |
| |
| In such a situation one easily can write a new conversion and provide |
| it as a better alternative. The GNU C Library 'iconv' implementation |
| would automatically use the module implementing the conversion if it is |
| specified to be more efficient. |
| |
| 6.5.4.1 Format of 'gconv-modules' files |
| ....................................... |
| |
| All information about the available conversions comes from a file named |
| 'gconv-modules', which can be found in any of the directories along the |
| 'GCONV_PATH'. The 'gconv-modules' files are line-oriented text files, |
| where each of the lines has one of the following formats: |
| |
| * If the first non-whitespace character is a '#' the line contains |
| only comments and is ignored. |
| |
| * Lines starting with 'alias' define an alias name for a character |
| set. Two more words are expected on the line. The first word |
| defines the alias name, and the second defines the original name of |
| the character set. The effect is that it is possible to use the |
| alias name in the FROMSET or TOSET parameters of 'iconv_open' and |
| achieve the same result as when using the real character set name. |
| |
| This is quite important as a character set has often many different |
| names. There is normally an official name but this need not |
| correspond to the most popular name. Beside this many character |
| sets have special names that are somehow constructed. For example, |
| all character sets specified by the ISO have an alias of the form |
| 'ISO-IR-NNN' where NNN is the registration number. This allows |
| programs that know about the registration number to construct |
| character set names and use them in 'iconv_open' calls. More on |
| the available names and aliases follows below. |
| |
| * Lines starting with 'module' introduce an available conversion |
| module. These lines must contain three or four more words. |
| |
| The first word specifies the source character set, the second word |
| the destination character set of conversion implemented in this |
| module, and the third word is the name of the loadable module. The |
| filename is constructed by appending the usual shared object suffix |
| (normally '.so') and this file is then supposed to be found in the |
| same directory the 'gconv-modules' file is in. The last word on |
| the line, which is optional, is a numeric value representing the |
| cost of the conversion. If this word is missing, a cost of 1 is |
| assumed. The numeric value itself does not matter that much; what |
| counts are the relative values of the sums of costs for all |
| possible conversion paths. Below is a more precise description of |
| the use of the cost value. |
| |
| Returning to the example above where one has written a module to |
| directly convert from ISO-2022-JP to EUC-JP and back. All that has to |
| be done is to put the new module, let its name be ISO2022JP-EUCJP.so, in |
| a directory and add a file 'gconv-modules' with the following content in |
| the same directory: |
| |
| module ISO-2022-JP// EUC-JP// ISO2022JP-EUCJP 1 |
| module EUC-JP// ISO-2022-JP// ISO2022JP-EUCJP 1 |
| |
| To see why this is sufficient, it is necessary to understand how the |
| conversion used by 'iconv' (and described in the descriptor) is |
| selected. The approach to this problem is quite simple. |
| |
| At the first call of the 'iconv_open' function the program reads all |
| available 'gconv-modules' files and builds up two tables: one containing |
| all the known aliases and another that contains the information about |
| the conversions and which shared object implements them. |
| |
| 6.5.4.2 Finding the conversion path in 'iconv' |
| .............................................. |
| |
| The set of available conversions form a directed graph with weighted |
| edges. The weights on the edges are the costs specified in the |
| 'gconv-modules' files. The 'iconv_open' function uses an algorithm |
| suitable for search for the best path in such a graph and so constructs |
| a list of conversions that must be performed in succession to get the |
| transformation from the source to the destination character set. |
| |
| Explaining why the above 'gconv-modules' files allows the 'iconv' |
| implementation to resolve the specific ISO-2022-JP to EUC-JP conversion |
| module instead of the conversion coming with the library itself is |
| straightforward. Since the latter conversion takes two steps (from |
| ISO-2022-JP to ISO 10646 and then from ISO 10646 to EUC-JP), the cost is |
| 1+1 = 2. The above 'gconv-modules' file, however, specifies that the |
| new conversion modules can perform this conversion with only the cost of |
| 1. |
| |
| A mysterious item about the 'gconv-modules' file above (and also the |
| file coming with the GNU C Library) are the names of the character sets |
| specified in the 'module' lines. Why do almost all the names end in |
| '//'? And this is not all: the names can actually be regular |
| expressions. At this point in time this mystery should not be revealed, |
| unless you have the relevant spell-casting materials: ashes from an |
| original DOS 6.2 boot disk burnt in effigy, a crucifix blessed by St. |
| Emacs, assorted herbal roots from Central America, sand from Cebu, etc. |
| Sorry! *The part of the implementation where this is used is not yet |
| finished. For now please simply follow the existing examples. It'll |
| become clearer once it is. -drepper* |
| |
| A last remark about the 'gconv-modules' is about the names not ending |
| with '//'. A character set named 'INTERNAL' is often mentioned. From |
| the discussion above and the chosen name it should have become clear |
| that this is the name for the representation used in the intermediate |
| step of the triangulation. We have said that this is UCS-4 but actually |
| that is not quite right. The UCS-4 specification also includes the |
| specification of the byte ordering used. Since a UCS-4 value consists |
| of four bytes, a stored value is affected by byte ordering. The |
| internal representation is _not_ the same as UCS-4 in case the byte |
| ordering of the processor (or at least the running process) is not the |
| same as the one required for UCS-4. This is done for performance |
| reasons as one does not want to perform unnecessary byte-swapping |
| operations if one is not interested in actually seeing the result in |
| UCS-4. To avoid trouble with endianness, the internal representation |
| consistently is named 'INTERNAL' even on big-endian systems where the |
| representations are identical. |
| |
| 6.5.4.3 'iconv' module data structures |
| ...................................... |
| |
| So far this section has described how modules are located and considered |
| to be used. What remains to be described is the interface of the |
| modules so that one can write new ones. This section describes the |
| interface as it is in use in January 1999. The interface will change a |
| bit in the future but, with luck, only in an upwardly compatible way. |
| |
| The definitions necessary to write new modules are publicly available |
| in the non-standard header 'gconv.h'. The following text, therefore, |
| describes the definitions from this header file. First, however, it is |
| necessary to get an overview. |
| |
| From the perspective of the user of 'iconv' the interface is quite |
| simple: the 'iconv_open' function returns a handle that can be used in |
| calls to 'iconv', and finally the handle is freed with a call to |
| 'iconv_close'. The problem is that the handle has to be able to |
| represent the possibly long sequences of conversion steps and also the |
| state of each conversion since the handle is all that is passed to the |
| 'iconv' function. Therefore, the data structures are really the |
| elements necessary to understanding the implementation. |
| |
| We need two different kinds of data structures. The first describes |
| the conversion and the second describes the state etc. There are really |
| two type definitions like this in 'gconv.h'. |
| |
| -- Data type: struct __gconv_step |
| This data structure describes one conversion a module can perform. |
| For each function in a loaded module with conversion functions |
| there is exactly one object of this type. This object is shared by |
| all users of the conversion (i.e., this object does not contain any |
| information corresponding to an actual conversion; it only |
| describes the conversion itself). |
| |
| 'struct __gconv_loaded_object *__shlib_handle' |
| 'const char *__modname' |
| 'int __counter' |
| All these elements of the structure are used internally in the |
| C library to coordinate loading and unloading the shared. One |
| must not expect any of the other elements to be available or |
| initialized. |
| |
| 'const char *__from_name' |
| 'const char *__to_name' |
| '__from_name' and '__to_name' contain the names of the source |
| and destination character sets. They can be used to identify |
| the actual conversion to be carried out since one module might |
| implement conversions for more than one character set and/or |
| direction. |
| |
| 'gconv_fct __fct' |
| 'gconv_init_fct __init_fct' |
| 'gconv_end_fct __end_fct' |
| These elements contain pointers to the functions in the |
| loadable module. The interface will be explained below. |
| |
| 'int __min_needed_from' |
| 'int __max_needed_from' |
| 'int __min_needed_to' |
| 'int __max_needed_to;' |
| These values have to be supplied in the init function of the |
| module. The '__min_needed_from' value specifies how many |
| bytes a character of the source character set at least needs. |
| The '__max_needed_from' specifies the maximum value that also |
| includes possible shift sequences. |
| |
| The '__min_needed_to' and '__max_needed_to' values serve the |
| same purpose as '__min_needed_from' and '__max_needed_from' |
| but this time for the destination character set. |
| |
| It is crucial that these values be accurate since otherwise |
| the conversion functions will have problems or not work at |
| all. |
| |
| 'int __stateful' |
| This element must also be initialized by the init function. |
| 'int __stateful' is nonzero if the source character set is |
| stateful. Otherwise it is zero. |
| |
| 'void *__data' |
| This element can be used freely by the conversion functions in |
| the module. 'void *__data' can be used to communicate extra |
| information from one call to another. 'void *__data' need not |
| be initialized if not needed at all. If 'void *__data' |
| element is assigned a pointer to dynamically allocated memory |
| (presumably in the init function) it has to be made sure that |
| the end function deallocates the memory. Otherwise the |
| application will leak memory. |
| |
| It is important to be aware that this data structure is shared |
| by all users of this specification conversion and therefore |
| the '__data' element must not contain data specific to one |
| specific use of the conversion function. |
| |
| -- Data type: struct __gconv_step_data |
| This is the data structure that contains the information specific |
| to each use of the conversion functions. |
| |
| 'char *__outbuf' |
| 'char *__outbufend' |
| These elements specify the output buffer for the conversion |
| step. The '__outbuf' element points to the beginning of the |
| buffer, and '__outbufend' points to the byte following the |
| last byte in the buffer. The conversion function must not |
| assume anything about the size of the buffer but it can be |
| safely assumed the there is room for at least one complete |
| character in the output buffer. |
| |
| Once the conversion is finished, if the conversion is the last |
| step, the '__outbuf' element must be modified to point after |
| the last byte written into the buffer to signal how much |
| output is available. If this conversion step is not the last |
| one, the element must not be modified. The '__outbufend' |
| element must not be modified. |
| |
| 'int __is_last' |
| This element is nonzero if this conversion step is the last |
| one. This information is necessary for the recursion. See |
| the description of the conversion function internals below. |
| This element must never be modified. |
| |
| 'int __invocation_counter' |
| The conversion function can use this element to see how many |
| calls of the conversion function already happened. Some |
| character sets require a certain prolog when generating |
| output, and by comparing this value with zero, one can find |
| out whether it is the first call and whether, therefore, the |
| prolog should be emitted. This element must never be |
| modified. |
| |
| 'int __internal_use' |
| This element is another one rarely used but needed in certain |
| situations. It is assigned a nonzero value in case the |
| conversion functions are used to implement 'mbsrtowcs' et.al. |
| (i.e., the function is not used directly through the 'iconv' |
| interface). |
| |
| This sometimes makes a difference as it is expected that the |
| 'iconv' functions are used to translate entire texts while the |
| 'mbsrtowcs' functions are normally used only to convert single |
| strings and might be used multiple times to convert entire |
| texts. |
| |
| But in this situation we would have problem complying with |
| some rules of the character set specification. Some character |
| sets require a prolog, which must appear exactly once for an |
| entire text. If a number of 'mbsrtowcs' calls are used to |
| convert the text, only the first call must add the prolog. |
| However, because there is no communication between the |
| different calls of 'mbsrtowcs', the conversion functions have |
| no possibility to find this out. The situation is different |
| for sequences of 'iconv' calls since the handle allows access |
| to the needed information. |
| |
| The 'int __internal_use' element is mostly used together with |
| '__invocation_counter' as follows: |
| |
| if (!data->__internal_use |
| && data->__invocation_counter == 0) |
| /* Emit prolog. */ |
| ... |
| |
| This element must never be modified. |
| |
| 'mbstate_t *__statep' |
| The '__statep' element points to an object of type 'mbstate_t' |
| (*note Keeping the state::). The conversion of a stateful |
| character set must use the object pointed to by '__statep' to |
| store information about the conversion state. The '__statep' |
| element itself must never be modified. |
| |
| 'mbstate_t __state' |
| This element must _never_ be used directly. It is only part |
| of this structure to have the needed space allocated. |
| |
| 6.5.4.4 'iconv' module interfaces |
| ................................. |
| |
| With the knowledge about the data structures we now can describe the |
| conversion function itself. To understand the interface a bit of |
| knowledge is necessary about the functionality in the C library that |
| loads the objects with the conversions. |
| |
| It is often the case that one conversion is used more than once |
| (i.e., there are several 'iconv_open' calls for the same set of |
| character sets during one program run). The 'mbsrtowcs' et.al. |
| functions in the GNU C Library also use the 'iconv' functionality, which |
| increases the number of uses of the same functions even more. |
| |
| Because of this multiple use of conversions, the modules do not get |
| loaded exclusively for one conversion. Instead a module once loaded can |
| be used by an arbitrary number of 'iconv' or 'mbsrtowcs' calls at the |
| same time. The splitting of the information between conversion- |
| function-specific information and conversion data makes this possible. |
| The last section showed the two data structures used to do this. |
| |
| This is of course also reflected in the interface and semantics of |
| the functions that the modules must provide. There are three functions |
| that must have the following names: |
| |
| 'gconv_init' |
| The 'gconv_init' function initializes the conversion function |
| specific data structure. This very same object is shared by all |
| conversions that use this conversion and, therefore, no state |
| information about the conversion itself must be stored in here. If |
| a module implements more than one conversion, the 'gconv_init' |
| function will be called multiple times. |
| |
| 'gconv_end' |
| The 'gconv_end' function is responsible for freeing all resources |
| allocated by the 'gconv_init' function. If there is nothing to do, |
| this function can be missing. Special care must be taken if the |
| module implements more than one conversion and the 'gconv_init' |
| function does not allocate the same resources for all conversions. |
| |
| 'gconv' |
| This is the actual conversion function. It is called to convert |
| one block of text. It gets passed the conversion step information |
| initialized by 'gconv_init' and the conversion data, specific to |
| this use of the conversion functions. |
| |
| There are three data types defined for the three module interface |
| functions and these define the interface. |
| |
| -- Data type: int (*__gconv_init_fct) (struct __gconv_step *) |
| This specifies the interface of the initialization function of the |
| module. It is called exactly once for each conversion the module |
| implements. |
| |
| As explained in the description of the 'struct __gconv_step' data |
| structure above the initialization function has to initialize parts |
| of it. |
| |
| '__min_needed_from' |
| '__max_needed_from' |
| '__min_needed_to' |
| '__max_needed_to' |
| These elements must be initialized to the exact numbers of the |
| minimum and maximum number of bytes used by one character in |
| the source and destination character sets, respectively. If |
| the characters all have the same size, the minimum and maximum |
| values are the same. |
| |
| '__stateful' |
| This element must be initialized to a nonzero value if the |
| source character set is stateful. Otherwise it must be zero. |
| |
| If the initialization function needs to communicate some |
| information to the conversion function, this communication can |
| happen using the '__data' element of the '__gconv_step' structure. |
| But since this data is shared by all the conversions, it must not |
| be modified by the conversion function. The example below shows |
| how this can be used. |
| |
| #define MIN_NEEDED_FROM 1 |
| #define MAX_NEEDED_FROM 4 |
| #define MIN_NEEDED_TO 4 |
| #define MAX_NEEDED_TO 4 |
| |
| int |
| gconv_init (struct __gconv_step *step) |
| { |
| /* Determine which direction. */ |
| struct iso2022jp_data *new_data; |
| enum direction dir = illegal_dir; |
| enum variant var = illegal_var; |
| int result; |
| |
| if (__strcasecmp (step->__from_name, "ISO-2022-JP//") == 0) |
| { |
| dir = from_iso2022jp; |
| var = iso2022jp; |
| } |
| else if (__strcasecmp (step->__to_name, "ISO-2022-JP//") == 0) |
| { |
| dir = to_iso2022jp; |
| var = iso2022jp; |
| } |
| else if (__strcasecmp (step->__from_name, "ISO-2022-JP-2//") == 0) |
| { |
| dir = from_iso2022jp; |
| var = iso2022jp2; |
| } |
| else if (__strcasecmp (step->__to_name, "ISO-2022-JP-2//") == 0) |
| { |
| dir = to_iso2022jp; |
| var = iso2022jp2; |
| } |
| |
| result = __GCONV_NOCONV; |
| if (dir != illegal_dir) |
| { |
| new_data = (struct iso2022jp_data *) |
| malloc (sizeof (struct iso2022jp_data)); |
| |
| result = __GCONV_NOMEM; |
| if (new_data != NULL) |
| { |
| new_data->dir = dir; |
| new_data->var = var; |
| step->__data = new_data; |
| |
| if (dir == from_iso2022jp) |
| { |
| step->__min_needed_from = MIN_NEEDED_FROM; |
| step->__max_needed_from = MAX_NEEDED_FROM; |
| step->__min_needed_to = MIN_NEEDED_TO; |
| step->__max_needed_to = MAX_NEEDED_TO; |
| } |
| else |
| { |
| step->__min_needed_from = MIN_NEEDED_TO; |
| step->__max_needed_from = MAX_NEEDED_TO; |
| step->__min_needed_to = MIN_NEEDED_FROM; |
| step->__max_needed_to = MAX_NEEDED_FROM + 2; |
| } |
| |
| /* Yes, this is a stateful encoding. */ |
| step->__stateful = 1; |
| |
| result = __GCONV_OK; |
| } |
| } |
| |
| return result; |
| } |
| |
| The function first checks which conversion is wanted. The module |
| from which this function is taken implements four different |
| conversions; which one is selected can be determined by comparing |
| the names. The comparison should always be done without paying |
| attention to the case. |
| |
| Next, a data structure, which contains the necessary information |
| about which conversion is selected, is allocated. The data |
| structure 'struct iso2022jp_data' is locally defined since, outside |
| the module, this data is not used at all. Please note that if all |
| four conversions this modules supports are requested there are four |
| data blocks. |
| |
| One interesting thing is the initialization of the '__min_' and |
| '__max_' elements of the step data object. A single ISO-2022-JP |
| character can consist of one to four bytes. Therefore the |
| 'MIN_NEEDED_FROM' and 'MAX_NEEDED_FROM' macros are defined this |
| way. The output is always the 'INTERNAL' character set (aka UCS-4) |
| and therefore each character consists of exactly four bytes. For |
| the conversion from 'INTERNAL' to ISO-2022-JP we have to take into |
| account that escape sequences might be necessary to switch the |
| character sets. Therefore the '__max_needed_to' element for this |
| direction gets assigned 'MAX_NEEDED_FROM + 2'. This takes into |
| account the two bytes needed for the escape sequences to single the |
| switching. The asymmetry in the maximum values for the two |
| directions can be explained easily: when reading ISO-2022-JP text, |
| escape sequences can be handled alone (i.e., it is not necessary to |
| process a real character since the effect of the escape sequence |
| can be recorded in the state information). The situation is |
| different for the other direction. Since it is in general not |
| known which character comes next, one cannot emit escape sequences |
| to change the state in advance. This means the escape sequences |
| that have to be emitted together with the next character. |
| Therefore one needs more room than only for the character itself. |
| |
| The possible return values of the initialization function are: |
| |
| '__GCONV_OK' |
| The initialization succeeded |
| '__GCONV_NOCONV' |
| The requested conversion is not supported in the module. This |
| can happen if the 'gconv-modules' file has errors. |
| '__GCONV_NOMEM' |
| Memory required to store additional information could not be |
| allocated. |
| |
| The function called before the module is unloaded is significantly |
| easier. It often has nothing at all to do; in which case it can be left |
| out completely. |
| |
| -- Data type: void (*__gconv_end_fct) (struct gconv_step *) |
| The task of this function is to free all resources allocated in the |
| initialization function. Therefore only the '__data' element of |
| the object pointed to by the argument is of interest. Continuing |
| the example from the initialization function, the finalization |
| function looks like this: |
| |
| void |
| gconv_end (struct __gconv_step *data) |
| { |
| free (data->__data); |
| } |
| |
| The most important function is the conversion function itself, which |
| can get quite complicated for complex character sets. But since this is |
| not of interest here, we will only describe a possible skeleton for the |
| conversion function. |
| |
| -- Data type: int (*__gconv_fct) (struct __gconv_step *, struct |
| __gconv_step_data *, const char **, const char *, size_t *, |
| int) |
| The conversion function can be called for two basic reason: to |
| convert text or to reset the state. From the description of the |
| 'iconv' function it can be seen why the flushing mode is necessary. |
| What mode is selected is determined by the sixth argument, an |
| integer. This argument being nonzero means that flushing is |
| selected. |
| |
| Common to both modes is where the output buffer can be found. The |
| information about this buffer is stored in the conversion step |
| data. A pointer to this information is passed as the second |
| argument to this function. The description of the 'struct |
| __gconv_step_data' structure has more information on the conversion |
| step data. |
| |
| What has to be done for flushing depends on the source character |
| set. If the source character set is not stateful, nothing has to |
| be done. Otherwise the function has to emit a byte sequence to |
| bring the state object into the initial state. Once this all |
| happened the other conversion modules in the chain of conversions |
| have to get the same chance. Whether another step follows can be |
| determined from the '__is_last' element of the step data structure |
| to which the first parameter points. |
| |
| The more interesting mode is when actual text has to be converted. |
| The first step in this case is to convert as much text as possible |
| from the input buffer and store the result in the output buffer. |
| The start of the input buffer is determined by the third argument, |
| which is a pointer to a pointer variable referencing the beginning |
| of the buffer. The fourth argument is a pointer to the byte right |
| after the last byte in the buffer. |
| |
| The conversion has to be performed according to the current state |
| if the character set is stateful. The state is stored in an object |
| pointed to by the '__statep' element of the step data (second |
| argument). Once either the input buffer is empty or the output |
| buffer is full the conversion stops. At this point, the pointer |
| variable referenced by the third parameter must point to the byte |
| following the last processed byte (i.e., if all of the input is |
| consumed, this pointer and the fourth parameter have the same |
| value). |
| |
| What now happens depends on whether this step is the last one. If |
| it is the last step, the only thing that has to be done is to |
| update the '__outbuf' element of the step data structure to point |
| after the last written byte. This update gives the caller the |
| information on how much text is available in the output buffer. In |
| addition, the variable pointed to by the fifth parameter, which is |
| of type 'size_t', must be incremented by the number of characters |
| (_not bytes_) that were converted in a non-reversible way. Then, |
| the function can return. |
| |
| In case the step is not the last one, the later conversion |
| functions have to get a chance to do their work. Therefore, the |
| appropriate conversion function has to be called. The information |
| about the functions is stored in the conversion data structures, |
| passed as the first parameter. This information and the step data |
| are stored in arrays, so the next element in both cases can be |
| found by simple pointer arithmetic: |
| |
| int |
| gconv (struct __gconv_step *step, struct __gconv_step_data *data, |
| const char **inbuf, const char *inbufend, size_t *written, |
| int do_flush) |
| { |
| struct __gconv_step *next_step = step + 1; |
| struct __gconv_step_data *next_data = data + 1; |
| ... |
| |
| The 'next_step' pointer references the next step information and |
| 'next_data' the next data record. The call of the next function |
| therefore will look similar to this: |
| |
| next_step->__fct (next_step, next_data, &outerr, outbuf, |
| written, 0) |
| |
| But this is not yet all. Once the function call returns the |
| conversion function might have some more to do. If the return |
| value of the function is '__GCONV_EMPTY_INPUT', more room is |
| available in the output buffer. Unless the input buffer is empty |
| the conversion, functions start all over again and process the rest |
| of the input buffer. If the return value is not |
| '__GCONV_EMPTY_INPUT', something went wrong and we have to recover |
| from this. |
| |
| A requirement for the conversion function is that the input buffer |
| pointer (the third argument) always point to the last character |
| that was put in converted form into the output buffer. This is |
| trivially true after the conversion performed in the current step, |
| but if the conversion functions deeper downstream stop prematurely, |
| not all characters from the output buffer are consumed and, |
| therefore, the input buffer pointers must be backed off to the |
| right position. |
| |
| Correcting the input buffers is easy to do if the input and output |
| character sets have a fixed width for all characters. In this |
| situation we can compute how many characters are left in the output |
| buffer and, therefore, can correct the input buffer pointer |
| appropriately with a similar computation. Things are getting |
| tricky if either character set has characters represented with |
| variable length byte sequences, and it gets even more complicated |
| if the conversion has to take care of the state. In these cases |
| the conversion has to be performed once again, from the known state |
| before the initial conversion (i.e., if necessary the state of the |
| conversion has to be reset and the conversion loop has to be |
| executed again). The difference now is that it is known how much |
| input must be created, and the conversion can stop before |
| converting the first unused character. Once this is done the input |
| buffer pointers must be updated again and the function can return. |
| |
| One final thing should be mentioned. If it is necessary for the |
| conversion to know whether it is the first invocation (in case a |
| prolog has to be emitted), the conversion function should increment |
| the '__invocation_counter' element of the step data structure just |
| before returning to the caller. See the description of the 'struct |
| __gconv_step_data' structure above for more information on how this |
| can be used. |
| |
| The return value must be one of the following values: |
| |
| '__GCONV_EMPTY_INPUT' |
| All input was consumed and there is room left in the output |
| buffer. |
| '__GCONV_FULL_OUTPUT' |
| No more room in the output buffer. In case this is not the |
| last step this value is propagated down from the call of the |
| next conversion function in the chain. |
| '__GCONV_INCOMPLETE_INPUT' |
| The input buffer is not entirely empty since it contains an |
| incomplete character sequence. |
| |
| The following example provides a framework for a conversion |
| function. In case a new conversion has to be written the holes in |
| this implementation have to be filled and that is it. |
| |
| int |
| gconv (struct __gconv_step *step, struct __gconv_step_data *data, |
| const char **inbuf, const char *inbufend, size_t *written, |
| int do_flush) |
| { |
| struct __gconv_step *next_step = step + 1; |
| struct __gconv_step_data *next_data = data + 1; |
| gconv_fct fct = next_step->__fct; |
| int status; |
| |
| /* If the function is called with no input this means we have |
| to reset to the initial state. The possibly partly |
| converted input is dropped. */ |
| if (do_flush) |
| { |
| status = __GCONV_OK; |
| |
| /* Possible emit a byte sequence which put the state object |
| into the initial state. */ |
| |
| /* Call the steps down the chain if there are any but only |
| if we successfully emitted the escape sequence. */ |
| if (status == __GCONV_OK && ! data->__is_last) |
| status = fct (next_step, next_data, NULL, NULL, |
| written, 1); |
| } |
| else |
| { |
| /* We preserve the initial values of the pointer variables. */ |
| const char *inptr = *inbuf; |
| char *outbuf = data->__outbuf; |
| char *outend = data->__outbufend; |
| char *outptr; |
| |
| do |
| { |
| /* Remember the start value for this round. */ |
| inptr = *inbuf; |
| /* The outbuf buffer is empty. */ |
| outptr = outbuf; |
| |
| /* For stateful encodings the state must be safe here. */ |
| |
| /* Run the conversion loop. 'status' is set |
| appropriately afterwards. */ |
| |
| /* If this is the last step, leave the loop. There is |
| nothing we can do. */ |
| if (data->__is_last) |
| { |
| /* Store information about how many bytes are |
| available. */ |
| data->__outbuf = outbuf; |
| |
| /* If any non-reversible conversions were performed, |
| add the number to '*written'. */ |
| |
| break; |
| } |
| |
| /* Write out all output that was produced. */ |
| if (outbuf > outptr) |
| { |
| const char *outerr = data->__outbuf; |
| int result; |
| |
| result = fct (next_step, next_data, &outerr, |
| outbuf, written, 0); |
| |
| if (result != __GCONV_EMPTY_INPUT) |
| { |
| if (outerr != outbuf) |
| { |
| /* Reset the input buffer pointer. We |
| document here the complex case. */ |
| size_t nstatus; |
| |
| /* Reload the pointers. */ |
| *inbuf = inptr; |
| outbuf = outptr; |
| |
| /* Possibly reset the state. */ |
| |
| /* Redo the conversion, but this time |
| the end of the output buffer is at |
| 'outerr'. */ |
| } |
| |
| /* Change the status. */ |
| status = result; |
| } |
| else |
| /* All the output is consumed, we can make |
| another run if everything was ok. */ |
| if (status == __GCONV_FULL_OUTPUT) |
| status = __GCONV_OK; |
| } |
| } |
| while (status == __GCONV_OK); |
| |
| /* We finished one use of this step. */ |
| ++data->__invocation_counter; |
| } |
| |
| return status; |
| } |
| |
| This information should be sufficient to write new modules. Anybody |
| doing so should also take a look at the available source code in the GNU |
| C Library sources. It contains many examples of working and optimized |
| modules. |
| |
| |
| File: libc.info, Node: Locales, Next: Message Translation, Prev: Character Set Handling, Up: Top |
| |
| 7 Locales and Internationalization |
| ********************************** |
| |
| Different countries and cultures have varying conventions for how to |
| communicate. These conventions range from very simple ones, such as the |
| format for representing dates and times, to very complex ones, such as |
| the language spoken. |
| |
| "Internationalization" of software means programming it to be able to |
| adapt to the user's favorite conventions. In ISO C, |
| internationalization works by means of "locales". Each locale specifies |
| a collection of conventions, one convention for each purpose. The user |
| chooses a set of conventions by specifying a locale (via environment |
| variables). |
| |
| All programs inherit the chosen locale as part of their environment. |
| Provided the programs are written to obey the choice of locale, they |
| will follow the conventions preferred by the user. |
| |
| * Menu: |
| |
| * Effects of Locale:: Actions affected by the choice of |
| locale. |
| * Choosing Locale:: How the user specifies a locale. |
| * Locale Categories:: Different purposes for which you can |
| select a locale. |
| * Setting the Locale:: How a program specifies the locale |
| with library functions. |
| * Standard Locales:: Locale names available on all systems. |
| * Locale Information:: How to access the information for the locale. |
| * Formatting Numbers:: A dedicated function to format numbers. |
| * Yes-or-No Questions:: Check a Response against the locale. |
| |
| |
| File: libc.info, Node: Effects of Locale, Next: Choosing Locale, Up: Locales |
| |
| 7.1 What Effects a Locale Has |
| ============================= |
| |
| Each locale specifies conventions for several purposes, including the |
| following: |
| |
| * What multibyte character sequences are valid, and how they are |
| interpreted (*note Character Set Handling::). |
| |
| * Classification of which characters in the local character set are |
| considered alphabetic, and upper- and lower-case conversion |
| conventions (*note Character Handling::). |
| |
| * The collating sequence for the local language and character set |
| (*note Collation Functions::). |
| |
| * Formatting of numbers and currency amounts (*note General |
| Numeric::). |
| |
| * Formatting of dates and times (*note Formatting Calendar Time::). |
| |
| * What language to use for output, including error messages (*note |
| Message Translation::). |
| |
| * What language to use for user answers to yes-or-no questions (*note |
| Yes-or-No Questions::). |
| |
| * What language to use for more complex user input. (The C library |
| doesn't yet help you implement this.) |
| |
| Some aspects of adapting to the specified locale are handled |
| automatically by the library subroutines. For example, all your program |
| needs to do in order to use the collating sequence of the chosen locale |
| is to use 'strcoll' or 'strxfrm' to compare strings. |
| |
| Other aspects of locales are beyond the comprehension of the library. |
| For example, the library can't automatically translate your program's |
| output messages into other languages. The only way you can support |
| output in the user's favorite language is to program this more or less |
| by hand. The C library provides functions to handle translations for |
| multiple languages easily. |
| |
| This chapter discusses the mechanism by which you can modify the |
| current locale. The effects of the current locale on specific library |
| functions are discussed in more detail in the descriptions of those |
| functions. |
| |
| |
| File: libc.info, Node: Choosing Locale, Next: Locale Categories, Prev: Effects of Locale, Up: Locales |
| |
| 7.2 Choosing a Locale |
| ===================== |
| |
| The simplest way for the user to choose a locale is to set the |
| environment variable 'LANG'. This specifies a single locale to use for |
| all purposes. For example, a user could specify a hypothetical locale |
| named 'espana-castellano' to use the standard conventions of most of |
| Spain. |
| |
| The set of locales supported depends on the operating system you are |
| using, and so do their names. We can't make any promises about what |
| locales will exist, except for one standard locale called 'C' or |
| 'POSIX'. Later we will describe how to construct locales. |
| |
| A user also has the option of specifying different locales for |
| different purposes--in effect, choosing a mixture of multiple locales. |
| |
| For example, the user might specify the locale 'espana-castellano' |
| for most purposes, but specify the locale 'usa-english' for currency |
| formatting. This might make sense if the user is a Spanish-speaking |
| American, working in Spanish, but representing monetary amounts in US |
| dollars. |
| |
| Note that both locales 'espana-castellano' and 'usa-english', like |
| all locales, would include conventions for all of the purposes to which |
| locales apply. However, the user can choose to use each locale for a |
| particular subset of those purposes. |
| |
| |
| File: libc.info, Node: Locale Categories, Next: Setting the Locale, Prev: Choosing Locale, Up: Locales |
| |
| 7.3 Categories of Activities that Locales Affect |
| ================================================ |
| |
| The purposes that locales serve are grouped into "categories", so that a |
| user or a program can choose the locale for each category independently. |
| Here is a table of categories; each name is both an environment variable |
| that a user can set, and a macro name that you can use as an argument to |
| 'setlocale'. |
| |
| 'LC_COLLATE' |
| This category applies to collation of strings (functions 'strcoll' |
| and 'strxfrm'); see *note Collation Functions::. |
| |
| 'LC_CTYPE' |
| This category applies to classification and conversion of |
| characters, and to multibyte and wide characters; see *note |
| Character Handling::, and *note Character Set Handling::. |
| |
| 'LC_MONETARY' |
| This category applies to formatting monetary values; see *note |
| General Numeric::. |
| |
| 'LC_NUMERIC' |
| This category applies to formatting numeric values that are not |
| monetary; see *note General Numeric::. |
| |
| 'LC_TIME' |
| This category applies to formatting date and time values; see *note |
| Formatting Calendar Time::. |
| |
| 'LC_MESSAGES' |
| This category applies to selecting the language used in the user |
| interface for message translation (*note The Uniforum approach::; |
| *note Message catalogs a la X/Open::) and contains regular |
| expressions for affirmative and negative responses. |
| |
| 'LC_ALL' |
| This is not an environment variable; it is only a macro that you |
| can use with 'setlocale' to set a single locale for all purposes. |
| Setting this environment variable overwrites all selections by the |
| other 'LC_*' variables or 'LANG'. |
| |
| 'LANG' |
| If this environment variable is defined, its value specifies the |
| locale to use for all purposes except as overridden by the |
| variables above. |
| |
| When developing the message translation functions it was felt that |
| the functionality provided by the variables above is not sufficient. |
| For example, it should be possible to specify more than one locale name. |
| Take a Swedish user who better speaks German than English, and a program |
| whose messages are output in English by default. It should be possible |
| to specify that the first choice of language is Swedish, the second |
| German, and if this also fails to use English. This is possible with |
| the variable 'LANGUAGE'. For further description of this GNU extension |
| see *note Using gettextized software::. |
| |
| |
| File: libc.info, Node: Setting the Locale, Next: Standard Locales, Prev: Locale Categories, Up: Locales |
| |
| 7.4 How Programs Set the Locale |
| =============================== |
| |
| A C program inherits its locale environment variables when it starts up. |
| This happens automatically. However, these variables do not |
| automatically control the locale used by the library functions, because ISO C |
| says that all programs start by default in the standard 'C' locale. To |
| use the locales specified by the environment, you must call 'setlocale'. |
| Call it as follows: |
| |
| setlocale (LC_ALL, ""); |
| |
| to select a locale based on the user choice of the appropriate |
| environment variables. |
| |
| You can also use 'setlocale' to specify a particular locale, for |
| general use or for a specific category. |
| |
| The symbols in this section are defined in the header file |
| 'locale.h'. |
| |
| -- Function: char * setlocale (int CATEGORY, const char *LOCALE) |
| Preliminary: | MT-Unsafe const:locale env | AS-Unsafe init lock |
| heap corrupt | AC-Unsafe init corrupt lock mem fd | *Note POSIX |
| Safety Concepts::. |
| |
| The function 'setlocale' sets the current locale for category |
| CATEGORY to LOCALE. A list of all the locales the system provides |
| can be created by running |
| |
| locale -a |
| |
| If CATEGORY is 'LC_ALL', this specifies the locale for all |
| purposes. The other possible values of CATEGORY specify an single |
| purpose (*note Locale Categories::). |
| |
| You can also use this function to find out the current locale by |
| passing a null pointer as the LOCALE argument. In this case, |
| 'setlocale' returns a string that is the name of the locale |
| currently selected for category CATEGORY. |
| |
| The string returned by 'setlocale' can be overwritten by subsequent |
| calls, so you should make a copy of the string (*note Copying and |
| Concatenation::) if you want to save it past any further calls to |
| 'setlocale'. (The standard library is guaranteed never to call |
| 'setlocale' itself.) |
| |
| You should not modify the string returned by 'setlocale'. It might |
| be the same string that was passed as an argument in a previous |
| call to 'setlocale'. One requirement is that the CATEGORY must be |
| the same in the call the string was returned and the one when the |
| string is passed in as LOCALE parameter. |
| |
| When you read the current locale for category 'LC_ALL', the value |
| encodes the entire combination of selected locales for all |
| categories. In this case, the value is not just a single locale |
| name. In fact, we don't make any promises about what it looks |
| like. But if you specify the same "locale name" with 'LC_ALL' in a |
| subsequent call to 'setlocale', it restores the same combination of |
| locale selections. |
| |
| To be sure you can use the returned string encoding the currently |
| selected locale at a later time, you must make a copy of the |
| string. It is not guaranteed that the returned pointer remains |
| valid over time. |
| |
| When the LOCALE argument is not a null pointer, the string returned |
| by 'setlocale' reflects the newly-modified locale. |
| |
| If you specify an empty string for LOCALE, this means to read the |
| appropriate environment variable and use its value to select the |
| locale for CATEGORY. |
| |
| If a nonempty string is given for LOCALE, then the locale of that |
| name is used if possible. |
| |
| If you specify an invalid locale name, 'setlocale' returns a null |
| pointer and leaves the current locale unchanged. |
| |
| The path used for finding locale data can be set using the 'LOCPATH' |
| environment variable. The default path for finding locale data is |
| system specific. It is computed from the value given as the prefix |
| while configuring the C library. This value normally is '/usr' or '/'. |
| For the former the complete path is: |
| |
| /usr/lib/locale |
| |
| Here is an example showing how you might use 'setlocale' to |
| temporarily switch to a new locale. |
| |
| #include <stddef.h> |
| #include <locale.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| void |
| with_other_locale (char *new_locale, |
| void (*subroutine) (int), |
| int argument) |
| { |
| char *old_locale, *saved_locale; |
| |
| /* Get the name of the current locale. */ |
| old_locale = setlocale (LC_ALL, NULL); |
| |
| /* Copy the name so it won't be clobbered by 'setlocale'. */ |
| saved_locale = strdup (old_locale); |
| if (saved_locale == NULL) |
| fatal ("Out of memory"); |
| |
| /* Now change the locale and do some stuff with it. */ |
| setlocale (LC_ALL, new_locale); |
| (*subroutine) (argument); |
| |
| /* Restore the original locale. */ |
| setlocale (LC_ALL, saved_locale); |
| free (saved_locale); |
| } |
| |
| *Portability Note:* Some ISO C systems may define additional locale |
| categories, and future versions of the library will do so. For |
| portability, assume that any symbol beginning with 'LC_' might be |
| defined in 'locale.h'. |
| |
| |
| File: libc.info, Node: Standard Locales, Next: Locale Information, Prev: Setting the Locale, Up: Locales |
| |
| 7.5 Standard Locales |
| ==================== |
| |
| The only locale names you can count on finding on all operating systems |
| are these three standard ones: |
| |
| '"C"' |
| This is the standard C locale. The attributes and behavior it |
| provides are specified in the ISO C standard. When your program |
| starts up, it initially uses this locale by default. |
| |
| '"POSIX"' |
| This is the standard POSIX locale. Currently, it is an alias for |
| the standard C locale. |
| |
| '""' |
| The empty name says to select a locale based on environment |
| variables. *Note Locale Categories::. |
| |
| Defining and installing named locales is normally a responsibility of |
| the system administrator at your site (or the person who installed the |
| GNU C Library). It is also possible for the user to create private |
| locales. All this will be discussed later when describing the tool to |
| do so. |
| |
| If your program needs to use something other than the 'C' locale, it |
| will be more portable if you use whatever locale the user specifies with |
| the environment, rather than trying to specify some non-standard locale |
| explicitly by name. Remember, different machines might have different |
| sets of locales installed. |
| |
| |
| File: libc.info, Node: Locale Information, Next: Formatting Numbers, Prev: Standard Locales, Up: Locales |
| |
| 7.6 Accessing Locale Information |
| ================================ |
| |
| There are several ways to access locale information. The simplest way |
| is to let the C library itself do the work. Several of the functions in |
| this library implicitly access the locale data, and use what information |
| is provided by the currently selected locale. This is how the locale |
| model is meant to work normally. |
| |
| As an example take the 'strftime' function, which is meant to nicely |
| format date and time information (*note Formatting Calendar Time::). |
| Part of the standard information contained in the 'LC_TIME' category is |
| the names of the months. Instead of requiring the programmer to take |
| care of providing the translations the 'strftime' function does this all |
| by itself. '%A' in the format string is replaced by the appropriate |
| weekday name of the locale currently selected by 'LC_TIME'. This is an |
| easy example, and wherever possible functions do things automatically in |
| this way. |
| |
| But there are quite often situations when there is simply no function |
| to perform the task, or it is simply not possible to do the work |
| automatically. For these cases it is necessary to access the |
| information in the locale directly. To do this the C library provides |
| two functions: 'localeconv' and 'nl_langinfo'. The former is part of ISO C |
| and therefore portable, but has a brain-damaged interface. The second |
| is part of the Unix interface and is portable in as far as the system |
| follows the Unix standards. |
| |
| * Menu: |
| |
| * The Lame Way to Locale Data:: ISO C's 'localeconv'. |
| * The Elegant and Fast Way:: X/Open's 'nl_langinfo'. |
| |
| |
| File: libc.info, Node: The Lame Way to Locale Data, Next: The Elegant and Fast Way, Up: Locale Information |
| |
| 7.6.1 'localeconv': It is portable but ... |
| ------------------------------------------ |
| |
| Together with the 'setlocale' function the ISO C people invented the |
| 'localeconv' function. It is a masterpiece of poor design. It is |
| expensive to use, not extendable, and not generally usable as it |
| provides access to only 'LC_MONETARY' and 'LC_NUMERIC' related |
| information. Nevertheless, if it is applicable to a given situation it |
| should be used since it is very portable. The function 'strfmon' |
| formats monetary amounts according to the selected locale using this |
| information. |
| |
| -- Function: struct lconv * localeconv (void) |
| Preliminary: | MT-Unsafe race:localeconv locale | AS-Unsafe | |
| AC-Safe | *Note POSIX Safety Concepts::. |
| |
| The 'localeconv' function returns a pointer to a structure whose |
| components contain information about how numeric and monetary |
| values should be formatted in the current locale. |
| |
| You should not modify the structure or its contents. The structure |
| might be overwritten by subsequent calls to 'localeconv', or by |
| calls to 'setlocale', but no other function in the library |
| overwrites this value. |
| |
| -- Data Type: struct lconv |
| 'localeconv''s return value is of this data type. Its elements are |
| described in the following subsections. |
| |
| If a member of the structure 'struct lconv' has type 'char', and the |
| value is 'CHAR_MAX', it means that the current locale has no value for |
| that parameter. |
| |
| * Menu: |
| |
| * General Numeric:: Parameters for formatting numbers and |
| currency amounts. |
| * Currency Symbol:: How to print the symbol that identifies an |
| amount of money (e.g. '$'). |
| * Sign of Money Amount:: How to print the (positive or negative) sign |
| for a monetary amount, if one exists. |
| |
| |
| File: libc.info, Node: General Numeric, Next: Currency Symbol, Up: The Lame Way to Locale Data |
| |
| 7.6.1.1 Generic Numeric Formatting Parameters |
| ............................................. |
| |
| These are the standard members of 'struct lconv'; there may be others. |
| |
| 'char *decimal_point' |
| 'char *mon_decimal_point' |
| These are the decimal-point separators used in formatting |
| non-monetary and monetary quantities, respectively. In the 'C' |
| locale, the value of 'decimal_point' is '"."', and the value of |
| 'mon_decimal_point' is '""'. |
| |
| 'char *thousands_sep' |
| 'char *mon_thousands_sep' |
| These are the separators used to delimit groups of digits to the |
| left of the decimal point in formatting non-monetary and monetary |
| quantities, respectively. In the 'C' locale, both members have a |
| value of '""' (the empty string). |
| |
| 'char *grouping' |
| 'char *mon_grouping' |
| These are strings that specify how to group the digits to the left |
| of the decimal point. 'grouping' applies to non-monetary |
| quantities and 'mon_grouping' applies to monetary quantities. Use |
| either 'thousands_sep' or 'mon_thousands_sep' to separate the digit |
| groups. |
| |
| Each member of these strings is to be interpreted as an integer |
| value of type 'char'. Successive numbers (from left to right) give |
| the sizes of successive groups (from right to left, starting at the |
| decimal point.) The last member is either '0', in which case the |
| previous member is used over and over again for all the remaining |
| groups, or 'CHAR_MAX', in which case there is no more grouping--or, |
| put another way, any remaining digits form one large group without |
| separators. |
| |
| For example, if 'grouping' is '"\04\03\02"', the correct grouping |
| for the number '123456787654321' is '12', '34', '56', '78', '765', |
| '4321'. This uses a group of 4 digits at the end, preceded by a |
| group of 3 digits, preceded by groups of 2 digits (as many as |
| needed). With a separator of ',', the number would be printed as |
| '12,34,56,78,765,4321'. |
| |
| A value of '"\03"' indicates repeated groups of three digits, as |
| normally used in the U.S. |
| |
| In the standard 'C' locale, both 'grouping' and 'mon_grouping' have |
| a value of '""'. This value specifies no grouping at all. |
| |
| 'char int_frac_digits' |
| 'char frac_digits' |
| These are small integers indicating how many fractional digits (to |
| the right of the decimal point) should be displayed in a monetary |
| value in international and local formats, respectively. (Most |
| often, both members have the same value.) |
| |
| In the standard 'C' locale, both of these members have the value |
| 'CHAR_MAX', meaning "unspecified". The ISO standard doesn't say |
| what to do when you find this value; we recommend printing no |
| fractional digits. (This locale also specifies the empty string |
| for 'mon_decimal_point', so printing any fractional digits would be |
| confusing!) |
| |
| |
| File: libc.info, Node: Currency Symbol, Next: Sign of Money Amount, Prev: General Numeric, Up: The Lame Way to Locale Data |
| |
| 7.6.1.2 Printing the Currency Symbol |
| .................................... |
| |
| These members of the 'struct lconv' structure specify how to print the |
| symbol to identify a monetary value--the international analog of '$' for |
| US dollars. |
| |
| Each country has two standard currency symbols. The "local currency |
| symbol" is used commonly within the country, while the "international |
| currency symbol" is used internationally to refer to that country's |
| currency when it is necessary to indicate the country unambiguously. |
| |
| For example, many countries use the dollar as their monetary unit, |
| and when dealing with international currencies it's important to specify |
| that one is dealing with (say) Canadian dollars instead of U.S. dollars |
| or Australian dollars. But when the context is known to be Canada, |
| there is no need to make this explicit--dollar amounts are implicitly |
| assumed to be in Canadian dollars. |
| |
| 'char *currency_symbol' |
| The local currency symbol for the selected locale. |
| |
| In the standard 'C' locale, this member has a value of '""' (the |
| empty string), meaning "unspecified". The ISO standard doesn't say |
| what to do when you find this value; we recommend you simply print |
| the empty string as you would print any other string pointed to by |
| this variable. |
| |
| 'char *int_curr_symbol' |
| The international currency symbol for the selected locale. |
| |
| The value of 'int_curr_symbol' should normally consist of a |
| three-letter abbreviation determined by the international standard |
| 'ISO 4217 Codes for the Representation of Currency and Funds', |
| followed by a one-character separator (often a space). |
| |
| In the standard 'C' locale, this member has a value of '""' (the |
| empty string), meaning "unspecified". We recommend you simply |
| print the empty string as you would print any other string pointed |
| to by this variable. |
| |
| 'char p_cs_precedes' |
| 'char n_cs_precedes' |
| 'char int_p_cs_precedes' |
| 'char int_n_cs_precedes' |
| These members are '1' if the 'currency_symbol' or 'int_curr_symbol' |
| strings should precede the value of a monetary amount, or '0' if |
| the strings should follow the value. The 'p_cs_precedes' and |
| 'int_p_cs_precedes' members apply to positive amounts (or zero), |
| and the 'n_cs_precedes' and 'int_n_cs_precedes' members apply to |
| negative amounts. |
| |
| In the standard 'C' locale, all of these members have a value of |
| 'CHAR_MAX', meaning "unspecified". The ISO standard doesn't say |
| what to do when you find this value. We recommend printing the |
| currency symbol before the amount, which is right for most |
| countries. In other words, treat all nonzero values alike in these |
| members. |
| |
| The members with the 'int_' prefix apply to the 'int_curr_symbol' |
| while the other two apply to 'currency_symbol'. |
| |
| 'char p_sep_by_space' |
| 'char n_sep_by_space' |
| 'char int_p_sep_by_space' |
| 'char int_n_sep_by_space' |
| These members are '1' if a space should appear between the |
| 'currency_symbol' or 'int_curr_symbol' strings and the amount, or |
| '0' if no space should appear. The 'p_sep_by_space' and |
| 'int_p_sep_by_space' members apply to positive amounts (or zero), |
| and the 'n_sep_by_space' and 'int_n_sep_by_space' members apply to |
| negative amounts. |
| |
| In the standard 'C' locale, all of these members have a value of |
| 'CHAR_MAX', meaning "unspecified". The ISO standard doesn't say |
| what you should do when you find this value; we suggest you treat |
| it as 1 (print a space). In other words, treat all nonzero values |
| alike in these members. |
| |
| The members with the 'int_' prefix apply to the 'int_curr_symbol' |
| while the other two apply to 'currency_symbol'. There is one |
| specialty with the 'int_curr_symbol', though. Since all legal |
| values contain a space at the end the string one either printf this |
| space (if the currency symbol must appear in front and must be |
| separated) or one has to avoid printing this character at all |
| (especially when at the end of the string). |
| |
| |
| File: libc.info, Node: Sign of Money Amount, Prev: Currency Symbol, Up: The Lame Way to Locale Data |
| |
| 7.6.1.3 Printing the Sign of a Monetary Amount |
| .............................................. |
| |
| These members of the 'struct lconv' structure specify how to print the |
| sign (if any) of a monetary value. |
| |
| 'char *positive_sign' |
| 'char *negative_sign' |
| These are strings used to indicate positive (or zero) and negative |
| monetary quantities, respectively. |
| |
| In the standard 'C' locale, both of these members have a value of |
| '""' (the empty string), meaning "unspecified". |
| |
| The ISO standard doesn't say what to do when you find this value; |
| we recommend printing 'positive_sign' as you find it, even if it is |
| empty. For a negative value, print 'negative_sign' as you find it |
| unless both it and 'positive_sign' are empty, in which case print |
| '-' instead. (Failing to indicate the sign at all seems rather |
| unreasonable.) |
| |
| 'char p_sign_posn' |
| 'char n_sign_posn' |
| 'char int_p_sign_posn' |
| 'char int_n_sign_posn' |
| These members are small integers that indicate how to position the |
| sign for nonnegative and negative monetary quantities, |
| respectively. (The string used by the sign is what was specified |
| with 'positive_sign' or 'negative_sign'.) The possible values are |
| as follows: |
| |
| '0' |
| The currency symbol and quantity should be surrounded by |
| parentheses. |
| |
| '1' |
| Print the sign string before the quantity and currency symbol. |
| |
| '2' |
| Print the sign string after the quantity and currency symbol. |
| |
| '3' |
| Print the sign string right before the currency symbol. |
| |
| '4' |
| Print the sign string right after the currency symbol. |
| |
| 'CHAR_MAX' |
| "Unspecified". Both members have this value in the standard |
| 'C' locale. |
| |
| The ISO standard doesn't say what you should do when the value is |
| 'CHAR_MAX'. We recommend you print the sign after the currency |
| symbol. |
| |
| The members with the 'int_' prefix apply to the 'int_curr_symbol' |
| while the other two apply to 'currency_symbol'. |
| |
| |
| File: libc.info, Node: The Elegant and Fast Way, Prev: The Lame Way to Locale Data, Up: Locale Information |
| |
| 7.6.2 Pinpoint Access to Locale Data |
| ------------------------------------ |
| |
| When writing the X/Open Portability Guide the authors realized that the |
| 'localeconv' function is not enough to provide reasonable access to |
| locale information. The information which was meant to be available in |
| the locale (as later specified in the POSIX.1 standard) requires more |
| ways to access it. Therefore the 'nl_langinfo' function was introduced. |
| |
| -- Function: char * nl_langinfo (nl_item ITEM) |
| Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | *Note POSIX |
| Safety Concepts::. |
| |
| The 'nl_langinfo' function can be used to access individual |
| elements of the locale categories. Unlike the 'localeconv' |
| function, which returns all the information, 'nl_langinfo' lets the |
| caller select what information it requires. This is very fast and |
| it is not a problem to call this function multiple times. |
| |
| A second advantage is that in addition to the numeric and monetary |
| formatting information, information from the 'LC_TIME' and |
| 'LC_MESSAGES' categories is available. |
| |
| The type 'nl_type' is defined in 'nl_types.h'. The argument ITEM |
| is a numeric value defined in the header 'langinfo.h'. The X/Open |
| standard defines the following values: |
| |
| 'CODESET' |
| 'nl_langinfo' returns a string with the name of the coded |
| character set used in the selected locale. |
| |
| 'ABDAY_1' |
| 'ABDAY_2' |
| 'ABDAY_3' |
| 'ABDAY_4' |
| 'ABDAY_5' |
| 'ABDAY_6' |
| 'ABDAY_7' |
| 'nl_langinfo' returns the abbreviated weekday name. 'ABDAY_1' |
| corresponds to Sunday. |
| 'DAY_1' |
| 'DAY_2' |
| 'DAY_3' |
| 'DAY_4' |
| 'DAY_5' |
| 'DAY_6' |
| 'DAY_7' |
| Similar to 'ABDAY_1' etc., but here the return value is the |
| unabbreviated weekday name. |
| 'ABMON_1' |
| 'ABMON_2' |
| 'ABMON_3' |
| 'ABMON_4' |
| 'ABMON_5' |
| 'ABMON_6' |
| 'ABMON_7' |
| 'ABMON_8' |
| 'ABMON_9' |
| 'ABMON_10' |
| 'ABMON_11' |
| 'ABMON_12' |
| The return value is abbreviated name of the month. 'ABMON_1' |
| corresponds to January. |
| 'MON_1' |
| 'MON_2' |
| 'MON_3' |
| 'MON_4' |
| 'MON_5' |
| 'MON_6' |
| 'MON_7' |
| 'MON_8' |
| 'MON_9' |
| 'MON_10' |
| 'MON_11' |
| 'MON_12' |
| Similar to 'ABMON_1' etc., but here the month names are not |
| abbreviated. Here the first value 'MON_1' also corresponds to |
| January. |
| 'AM_STR' |
| 'PM_STR' |
| The return values are strings which can be used in the |
| representation of time as an hour from 1 to 12 plus an am/pm |
| specifier. |
| |
| Note that in locales which do not use this time representation |
| these strings might be empty, in which case the am/pm format |
| cannot be used at all. |
| 'D_T_FMT' |
| The return value can be used as a format string for 'strftime' |
| to represent time and date in a locale-specific way. |
| 'D_FMT' |
| The return value can be used as a format string for 'strftime' |
| to represent a date in a locale-specific way. |
| 'T_FMT' |
| The return value can be used as a format string for 'strftime' |
| to represent time in a locale-specific way. |
| 'T_FMT_AMPM' |
| The return value can be used as a format string for 'strftime' |
| to represent time in the am/pm format. |
| |
| Note that if the am/pm format does not make any sense for the |
| selected locale, the return value might be the same as the one |
| for 'T_FMT'. |
| 'ERA' |
| The return value represents the era used in the current |
| locale. |
| |
| Most locales do not define this value. An example of a locale |
| which does define this value is the Japanese one. In Japan, |
| the traditional representation of dates includes the name of |
| the era corresponding to the then-emperor's reign. |
| |
| Normally it should not be necessary to use this value |
| directly. Specifying the 'E' modifier in their format strings |
| causes the 'strftime' functions to use this information. The |
| format of the returned string is not specified, and therefore |
| you should not assume knowledge of it on different systems. |
| 'ERA_YEAR' |
| The return value gives the year in the relevant era of the |
| locale. As for 'ERA' it should not be necessary to use this |
| value directly. |
| 'ERA_D_T_FMT' |
| This return value can be used as a format string for |
| 'strftime' to represent dates and times in a locale-specific |
| era-based way. |
| 'ERA_D_FMT' |
| This return value can be used as a format string for |
| 'strftime' to represent a date in a locale-specific era-based |
| way. |
| 'ERA_T_FMT' |
| This return value can be used as a format string for |
| 'strftime' to represent time in a locale-specific era-based |
| way. |
| 'ALT_DIGITS' |
| The return value is a representation of up to 100 values used |
| to represent the values 0 to 99. As for 'ERA' this value is |
| not intended to be used directly, but instead indirectly |
| through the 'strftime' function. When the modifier 'O' is |
| used in a format which would otherwise use numerals to |
| represent hours, minutes, seconds, weekdays, months, or weeks, |
| the appropriate value for the locale is used instead. |
| 'INT_CURR_SYMBOL' |
| The same as the value returned by 'localeconv' in the |
| 'int_curr_symbol' element of the 'struct lconv'. |
| 'CURRENCY_SYMBOL' |
| 'CRNCYSTR' |
| The same as the value returned by 'localeconv' in the |
| 'currency_symbol' element of the 'struct lconv'. |
| |
| 'CRNCYSTR' is a deprecated alias still required by Unix98. |
| 'MON_DECIMAL_POINT' |
| The same as the value returned by 'localeconv' in the |
| 'mon_decimal_point' element of the 'struct lconv'. |
| 'MON_THOUSANDS_SEP' |
| The same as the value returned by 'localeconv' in the |
| 'mon_thousands_sep' element of the 'struct lconv'. |
| 'MON_GROUPING' |
| The same as the value returned by 'localeconv' in the |
| 'mon_grouping' element of the 'struct lconv'. |
| 'POSITIVE_SIGN' |
| The same as the value returned by 'localeconv' in the |
| 'positive_sign' element of the 'struct lconv'. |
| 'NEGATIVE_SIGN' |
| The same as the value returned by 'localeconv' in the |
| 'negative_sign' element of the 'struct lconv'. |
| 'INT_FRAC_DIGITS' |
| The same as the value returned by 'localeconv' in the |
| 'int_frac_digits' element of the 'struct lconv'. |
| 'FRAC_DIGITS' |
| The same as the value returned by 'localeconv' in the |
| 'frac_digits' element of the 'struct lconv'. |
| 'P_CS_PRECEDES' |
| The same as the value returned by 'localeconv' in the |
| 'p_cs_precedes' element of the 'struct lconv'. |
| 'P_SEP_BY_SPACE' |
| The same as the value returned by 'localeconv' in the |
| 'p_sep_by_space' element of the 'struct lconv'. |
| 'N_CS_PRECEDES' |
| The same as the value returned by 'localeconv' in the |
| 'n_cs_precedes' element of the 'struct lconv'. |
| 'N_SEP_BY_SPACE' |
| The same as the value returned by 'localeconv' in the |
| 'n_sep_by_space' element of the 'struct lconv'. |
| 'P_SIGN_POSN' |
| The same as the value returned by 'localeconv' in the |
| 'p_sign_posn' element of the 'struct lconv'. |
| 'N_SIGN_POSN' |
| The same as the value returned by 'localeconv' in the |
| 'n_sign_posn' element of the 'struct lconv'. |
| |
| 'INT_P_CS_PRECEDES' |
| The same as the value returned by 'localeconv' in the |
| 'int_p_cs_precedes' element of the 'struct lconv'. |
| 'INT_P_SEP_BY_SPACE' |
| The same as the value returned by 'localeconv' in the |
| 'int_p_sep_by_space' element of the 'struct lconv'. |
| 'INT_N_CS_PRECEDES' |
| The same as the value returned by 'localeconv' in the |
| 'int_n_cs_precedes' element of the 'struct lconv'. |
| 'INT_N_SEP_BY_SPACE' |
| The same as the value returned by 'localeconv' in the |
| 'int_n_sep_by_space' element of the 'struct lconv'. |
| 'INT_P_SIGN_POSN' |
| The same as the value returned by 'localeconv' in the |
| 'int_p_sign_posn' element of the 'struct lconv'. |
| 'INT_N_SIGN_POSN' |
| The same as the value returned by 'localeconv' in the |
| 'int_n_sign_posn' element of the 'struct lconv'. |
| |
| 'DECIMAL_POINT' |
| 'RADIXCHAR' |
| The same as the value returned by 'localeconv' in the |
| 'decimal_point' element of the 'struct lconv'. |
| |
| The name 'RADIXCHAR' is a deprecated alias still used in |
| Unix98. |
| 'THOUSANDS_SEP' |
| 'THOUSEP' |
| The same as the value returned by 'localeconv' in the |
| 'thousands_sep' element of the 'struct lconv'. |
| |
| The name 'THOUSEP' is a deprecated alias still used in Unix98. |
| 'GROUPING' |
| The same as the value returned by 'localeconv' in the |
| 'grouping' element of the 'struct lconv'. |
| 'YESEXPR' |
| The return value is a regular expression which can be used |
| with the 'regex' function to recognize a positive response to |
| a yes/no question. The GNU C Library provides the 'rpmatch' |
| function for easier handling in applications. |
| 'NOEXPR' |
| The return value is a regular expression which can be used |
| with the 'regex' function to recognize a negative response to |
| a yes/no question. |
| 'YESSTR' |
| The return value is a locale-specific translation of the |
| positive response to a yes/no question. |
| |
| Using this value is deprecated since it is a very special case |
| of message translation, and is better handled by the message |
| translation functions (*note Message Translation::). |
| |
| The use of this symbol is deprecated. Instead message |
| translation should be used. |
| 'NOSTR' |
| The return value is a locale-specific translation of the |
| negative response to a yes/no question. What is said for |
| 'YESSTR' is also true here. |
| |
| The use of this symbol is deprecated. Instead message |
| translation should be used. |
| |
| The file 'langinfo.h' defines a lot more symbols but none of them |
| is official. Using them is not portable, and the format of the |
| return values might change. Therefore we recommended you not use |
| them. |
| |
| Note that the return value for any valid argument can be used for |
| in all situations (with the possible exception of the am/pm time |
| formatting codes). If the user has not selected any locale for the |
| appropriate category, 'nl_langinfo' returns the information from |
| the '"C"' locale. It is therefore possible to use this function as |
| shown in the example below. |
| |
| If the argument ITEM is not valid, a pointer to an empty string is |
| returned. |
| |
| An example of 'nl_langinfo' usage is a function which has to print a |
| given date and time in a locale-specific way. At first one might think |
| that, since 'strftime' internally uses the locale information, writing |
| something like the following is enough: |
| |
| size_t |
| i18n_time_n_data (char *s, size_t len, const struct tm *tp) |
| { |
| return strftime (s, len, "%X %D", tp); |
| } |
| |
| The format contains no weekday or month names and therefore is |
| internationally usable. Wrong! The output produced is something like |
| '"hh:mm:ss MM/DD/YY"'. This format is only recognizable in the USA. |
| Other countries use different formats. Therefore the function should be |
| rewritten like this: |
| |
| size_t |
| i18n_time_n_data (char *s, size_t len, const struct tm *tp) |
| { |
| return strftime (s, len, nl_langinfo (D_T_FMT), tp); |
| } |
| |
| Now it uses the date and time format of the locale selected when the |
| program runs. If the user selects the locale correctly there should |
| never be a misunderstanding over the time and date format. |
| |
| |
| File: libc.info, Node: Formatting Numbers, Next: Yes-or-No Questions, Prev: Locale Information, Up: Locales |
| |
| 7.7 A dedicated function to format numbers |
| ========================================== |
| |
| We have seen that the structure returned by 'localeconv' as well as the |
| values given to 'nl_langinfo' allow you to retrieve the various pieces |
| <
|