aboutsummaryrefslogtreecommitdiff
path: root/manual/errno.texi
diff options
context:
space:
mode:
Diffstat (limited to 'manual/errno.texi')
-rw-r--r--manual/errno.texi1701
1 files changed, 0 insertions, 1701 deletions
diff --git a/manual/errno.texi b/manual/errno.texi
deleted file mode 100644
index f4c07f0683..0000000000
--- a/manual/errno.texi
+++ /dev/null
@@ -1,1701 +0,0 @@
-@node Error Reporting, Memory, Introduction, Top
-@chapter Error Reporting
-@c %MENU% How library functions report errors
-@cindex error reporting
-@cindex reporting errors
-@cindex error codes
-@cindex status codes
-
-Many functions in @theglibc{} detect and report error conditions,
-and sometimes your programs need to check for these error conditions.
-For example, when you open an input file, you should verify that the
-file was actually opened correctly, and print an error message or take
-other appropriate action if the call to the library function failed.
-
-This chapter describes how the error reporting facility works. Your
-program should include the header file @file{errno.h} to use this
-facility.
-@pindex errno.h
-
-@menu
-* Checking for Errors:: How errors are reported by library functions.
-* Error Codes:: Error code macros; all of these expand
- into integer constant values.
-* Error Messages:: Mapping error codes onto error messages.
-@end menu
-
-@node Checking for Errors, Error Codes, , Error Reporting
-@section Checking for Errors
-
-Most library functions return a special value to indicate that they have
-failed. The special value is typically @code{-1}, a null pointer, or a
-constant such as @code{EOF} that is defined for that purpose. But this
-return value tells you only that an error has occurred. To find out
-what kind of error it was, you need to look at the error code stored in the
-variable @code{errno}. This variable is declared in the header file
-@file{errno.h}.
-@pindex errno.h
-
-@comment errno.h
-@comment ISO
-@deftypevr {Variable} {volatile int} errno
-The variable @code{errno} contains the system error number. You can
-change the value of @code{errno}.
-
-Since @code{errno} is declared @code{volatile}, it might be changed
-asynchronously by a signal handler; see @ref{Defining Handlers}.
-However, a properly written signal handler saves and restores the value
-of @code{errno}, so you generally do not need to worry about this
-possibility except when writing signal handlers.
-
-The initial value of @code{errno} at program startup is zero. Many
-library functions are guaranteed to set it to certain nonzero values
-when they encounter certain kinds of errors. These error conditions are
-listed for each function. These functions do not change @code{errno}
-when they succeed; thus, the value of @code{errno} after a successful
-call is not necessarily zero, and you should not use @code{errno} to
-determine @emph{whether} a call failed. The proper way to do that is
-documented for each function. @emph{If} the call failed, you can
-examine @code{errno}.
-
-Many library functions can set @code{errno} to a nonzero value as a
-result of calling other library functions which might fail. You should
-assume that any library function might alter @code{errno} when the
-function returns an error.
-
-@strong{Portability Note:} @w{ISO C} specifies @code{errno} as a
-``modifiable lvalue'' rather than as a variable, permitting it to be
-implemented as a macro. For example, its expansion might involve a
-function call, like @w{@code{*__errno_location ()}}. In fact, that is
-what it is
-on @gnulinuxhurdsystems{}. @Theglibc{}, on each system, does
-whatever is right for the particular system.
-
-There are a few library functions, like @code{sqrt} and @code{atan},
-that return a perfectly legitimate value in case of an error, but also
-set @code{errno}. For these functions, if you want to check to see
-whether an error occurred, the recommended method is to set @code{errno}
-to zero before calling the function, and then check its value afterward.
-@end deftypevr
-
-@pindex errno.h
-All the error codes have symbolic names; they are macros defined in
-@file{errno.h}. The names start with @samp{E} and an upper-case
-letter or digit; you should consider names of this form to be
-reserved names. @xref{Reserved Names}.
-
-The error code values are all positive integers and are all distinct,
-with one exception: @code{EWOULDBLOCK} and @code{EAGAIN} are the same.
-Since the values are distinct, you can use them as labels in a
-@code{switch} statement; just don't use both @code{EWOULDBLOCK} and
-@code{EAGAIN}. Your program should not make any other assumptions about
-the specific values of these symbolic constants.
-
-The value of @code{errno} doesn't necessarily have to correspond to any
-of these macros, since some library functions might return other error
-codes of their own for other situations. The only values that are
-guaranteed to be meaningful for a particular library function are the
-ones that this manual lists for that function.
-
-Except on @gnuhurdsystems{}, almost any system call can return @code{EFAULT} if
-it is given an invalid pointer as an argument. Since this could only
-happen as a result of a bug in your program, and since it will not
-happen on @gnuhurdsystems{}, we have saved space by not mentioning
-@code{EFAULT} in the descriptions of individual functions.
-
-In some Unix systems, many system calls can also return @code{EFAULT} if
-given as an argument a pointer into the stack, and the kernel for some
-obscure reason fails in its attempt to extend the stack. If this ever
-happens, you should probably try using statically or dynamically
-allocated memory instead of stack memory on that system.
-
-@node Error Codes, Error Messages, Checking for Errors, Error Reporting
-@section Error Codes
-
-@pindex errno.h
-The error code macros are defined in the header file @file{errno.h}.
-All of them expand into integer constant values. Some of these error
-codes can't occur on @gnusystems{}, but they can occur using @theglibc{}
-on other systems.
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EPERM
-@errno{EPERM, 1, Operation not permitted}
-Only the owner of the file (or other resource)
-or processes with special privileges can perform the operation.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOENT
-@errno{ENOENT, 2, No such file or directory}
-This is a ``file doesn't exist'' error
-for ordinary files that are referenced in contexts where they are
-expected to already exist.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ESRCH
-@errno{ESRCH, 3, No such process}
-No process matches the specified process ID.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EINTR
-@errno{EINTR, 4, Interrupted system call}
-An asynchronous signal occurred and prevented
-completion of the call. When this happens, you should try the call
-again.
-
-You can choose to have functions resume after a signal that is handled,
-rather than failing with @code{EINTR}; see @ref{Interrupted
-Primitives}.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EIO
-@errno{EIO, 5, Input/output error}
-Usually used for physical read or write errors.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENXIO
-@errno{ENXIO, 6, No such device or address}
-The system tried to use the device
-represented by a file you specified, and it couldn't find the device.
-This can mean that the device file was installed incorrectly, or that
-the physical device is missing or not correctly attached to the
-computer.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int E2BIG
-@errno{E2BIG, 7, Argument list too long}
-Used when the arguments passed to a new program
-being executed with one of the @code{exec} functions (@pxref{Executing a
-File}) occupy too much memory space. This condition never arises on
-@gnuhurdsystems{}.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOEXEC
-@errno{ENOEXEC, 8, Exec format error}
-Invalid executable file format. This condition is detected by the
-@code{exec} functions; see @ref{Executing a File}.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EBADF
-@errno{EBADF, 9, Bad file descriptor}
-For example, I/O on a descriptor that has been
-closed or reading from a descriptor open only for writing (or vice
-versa).
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ECHILD
-@errno{ECHILD, 10, No child processes}
-This error happens on operations that are
-supposed to manipulate child processes, when there aren't any processes
-to manipulate.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EDEADLK
-@errno{EDEADLK, 11, Resource deadlock avoided}
-Allocating a system resource would have resulted in a
-deadlock situation. The system does not guarantee that it will notice
-all such situations. This error means you got lucky and the system
-noticed; it might just hang. @xref{File Locks}, for an example.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOMEM
-@errno{ENOMEM, 12, Cannot allocate memory}
-The system cannot allocate more virtual memory
-because its capacity is full.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EACCES
-@errno{EACCES, 13, Permission denied}
-The file permissions do not allow the attempted operation.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EFAULT
-@errno{EFAULT, 14, Bad address}
-An invalid pointer was detected.
-On @gnuhurdsystems{}, this error never happens; you get a signal instead.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENOTBLK
-@errno{ENOTBLK, 15, Block device required}
-A file that isn't a block special file was given in a situation that
-requires one. For example, trying to mount an ordinary file as a file
-system in Unix gives this error.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EBUSY
-@errno{EBUSY, 16, Device or resource busy}
-A system resource that can't be shared is already in use.
-For example, if you try to delete a file that is the root of a currently
-mounted filesystem, you get this error.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EEXIST
-@errno{EEXIST, 17, File exists}
-An existing file was specified in a context where it only
-makes sense to specify a new file.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EXDEV
-@errno{EXDEV, 18, Invalid cross-device link}
-An attempt to make an improper link across file systems was detected.
-This happens not only when you use @code{link} (@pxref{Hard Links}) but
-also when you rename a file with @code{rename} (@pxref{Renaming Files}).
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENODEV
-@errno{ENODEV, 19, No such device}
-The wrong type of device was given to a function that expects a
-particular sort of device.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOTDIR
-@errno{ENOTDIR, 20, Not a directory}
-A file that isn't a directory was specified when a directory is required.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EISDIR
-@errno{EISDIR, 21, Is a directory}
-You cannot open a directory for writing,
-or create or remove hard links to it.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EINVAL
-@errno{EINVAL, 22, Invalid argument}
-This is used to indicate various kinds of problems
-with passing the wrong argument to a library function.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EMFILE
-@errno{EMFILE, 24, Too many open files}
-The current process has too many files open and can't open any more.
-Duplicate descriptors do count toward this limit.
-
-In BSD and GNU, the number of open files is controlled by a resource
-limit that can usually be increased. If you get this error, you might
-want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
-@pxref{Limits on Resources}.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENFILE
-@errno{ENFILE, 23, Too many open files in system}
-There are too many distinct file openings in the entire system. Note
-that any number of linked channels count as just one file opening; see
-@ref{Linked Channels}. This error never occurs on @gnuhurdsystems{}.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOTTY
-@errno{ENOTTY, 25, Inappropriate ioctl for device}
-Inappropriate I/O control operation, such as trying to set terminal
-modes on an ordinary file.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ETXTBSY
-@errno{ETXTBSY, 26, Text file busy}
-An attempt to execute a file that is currently open for writing, or
-write to a file that is currently being executed. Often using a
-debugger to run a program is considered having it open for writing and
-will cause this error. (The name stands for ``text file busy''.) This
-is not an error on @gnuhurdsystems{}; the text is copied as necessary.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EFBIG
-@errno{EFBIG, 27, File too large}
-The size of a file would be larger than allowed by the system.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOSPC
-@errno{ENOSPC, 28, No space left on device}
-Write operation on a file failed because the
-disk is full.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ESPIPE
-@errno{ESPIPE, 29, Illegal seek}
-Invalid seek operation (such as on a pipe).
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EROFS
-@errno{EROFS, 30, Read-only file system}
-An attempt was made to modify something on a read-only file system.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EMLINK
-@errno{EMLINK, 31, Too many links}
-The link count of a single file would become too large.
-@code{rename} can cause this error if the file being renamed already has
-as many links as it can take (@pxref{Renaming Files}).
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EPIPE
-@errno{EPIPE, 32, Broken pipe}
-There is no process reading from the other end of a pipe.
-Every library function that returns this error code also generates a
-@code{SIGPIPE} signal; this signal terminates the program if not handled
-or blocked. Thus, your program will never actually see @code{EPIPE}
-unless it has handled or blocked @code{SIGPIPE}.
-@end deftypevr
-
-@comment errno.h
-@comment ISO
-@deftypevr Macro int EDOM
-@errno{EDOM, 33, Numerical argument out of domain}
-Used by mathematical functions when an argument value does
-not fall into the domain over which the function is defined.
-@end deftypevr
-
-@comment errno.h
-@comment ISO
-@deftypevr Macro int ERANGE
-@errno{ERANGE, 34, Numerical result out of range}
-Used by mathematical functions when the result value is
-not representable because of overflow or underflow.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int EAGAIN
-@errno{EAGAIN, 35, Resource temporarily unavailable}
-The call might work if you try again
-later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
-they are always the same in @theglibc{}.
-
-This error can happen in a few different situations:
-
-@itemize @bullet
-@item
-An operation that would block was attempted on an object that has
-non-blocking mode selected. Trying the same operation again will block
-until some external condition makes it possible to read, write, or
-connect (whatever the operation). You can use @code{select} to find out
-when the operation will be possible; @pxref{Waiting for I/O}.
-
-@strong{Portability Note:} In many older Unix systems, this condition
-was indicated by @code{EWOULDBLOCK}, which was a distinct error code
-different from @code{EAGAIN}. To make your program portable, you should
-check for both codes and treat them the same.
-
-@item
-A temporary resource shortage made an operation impossible. @code{fork}
-can return this error. It indicates that the shortage is expected to
-pass, so your program can try the call again later and it may succeed.
-It is probably a good idea to delay for a few seconds before trying it
-again, to allow time for other processes to release scarce resources.
-Such shortages are usually fairly serious and affect the whole system,
-so usually an interactive program should report the error to the user
-and return to its command loop.
-@end itemize
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EWOULDBLOCK
-@errno{EWOULDBLOCK, EAGAIN, Operation would block}
-In @theglibc{}, this is another name for @code{EAGAIN} (above).
-The values are always the same, on every operating system.
-
-C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
-separate error code.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EINPROGRESS
-@errno{EINPROGRESS, 36, Operation now in progress}
-An operation that cannot complete immediately was initiated on an object
-that has non-blocking mode selected. Some functions that must always
-block (such as @code{connect}; @pxref{Connecting}) never return
-@code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that
-the operation has begun and will take some time. Attempts to manipulate
-the object before the call completes return @code{EALREADY}. You can
-use the @code{select} function to find out when the pending operation
-has completed; @pxref{Waiting for I/O}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EALREADY
-@errno{EALREADY, 37, Operation already in progress}
-An operation is already in progress on an object that has non-blocking
-mode selected.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENOTSOCK
-@errno{ENOTSOCK, 38, Socket operation on non-socket}
-A file that isn't a socket was specified when a socket is required.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EMSGSIZE
-@errno{EMSGSIZE, 40, Message too long}
-The size of a message sent on a socket was larger than the supported
-maximum size.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROTOTYPE
-@errno{EPROTOTYPE, 41, Protocol wrong type for socket}
-The socket type does not support the requested communications protocol.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENOPROTOOPT
-@errno{ENOPROTOOPT, 42, Protocol not available}
-You specified a socket option that doesn't make sense for the
-particular protocol being used by the socket. @xref{Socket Options}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROTONOSUPPORT
-@errno{EPROTONOSUPPORT, 43, Protocol not supported}
-The socket domain does not support the requested communications protocol
-(perhaps because the requested protocol is completely invalid).
-@xref{Creating a Socket}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ESOCKTNOSUPPORT
-@errno{ESOCKTNOSUPPORT, 44, Socket type not supported}
-The socket type is not supported.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EOPNOTSUPP
-@errno{EOPNOTSUPP, 45, Operation not supported}
-The operation you requested is not supported. Some socket functions
-don't make sense for all types of sockets, and others may not be
-implemented for all communications protocols. On @gnuhurdsystems{}, this
-error can happen for many calls when the object does not support the
-particular operation; it is a generic indication that the server knows
-nothing to do for that call.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPFNOSUPPORT
-@errno{EPFNOSUPPORT, 46, Protocol family not supported}
-The socket communications protocol family you requested is not supported.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EAFNOSUPPORT
-@errno{EAFNOSUPPORT, 47, Address family not supported by protocol}
-The address family specified for a socket is not supported; it is
-inconsistent with the protocol being used on the socket. @xref{Sockets}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EADDRINUSE
-@errno{EADDRINUSE, 48, Address already in use}
-The requested socket address is already in use. @xref{Socket Addresses}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EADDRNOTAVAIL
-@errno{EADDRNOTAVAIL, 49, Cannot assign requested address}
-The requested socket address is not available; for example, you tried
-to give a socket a name that doesn't match the local host name.
-@xref{Socket Addresses}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENETDOWN
-@errno{ENETDOWN, 50, Network is down}
-A socket operation failed because the network was down.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENETUNREACH
-@errno{ENETUNREACH, 51, Network is unreachable}
-A socket operation failed because the subnet containing the remote host
-was unreachable.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENETRESET
-@errno{ENETRESET, 52, Network dropped connection on reset}
-A network connection was reset because the remote host crashed.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ECONNABORTED
-@errno{ECONNABORTED, 53, Software caused connection abort}
-A network connection was aborted locally.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ECONNRESET
-@errno{ECONNRESET, 54, Connection reset by peer}
-A network connection was closed for reasons outside the control of the
-local host, such as by the remote machine rebooting or an unrecoverable
-protocol violation.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENOBUFS
-@errno{ENOBUFS, 55, No buffer space available}
-The kernel's buffers for I/O operations are all in use. In GNU, this
-error is always synonymous with @code{ENOMEM}; you may get one or the
-other from network operations.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EISCONN
-@errno{EISCONN, 56, Transport endpoint is already connected}
-You tried to connect a socket that is already connected.
-@xref{Connecting}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENOTCONN
-@errno{ENOTCONN, 57, Transport endpoint is not connected}
-The socket is not connected to anything. You get this error when you
-try to transmit data over a socket, without first specifying a
-destination for the data. For a connectionless socket (for datagram
-protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EDESTADDRREQ
-@errno{EDESTADDRREQ, 39, Destination address required}
-No default destination address was set for the socket. You get this
-error when you try to transmit data over a connectionless socket,
-without first specifying a destination for the data with @code{connect}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ESHUTDOWN
-@errno{ESHUTDOWN, 58, Cannot send after transport endpoint shutdown}
-The socket has already been shut down.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ETOOMANYREFS
-@errno{ETOOMANYREFS, 59, Too many references: cannot splice}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ETIMEDOUT
-@errno{ETIMEDOUT, 60, Connection timed out}
-A socket operation with a specified timeout received no response during
-the timeout period.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ECONNREFUSED
-@errno{ECONNREFUSED, 61, Connection refused}
-A remote host refused to allow the network connection (typically because
-it is not running the requested service).
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ELOOP
-@errno{ELOOP, 62, Too many levels of symbolic links}
-Too many levels of symbolic links were encountered in looking up a file name.
-This often indicates a cycle of symbolic links.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENAMETOOLONG
-@errno{ENAMETOOLONG, 63, File name too long}
-Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
-Files}) or host name too long (in @code{gethostname} or
-@code{sethostname}; @pxref{Host Identification}).
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EHOSTDOWN
-@errno{EHOSTDOWN, 64, Host is down}
-The remote host for a requested network connection is down.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EHOSTUNREACH
-@errno{EHOSTUNREACH, 65, No route to host}
-The remote host for a requested network connection is not reachable.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOTEMPTY
-@errno{ENOTEMPTY, 66, Directory not empty}
-Directory not empty, where an empty directory was expected. Typically,
-this error occurs when you are trying to delete a directory.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROCLIM
-@errno{EPROCLIM, 67, Too many processes}
-This means that the per-user limit on new process would be exceeded by
-an attempted @code{fork}. @xref{Limits on Resources}, for details on
-the @code{RLIMIT_NPROC} limit.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EUSERS
-@errno{EUSERS, 68, Too many users}
-The file quota system is confused because there are too many users.
-@c This can probably happen in a GNU system when using NFS.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EDQUOT
-@errno{EDQUOT, 69, Disk quota exceeded}
-The user's disk quota was exceeded.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ESTALE
-@errno{ESTALE, 70, Stale file handle}
-This indicates an internal confusion in the
-file system which is due to file system rearrangements on the server host
-for NFS file systems or corruption in other file systems.
-Repairing this condition usually requires unmounting, possibly repairing
-and remounting the file system.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EREMOTE
-@errno{EREMOTE, 71, Object is remote}
-An attempt was made to NFS-mount a remote file system with a file name that
-already specifies an NFS-mounted file.
-(This is an error on some operating systems, but we expect it to work
-properly on @gnuhurdsystems{}, making this error code impossible.)
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EBADRPC
-@errno{EBADRPC, 72, RPC struct is bad}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ERPCMISMATCH
-@errno{ERPCMISMATCH, 73, RPC version wrong}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROGUNAVAIL
-@errno{EPROGUNAVAIL, 74, RPC program not available}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROGMISMATCH
-@errno{EPROGMISMATCH, 75, RPC program version wrong}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EPROCUNAVAIL
-@errno{EPROCUNAVAIL, 76, RPC bad procedure for program}
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOLCK
-@errno{ENOLCK, 77, No locks available}
-This is used by the file locking facilities; see
-@ref{File Locks}. This error is never generated by @gnuhurdsystems{}, but
-it can result from an operation to an NFS server running another
-operating system.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EFTYPE
-@errno{EFTYPE, 79, Inappropriate file type or format}
-The file was the wrong type for the
-operation, or a data file had the wrong format.
-
-On some systems @code{chmod} returns this error if you try to set the
-sticky bit on a non-directory file; @pxref{Setting Permissions}.
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int EAUTH
-@errno{EAUTH, 80, Authentication error}
-@end deftypevr
-
-@comment errno.h
-@comment BSD
-@deftypevr Macro int ENEEDAUTH
-@errno{ENEEDAUTH, 81, Need authenticator}
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOSYS
-@errno{ENOSYS, 78, Function not implemented}
-This indicates that the function called is
-not implemented at all, either in the C library itself or in the
-operating system. When you get this error, you can be sure that this
-particular function will always fail with @code{ENOSYS} unless you
-install a new version of the C library or the operating system.
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ENOTSUP
-@errno{ENOTSUP, 118, Not supported}
-A function returns this error when certain parameter
-values are valid, but the functionality they request is not available.
-This can mean that the function does not implement a particular command
-or option value or flag bit at all. For functions that operate on some
-object given in a parameter, such as a file descriptor or a port, it
-might instead mean that only @emph{that specific object} (file
-descriptor, port, etc.) is unable to support the other parameters given;
-different file descriptors might support different ranges of parameter
-values.
-
-If the entire function is not available at all in the implementation,
-it returns @code{ENOSYS} instead.
-@end deftypevr
-
-@comment errno.h
-@comment ISO
-@deftypevr Macro int EILSEQ
-@errno{EILSEQ, 106, Invalid or incomplete multibyte or wide character}
-While decoding a multibyte character the function came along an invalid
-or an incomplete sequence of bytes or the given wide character is invalid.
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int EBACKGROUND
-@errno{EBACKGROUND, 100, Inappropriate operation for background process}
-On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
-this error for certain operations when the caller is not in the
-foreground process group of the terminal. Users do not usually see this
-error because functions such as @code{read} and @code{write} translate
-it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control},
-for information on process groups and these signals.
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int EDIED
-@errno{EDIED, 101, Translator died}
-On @gnuhurdsystems{}, opening a file returns this error when the file is
-translated by a program and the translator program dies while starting
-up, before it has connected to the file.
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int ED
-@errno{ED, 102, ?}
-The experienced user will know what is wrong.
-@c This error code is a joke. Its perror text is part of the joke.
-@c Don't change it.
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int EGREGIOUS
-@errno{EGREGIOUS, 103, You really blew it this time}
-You did @strong{what}?
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int EIEIO
-@errno{EIEIO, 104, Computer bought the farm}
-Go home and have a glass of warm, dairy-fresh milk.
-@end deftypevr
-
-@comment errno.h
-@comment GNU
-@deftypevr Macro int EGRATUITOUS
-@errno{EGRATUITOUS, 105, Gratuitous error}
-This error code has no purpose.
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int EBADMSG
-@errno{EBADMSG, 107, Bad message}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int EIDRM
-@errno{EIDRM, 108, Identifier removed}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int EMULTIHOP
-@errno{EMULTIHOP, 109, Multihop attempted}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ENODATA
-@errno{ENODATA, 110, No data available}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ENOLINK
-@errno{ENOLINK, 111, Link has been severed}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ENOMSG
-@errno{ENOMSG, 112, No message of desired type}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ENOSR
-@errno{ENOSR, 113, Out of streams resources}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ENOSTR
-@errno{ENOSTR, 114, Device not a stream}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int EOVERFLOW
-@errno{EOVERFLOW, 115, Value too large for defined data type}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int EPROTO
-@errno{EPROTO, 116, Protocol error}
-@end deftypevr
-
-@comment errno.h
-@comment XOPEN
-@deftypevr Macro int ETIME
-@errno{ETIME, 117, Timer expired}
-@end deftypevr
-
-@comment errno.h
-@comment POSIX.1
-@deftypevr Macro int ECANCELED
-@errno{ECANCELED, 119, Operation canceled}
-An asynchronous operation was canceled before it
-completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel},
-the normal result is for the operations affected to complete with this
-error; @pxref{Cancel AIO Operations}.
-@end deftypevr
-
-
-@emph{The following error codes are defined by the Linux/i386 kernel.
-They are not yet documented.}
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ERESTART
-@errno{ERESTART, ???/85, Interrupted system call should be restarted}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ECHRNG
-@errno{ECHRNG, ???/44, Channel number out of range}
-@end deftypevr
-
-@comment errno.h
-@comment Obsolete
-@deftypevr Macro int EL2NSYNC
-@errno{EL2NSYNC, ???/45, Level 2 not synchronized}
-@end deftypevr
-
-@comment errno.h
-@comment Obsolete
-@deftypevr Macro int EL3HLT
-@errno{EL3HLT, ???/46, Level 3 halted}
-@end deftypevr
-
-@comment errno.h
-@comment Obsolete
-@deftypevr Macro int EL3RST
-@errno{EL3RST, ???/47, Level 3 reset}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELNRNG
-@errno{ELNRNG, ???/48, Link number out of range}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EUNATCH
-@errno{EUNATCH, ???/49, Protocol driver not attached}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOCSI
-@errno{ENOCSI, ???/50, No CSI structure available}
-@end deftypevr
-
-@comment errno.h
-@comment Obsolete
-@deftypevr Macro int EL2HLT
-@errno{EL2HLT, ???/51, Level 2 halted}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBADE
-@errno{EBADE, ???/52, Invalid exchange}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBADR
-@errno{EBADR, ???/53, Invalid request descriptor}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EXFULL
-@errno{EXFULL, ???/54, Exchange full}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOANO
-@errno{ENOANO, ???/55, No anode}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBADRQC
-@errno{EBADRQC, ???/56, Invalid request code}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBADSLT
-@errno{EBADSLT, ???/57, Invalid slot}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EDEADLOCK
-@errno{EDEADLOCK, ???/58, File locking deadlock error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBFONT
-@errno{EBFONT, ???/59, Bad font file format}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENONET
-@errno{ENONET, ???/64, Machine is not on the network}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOPKG
-@errno{ENOPKG, ???/65, Package not installed}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EADV
-@errno{EADV, ???/68, Advertise error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ESRMNT
-@errno{ESRMNT, ???/69, Srmount error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ECOMM
-@errno{ECOMM, ???/70, Communication error on send}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EDOTDOT
-@errno{EDOTDOT, ???/73, RFS specific error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOTUNIQ
-@errno{ENOTUNIQ, ???/76, Name not unique on network}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EBADFD
-@errno{EBADFD, ???/77, File descriptor in bad state}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EREMCHG
-@errno{EREMCHG, ???/78, Remote address changed}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELIBACC
-@errno{ELIBACC, ???/79, Can not access a needed shared library}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELIBBAD
-@errno{ELIBBAD, ???/80, Accessing a corrupted shared library}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELIBSCN
-@errno{ELIBSCN, ???/81, .lib section in a.out corrupted}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELIBMAX
-@errno{ELIBMAX, ???/82, Attempting to link in too many shared libraries}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ELIBEXEC
-@errno{ELIBEXEC, ???/83, Cannot exec a shared library directly}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ESTRPIPE
-@errno{ESTRPIPE, ???/86, Streams pipe error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EUCLEAN
-@errno{EUCLEAN, ???/117, Structure needs cleaning}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOTNAM
-@errno{ENOTNAM, ???/118, Not a XENIX named type file}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENAVAIL
-@errno{ENAVAIL, ???/119, No XENIX semaphores available}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EISNAM
-@errno{EISNAM, ???/120, Is a named type file}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EREMOTEIO
-@errno{EREMOTEIO, ???/121, Remote I/O error}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int ENOMEDIUM
-@errno{ENOMEDIUM, ???/???, No medium found}
-@end deftypevr
-
-@comment errno.h
-@comment Linux???
-@deftypevr Macro int EMEDIUMTYPE
-@errno{EMEDIUMTYPE, ???/???, Wrong medium type}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int ENOKEY
-@errno{ENOKEY, ???/???, Required key not available}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int EKEYEXPIRED
-@errno{EKEYEXPIRED, ???/???, Key has expired}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int EKEYREVOKED
-@errno{EKEYREVOKED, ???/???, Key has been revoked}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int EKEYREJECTED
-@errno{EKEYREJECTED, ???/???, Key was rejected by service}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int EOWNERDEAD
-@errno{EOWNERDEAD, ???/???, Owner died}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int ENOTRECOVERABLE
-@errno{ENOTRECOVERABLE, ???/???, State not recoverable}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int ERFKILL
-@errno{ERFKILL, ???/???, Operation not possible due to RF-kill}
-@end deftypevr
-
-@comment errno.h
-@comment Linux
-@deftypevr Macro int EHWPOISON
-@errno{EHWPOISON, ???/???, Memory page has hardware error}
-@end deftypevr
-
-@node Error Messages, , Error Codes, Error Reporting
-@section Error Messages
-
-The library has functions and variables designed to make it easy for
-your program to report informative error messages in the customary
-format about the failure of a library call. The functions
-@code{strerror} and @code{perror} give you the standard error message
-for a given error code; the variable
-@w{@code{program_invocation_short_name}} gives you convenient access to the
-name of the program that encountered the error.
-
-@comment string.h
-@comment ISO
-@deftypefun {char *} strerror (int @var{errnum})
-@safety{@prelim{}@mtunsafe{@mtasurace{:strerror}}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{}}}
-@c Calls strerror_r with a static buffer allocated with malloc on the
-@c first use.
-The @code{strerror} function maps the error code (@pxref{Checking for
-Errors}) specified by the @var{errnum} argument to a descriptive error
-message string. The return value is a pointer to this string.
-
-The value @var{errnum} normally comes from the variable @code{errno}.
-
-You should not modify the string returned by @code{strerror}. Also, if
-you make subsequent calls to @code{strerror}, the string might be
-overwritten. (But it's guaranteed that no library function ever calls
-@code{strerror} behind your back.)
-
-The function @code{strerror} is declared in @file{string.h}.
-@end deftypefun
-
-@comment string.h
-@comment GNU
-@deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n})
-@safety{@prelim{}@mtsafe{}@asunsafe{@ascuintl{}}@acunsafe{}}
-The @code{strerror_r} function works like @code{strerror} but instead of
-returning the error message in a statically allocated buffer shared by
-all threads in the process, it returns a private copy for the
-thread. This might be either some permanent global data or a message
-string in the user supplied buffer starting at @var{buf} with the
-length of @var{n} bytes.
-
-At most @var{n} characters are written (including the NUL byte) so it is
-up to the user to select a buffer large enough.
-
-This function should always be used in multi-threaded programs since
-there is no way to guarantee the string returned by @code{strerror}
-really belongs to the last call of the current thread.
-
-The function @code{strerror_r} is a GNU extension and it is declared in
-@file{string.h}.
-@end deftypefun
-
-@comment stdio.h
-@comment ISO
-@deftypefun void perror (const char *@var{message})
-@safety{@prelim{}@mtsafe{@mtasurace{:stderr}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
-@c Besides strerror_r's and some of fprintf's issues, if stderr is not
-@c oriented yet, create a new stream with a dup of stderr's fd and write
-@c to that instead of stderr, to avoid orienting it.
-This function prints an error message to the stream @code{stderr};
-see @ref{Standard Streams}. The orientation of @code{stderr} is not
-changed.
-
-If you call @code{perror} with a @var{message} that is either a null
-pointer or an empty string, @code{perror} just prints the error message
-corresponding to @code{errno}, adding a trailing newline.
-
-If you supply a non-null @var{message} argument, then @code{perror}
-prefixes its output with this string. It adds a colon and a space
-character to separate the @var{message} from the error string corresponding
-to @code{errno}.
-
-The function @code{perror} is declared in @file{stdio.h}.
-@end deftypefun
-
-@code{strerror} and @code{perror} produce the exact same message for any
-given error code; the precise text varies from system to system. With
-@theglibc{}, the messages are fairly short; there are no multi-line
-messages or embedded newlines. Each error message begins with a capital
-letter and does not include any terminating punctuation.
-
-@cindex program name
-@cindex name of running program
-Many programs that don't read input from the terminal are designed to
-exit if any system call fails. By convention, the error message from
-such a program should start with the program's name, sans directories.
-You can find that name in the variable
-@code{program_invocation_short_name}; the full file name is stored the
-variable @code{program_invocation_name}.
-
-@comment errno.h
-@comment GNU
-@deftypevar {char *} program_invocation_name
-This variable's value is the name that was used to invoke the program
-running in the current process. It is the same as @code{argv[0]}. Note
-that this is not necessarily a useful file name; often it contains no
-directory names. @xref{Program Arguments}.
-
-This variable is a GNU extension and is declared in @file{errno.h}.
-@end deftypevar
-
-@comment errno.h
-@comment GNU
-@deftypevar {char *} program_invocation_short_name
-This variable's value is the name that was used to invoke the program
-running in the current process, with directory names removed. (That is
-to say, it is the same as @code{program_invocation_name} minus
-everything up to the last slash, if any.)
-
-This variable is a GNU extension and is declared in @file{errno.h}.
-@end deftypevar
-
-The library initialization code sets up both of these variables before
-calling @code{main}.
-
-@strong{Portability Note:} If you want your program to work with
-non-GNU libraries, you must save the value of @code{argv[0]} in
-@code{main}, and then strip off the directory names yourself. We
-added these extensions to make it possible to write self-contained
-error-reporting subroutines that require no explicit cooperation from
-@code{main}.
-
-Here is an example showing how to handle failure to open a file
-correctly. The function @code{open_sesame} tries to open the named file
-for reading and returns a stream if successful. The @code{fopen}
-library function returns a null pointer if it couldn't open the file for
-some reason. In that situation, @code{open_sesame} constructs an
-appropriate error message using the @code{strerror} function, and
-terminates the program. If we were going to make some other library
-calls before passing the error code to @code{strerror}, we'd have to
-save it in a local variable instead, because those other library
-functions might overwrite @code{errno} in the meantime.
-
-@smallexample
-#define _GNU_SOURCE
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-FILE *
-open_sesame (char *name)
-@{
- FILE *stream;
-
- errno = 0;
- stream = fopen (name, "r");
- if (stream == NULL)
- @{
- fprintf (stderr, "%s: Couldn't open file %s; %s\n",
- program_invocation_short_name, name, strerror (errno));
- exit (EXIT_FAILURE);
- @}
- else
- return stream;
-@}
-@end smallexample
-
-Using @code{perror} has the advantage that the function is portable and
-available on all systems implementing @w{ISO C}. But often the text
-@code{perror} generates is not what is wanted and there is no way to
-extend or change what @code{perror} does. The GNU coding standard, for
-instance, requires error messages to be preceded by the program name and
-programs which read some input files should provide information
-about the input file name and the line number in case an error is
-encountered while reading the file. For these occasions there are two
-functions available which are widely used throughout the GNU project.
-These functions are declared in @file{error.h}.
-
-@comment error.h
-@comment GNU
-@deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acsafe{}}
-@c Cancellation is disabled throughout the execution. It flushes stdout
-@c and then holds a lock on stderr while printing the program name and
-@c then running error_tail. The non-wide case just runs vfprintf; the
-@c wide case converts the message to an alloca/malloc-allocated buffer
-@c with mbsrtowcs, then prints it with vfwprintf. Afterwards,
-@c print_errno_message calls strerror_r and fxprintf.
-The @code{error} function can be used to report general problems during
-program execution. The @var{format} argument is a format string just
-like those given to the @code{printf} family of functions. The
-arguments required for the format can follow the @var{format} parameter.
-Just like @code{perror}, @code{error} also can report an error code in
-textual form. But unlike @code{perror} the error value is explicitly
-passed to the function in the @var{errnum} parameter. This eliminates
-the problem mentioned above that the error reporting function must be
-called immediately after the function causing the error since otherwise
-@code{errno} might have a different value.
-
-@code{error} prints first the program name. If the application
-defined a global variable @code{error_print_progname} and points it to a
-function this function will be called to print the program name.
-Otherwise the string from the global variable @code{program_name} is
-used. The program name is followed by a colon and a space which in turn
-is followed by the output produced by the format string. If the
-@var{errnum} parameter is non-zero the format string output is followed
-by a colon and a space, followed by the error message for the error code
-@var{errnum}. In any case is the output terminated with a newline.
-
-The output is directed to the @code{stderr} stream. If the
-@code{stderr} wasn't oriented before the call it will be narrow-oriented
-afterwards.
-
-The function will return unless the @var{status} parameter has a
-non-zero value. In this case the function will call @code{exit} with
-the @var{status} value for its parameter and therefore never return. If
-@code{error} returns, the global variable @code{error_message_count} is
-incremented by one to keep track of the number of errors reported.
-@end deftypefun
-
-@comment error.h
-@comment GNU
-@deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{})
-@safety{@prelim{}@mtunsafe{@mtasurace{:error_at_line/error_one_per_line} @mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acunsafe{@acucorrupt{/error_one_per_line}}}
-@c The error_one_per_line variable is accessed (without any form of
-@c synchronization, but since it's an int used once, it should be safe
-@c enough) and, if this mode is enabled, static variables used to hold
-@c the last printed file name and line number are accessed and modified
-@c without synchronization; the update is not atomic and it occurs
-@c before disabling cancellation, so it can be interrupted after only
-@c one of the two variables is modified. After that, it's very much
-@c like error.
-
-The @code{error_at_line} function is very similar to the @code{error}
-function. The only differences are the additional parameters @var{fname}
-and @var{lineno}. The handling of the other parameters is identical to
-that of @code{error} except that between the program name and the string
-generated by the format string additional text is inserted.
-
-Directly following the program name a colon, followed by the file name
-pointed to by @var{fname}, another colon, and the value of @var{lineno} is
-printed.
-
-This additional output of course is meant to be used to locate an error
-in an input file (like a programming language source code file etc).
-
-If the global variable @code{error_one_per_line} is set to a non-zero
-value @code{error_at_line} will avoid printing consecutive messages for
-the same file and line. Repetition which are not directly following
-each other are not caught.
-
-Just like @code{error} this function only returns if @var{status} is
-zero. Otherwise @code{exit} is called with the non-zero value. If
-@code{error} returns, the global variable @code{error_message_count} is
-incremented by one to keep track of the number of errors reported.
-@end deftypefun
-
-As mentioned above, the @code{error} and @code{error_at_line} functions
-can be customized by defining a variable named
-@code{error_print_progname}.
-
-@comment error.h
-@comment GNU
-@deftypevar {void (*error_print_progname)} (void)
-If the @code{error_print_progname} variable is defined to a non-zero
-value the function pointed to is called by @code{error} or
-@code{error_at_line}. It is expected to print the program name or do
-something similarly useful.
-
-The function is expected to print to the @code{stderr} stream and
-must be able to handle whatever orientation the stream has.
-
-The variable is global and shared by all threads.
-@end deftypevar
-
-@comment error.h
-@comment GNU
-@deftypevar {unsigned int} error_message_count
-The @code{error_message_count} variable is incremented whenever one of
-the functions @code{error} or @code{error_at_line} returns. The
-variable is global and shared by all threads.
-@end deftypevar
-
-@comment error.h
-@comment GNU
-@deftypevar int error_one_per_line
-The @code{error_one_per_line} variable influences only
-@code{error_at_line}. Normally the @code{error_at_line} function
-creates output for every invocation. If @code{error_one_per_line} is
-set to a non-zero value @code{error_at_line} keeps track of the last
-file name and line number for which an error was reported and avoids
-directly following messages for the same file and line. This variable
-is global and shared by all threads.
-@end deftypevar
-
-@noindent
-A program which read some input file and reports errors in it could look
-like this:
-
-@smallexample
-@{
- char *line = NULL;
- size_t len = 0;
- unsigned int lineno = 0;
-
- error_message_count = 0;
- while (! feof_unlocked (fp))
- @{
- ssize_t n = getline (&line, &len, fp);
- if (n <= 0)
- /* @r{End of file or error.} */
- break;
- ++lineno;
-
- /* @r{Process the line.} */
- @dots{}
-
- if (@r{Detect error in line})
- error_at_line (0, errval, filename, lineno,
- "some error text %s", some_variable);
- @}
-
- if (error_message_count != 0)
- error (EXIT_FAILURE, 0, "%u errors found", error_message_count);
-@}
-@end smallexample
-
-@code{error} and @code{error_at_line} are clearly the functions of
-choice and enable the programmer to write applications which follow the
-GNU coding standard. @Theglibc{} additionally contains functions which
-are used in BSD for the same purpose. These functions are declared in
-@file{err.h}. It is generally advised to not use these functions. They
-are included only for compatibility.
-
-@comment err.h
-@comment BSD
-@deftypefun void warn (const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Just calls vwarn with the va_list.
-The @code{warn} function is roughly equivalent to a call like
-@smallexample
- error (0, errno, format, @r{the parameters})
-@end smallexample
-@noindent
-except that the global variables @code{error} respects and modifies
-are not used.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void vwarn (const char *@var{format}, va_list @var{ap})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c While holding stderr's recursive lock, it prints the programname, the
-@c given message, and the error string with fw?printf's %m. When the
-@c stream is wide, convert_and_print converts the format string to an
-@c alloca/malloc-created buffer using mbsrtowcs and then calls fwprintf.
-The @code{vwarn} function is just like @code{warn} except that the
-parameters for the handling of the format string @var{format} are passed
-in as a value of type @code{va_list}.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void warnx (const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as warn, but without the strerror translation issues.
-The @code{warnx} function is roughly equivalent to a call like
-@smallexample
- error (0, 0, format, @r{the parameters})
-@end smallexample
-@noindent
-except that the global variables @code{error} respects and modifies
-are not used. The difference to @code{warn} is that no error number
-string is printed.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void vwarnx (const char *@var{format}, va_list @var{ap})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as vwarn, but without the strerror translation issues.
-The @code{vwarnx} function is just like @code{warnx} except that the
-parameters for the handling of the format string @var{format} are passed
-in as a value of type @code{va_list}.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void err (int @var{status}, const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as warn followed by exit.
-The @code{err} function is roughly equivalent to a call like
-@smallexample
- error (status, errno, format, @r{the parameters})
-@end smallexample
-@noindent
-except that the global variables @code{error} respects and modifies
-are not used and that the program is exited even if @var{status} is zero.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as vwarn followed by exit.
-The @code{verr} function is just like @code{err} except that the
-parameters for the handling of the format string @var{format} are passed
-in as a value of type @code{va_list}.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void errx (int @var{status}, const char *@var{format}, @dots{})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as warnx followed by exit.
-The @code{errx} function is roughly equivalent to a call like
-@smallexample
- error (status, 0, format, @r{the parameters})
-@end smallexample
-@noindent
-except that the global variables @code{error} respects and modifies
-are not used and that the program is exited even if @var{status}
-is zero. The difference to @code{err} is that no error number
-string is printed.
-@end deftypefun
-
-@comment err.h
-@comment BSD
-@deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap})
-@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
-@c Same as vwarnx followed by exit.
-The @code{verrx} function is just like @code{errx} except that the
-parameters for the handling of the format string @var{format} are passed
-in as a value of type @code{va_list}.
-@end deftypefun