@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

@deftypevr {Variable} {volatile int} errno
@standards{ISO, errno.h}
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.  In many
cases, when a library function encounters an error, it will set
@code{errno} to a non-zero value to indicate what specific error
condition occurred.  The documentation for each function lists the
error conditions that are possible for that function.  Not all library
functions use this mechanism; some return an error code directly,
instead.

@strong{Warning:} Many library functions may set @code{errno} to some
meaningless non-zero value even if they did not encounter any errors,
and even if they return error codes directly.  Therefore, it is
usually incorrect to check @emph{whether} an error occurred by
inspecting the value of @code{errno}.  The proper way to check for
error is documented for each function.

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

@deftypevr Macro int EPERM
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOENT
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ESRCH
@standards{POSIX.1, errno.h}
@errno{ESRCH, 3, No such process}
No process matches the specified process ID.
@end deftypevr

@deftypevr Macro int EINTR
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EIO
@standards{POSIX.1, errno.h}
@errno{EIO, 5, Input/output error}
Usually used for physical read or write errors.
@end deftypevr

@deftypevr Macro int ENXIO
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int E2BIG
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOEXEC
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EBADF
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ECHILD
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EDEADLK
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOMEM
@standards{POSIX.1, errno.h}
@errno{ENOMEM, 12, Cannot allocate memory}
The system cannot allocate more virtual memory
because its capacity is full.
@end deftypevr

@deftypevr Macro int EACCES
@standards{POSIX.1, errno.h}
@errno{EACCES, 13, Permission denied}
The file permissions do not allow the attempted operation.
@end deftypevr

@deftypevr Macro int EFAULT
@standards{POSIX.1, errno.h}
@errno{EFAULT, 14, Bad address}
An invalid pointer was detected.
On @gnuhurdsystems{}, this error never happens; you get a signal instead.
@end deftypevr

@deftypevr Macro int ENOTBLK
@standards{BSD, errno.h}
@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

@deftypevr Macro int EBUSY
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EEXIST
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EXDEV
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENODEV
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOTDIR
@standards{POSIX.1, errno.h}
@errno{ENOTDIR, 20, Not a directory}
A file that isn't a directory was specified when a directory is required.
@end deftypevr

@deftypevr Macro int EISDIR
@standards{POSIX.1, errno.h}
@errno{EISDIR, 21, Is a directory}
You cannot open a directory for writing,
or create or remove hard links to it.
@end deftypevr

@deftypevr Macro int EINVAL
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EMFILE
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENFILE
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOTTY
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ETXTBSY
@standards{BSD, errno.h}
@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

@deftypevr Macro int EFBIG
@standards{POSIX.1, errno.h}
@errno{EFBIG, 27, File too large}
The size of a file would be larger than allowed by the system.
@end deftypevr

@deftypevr Macro int ENOSPC
@standards{POSIX.1, errno.h}
@errno{ENOSPC, 28, No space left on device}
Write operation on a file failed because the
disk is full.
@end deftypevr

@deftypevr Macro int ESPIPE
@standards{POSIX.1, errno.h}
@errno{ESPIPE, 29, Illegal seek}
Invalid seek operation (such as on a pipe).
@end deftypevr

@deftypevr Macro int EROFS
@standards{POSIX.1, errno.h}
@errno{EROFS, 30, Read-only file system}
An attempt was made to modify something on a read-only file system.
@end deftypevr

@deftypevr Macro int EMLINK
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EPIPE
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EDOM
@standards{ISO, errno.h}
@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

@deftypevr Macro int ERANGE
@standards{ISO, errno.h}
@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

@deftypevr Macro int EAGAIN
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EWOULDBLOCK
@standards{BSD, errno.h}
@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

@deftypevr Macro int EINPROGRESS
@standards{BSD, errno.h}
@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

@deftypevr Macro int EALREADY
@standards{BSD, errno.h}
@errno{EALREADY, 37, Operation already in progress}
An operation is already in progress on an object that has non-blocking
mode selected.
@end deftypevr

@deftypevr Macro int ENOTSOCK
@standards{BSD, errno.h}
@errno{ENOTSOCK, 38, Socket operation on non-socket}
A file that isn't a socket was specified when a socket is required.
@end deftypevr

@deftypevr Macro int EMSGSIZE
@standards{BSD, errno.h}
@errno{EMSGSIZE, 40, Message too long}
The size of a message sent on a socket was larger than the supported
maximum size.
@end deftypevr

@deftypevr Macro int EPROTOTYPE
@standards{BSD, errno.h}
@errno{EPROTOTYPE, 41, Protocol wrong type for socket}
The socket type does not support the requested communications protocol.
@end deftypevr

@deftypevr Macro int ENOPROTOOPT
@standards{BSD, errno.h}
@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

@deftypevr Macro int EPROTONOSUPPORT
@standards{BSD, errno.h}
@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

@deftypevr Macro int ESOCKTNOSUPPORT
@standards{BSD, errno.h}
@errno{ESOCKTNOSUPPORT, 44, Socket type not supported}
The socket type is not supported.
@end deftypevr

@deftypevr Macro int EOPNOTSUPP
@standards{BSD, errno.h}
@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

@deftypevr Macro int EPFNOSUPPORT
@standards{BSD, errno.h}
@errno{EPFNOSUPPORT, 46, Protocol family not supported}
The socket communications protocol family you requested is not supported.
@end deftypevr

@deftypevr Macro int EAFNOSUPPORT
@standards{BSD, errno.h}
@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

@deftypevr Macro int EADDRINUSE
@standards{BSD, errno.h}
@errno{EADDRINUSE, 48, Address already in use}
The requested socket address is already in use.  @xref{Socket Addresses}.
@end deftypevr

@deftypevr Macro int EADDRNOTAVAIL
@standards{BSD, errno.h}
@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

@deftypevr Macro int ENETDOWN
@standards{BSD, errno.h}
@errno{ENETDOWN, 50, Network is down}
A socket operation failed because the network was down.
@end deftypevr

@deftypevr Macro int ENETUNREACH
@standards{BSD, errno.h}
@errno{ENETUNREACH, 51, Network is unreachable}
A socket operation failed because the subnet containing the remote host
was unreachable.
@end deftypevr

@deftypevr Macro int ENETRESET
@standards{BSD, errno.h}
@errno{ENETRESET, 52, Network dropped connection on reset}
A network connection was reset because the remote host crashed.
@end deftypevr

@deftypevr Macro int ECONNABORTED
@standards{BSD, errno.h}
@errno{ECONNABORTED, 53, Software caused connection abort}
A network connection was aborted locally.
@end deftypevr

@deftypevr Macro int ECONNRESET
@standards{BSD, errno.h}
@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

@deftypevr Macro int ENOBUFS
@standards{BSD, errno.h}
@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

@deftypevr Macro int EISCONN
@standards{BSD, errno.h}
@errno{EISCONN, 56, Transport endpoint is already connected}
You tried to connect a socket that is already connected.
@xref{Connecting}.
@end deftypevr

@deftypevr Macro int ENOTCONN
@standards{BSD, errno.h}
@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

@deftypevr Macro int EDESTADDRREQ
@standards{BSD, errno.h}
@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

@deftypevr Macro int ESHUTDOWN
@standards{BSD, errno.h}
@errno{ESHUTDOWN, 58, Cannot send after transport endpoint shutdown}
The socket has already been shut down.
@end deftypevr

@deftypevr Macro int ETOOMANYREFS
@standards{BSD, errno.h}
@errno{ETOOMANYREFS, 59, Too many references: cannot splice}
@end deftypevr

@deftypevr Macro int ETIMEDOUT
@standards{BSD, errno.h}
@errno{ETIMEDOUT, 60, Connection timed out}
A socket operation with a specified timeout received no response during
the timeout period.
@end deftypevr

@deftypevr Macro int ECONNREFUSED
@standards{BSD, errno.h}
@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

@deftypevr Macro int ELOOP
@standards{BSD, errno.h}
@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

@deftypevr Macro int ENAMETOOLONG
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EHOSTDOWN
@standards{BSD, errno.h}
@errno{EHOSTDOWN, 64, Host is down}
The remote host for a requested network connection is down.
@end deftypevr

@deftypevr Macro int EHOSTUNREACH
@standards{BSD, errno.h}
@errno{EHOSTUNREACH, 65, No route to host}
The remote host for a requested network connection is not reachable.
@end deftypevr

@deftypevr Macro int ENOTEMPTY
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EPROCLIM
@standards{BSD, errno.h}
@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

@deftypevr Macro int EUSERS
@standards{BSD, errno.h}
@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

@deftypevr Macro int EDQUOT
@standards{BSD, errno.h}
@errno{EDQUOT, 69, Disk quota exceeded}
The user's disk quota was exceeded.
@end deftypevr

@deftypevr Macro int ESTALE
@standards{BSD, errno.h}
@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

@deftypevr Macro int EREMOTE
@standards{BSD, errno.h}
@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

@deftypevr Macro int EBADRPC
@standards{BSD, errno.h}
@errno{EBADRPC, 72, RPC struct is bad}
@end deftypevr

@deftypevr Macro int ERPCMISMATCH
@standards{BSD, errno.h}
@errno{ERPCMISMATCH, 73, RPC version wrong}
@end deftypevr

@deftypevr Macro int EPROGUNAVAIL
@standards{BSD, errno.h}
@errno{EPROGUNAVAIL, 74, RPC program not available}
@end deftypevr

@deftypevr Macro int EPROGMISMATCH
@standards{BSD, errno.h}
@errno{EPROGMISMATCH, 75, RPC program version wrong}
@end deftypevr

@deftypevr Macro int EPROCUNAVAIL
@standards{BSD, errno.h}
@errno{EPROCUNAVAIL, 76, RPC bad procedure for program}
@end deftypevr

@deftypevr Macro int ENOLCK
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EFTYPE
@standards{BSD, errno.h}
@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

@deftypevr Macro int EAUTH
@standards{BSD, errno.h}
@errno{EAUTH, 80, Authentication error}
@end deftypevr

@deftypevr Macro int ENEEDAUTH
@standards{BSD, errno.h}
@errno{ENEEDAUTH, 81, Need authenticator}
@end deftypevr

@deftypevr Macro int ENOSYS
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int ENOTSUP
@standards{POSIX.1, errno.h}
@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

@deftypevr Macro int EILSEQ
@standards{ISO, errno.h}
@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

@deftypevr Macro int EBACKGROUND
@standards{GNU, errno.h}
@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

@deftypevr Macro int EDIED
@standards{GNU, errno.h}
@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

@deftypevr Macro int ED
@standards{GNU, errno.h}
@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

@deftypevr Macro int EGREGIOUS
@standards{GNU, errno.h}
@errno{EGREGIOUS, 103, You really blew it this time}
You did @strong{what}?
@end deftypevr

@deftypevr Macro int EIEIO
@standards{GNU, errno.h}
@errno{EIEIO, 104, Computer bought the farm}
Go home and have a glass of warm, dairy-fresh milk.
@end deftypevr

@deftypevr Macro int EGRATUITOUS
@standards{GNU, errno.h}
@errno{EGRATUITOUS, 105, Gratuitous error}
This error code has no purpose.
@end deftypevr

@deftypevr Macro int EBADMSG
@standards{XOPEN, errno.h}
@errno{EBADMSG, 107, Bad message}
@end deftypevr

@deftypevr Macro int EIDRM
@standards{XOPEN, errno.h}
@errno{EIDRM, 108, Identifier removed}
@end deftypevr

@deftypevr Macro int EMULTIHOP
@standards{XOPEN, errno.h}
@errno{EMULTIHOP, 109, Multihop attempted}
@end deftypevr

@deftypevr Macro int ENODATA
@standards{XOPEN, errno.h}
@errno{ENODATA, 110, No data available}
@end deftypevr

@deftypevr Macro int ENOLINK
@standards{XOPEN, errno.h}
@errno{ENOLINK, 111, Link has been severed}
@end deftypevr

@deftypevr Macro int ENOMSG
@standards{XOPEN, errno.h}
@errno{ENOMSG, 112, No message of desired type}
@end deftypevr

@deftypevr Macro int ENOSR
@standards{XOPEN, errno.h}
@errno{ENOSR, 113, Out of streams resources}
@end deftypevr

@deftypevr Macro int ENOSTR
@standards{XOPEN, errno.h}
@errno{ENOSTR, 114, Device not a stream}
@end deftypevr

@deftypevr Macro int EOVERFLOW
@standards{XOPEN, errno.h}
@errno{EOVERFLOW, 115, Value too large for defined data type}
@end deftypevr

@deftypevr Macro int EPROTO
@standards{XOPEN, errno.h}
@errno{EPROTO, 116, Protocol error}
@end deftypevr

@deftypevr Macro int ETIME
@standards{XOPEN, errno.h}
@errno{ETIME, 117, Timer expired}
@end deftypevr

@deftypevr Macro int ECANCELED
@standards{POSIX.1, errno.h}
@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.}

@deftypevr Macro int ERESTART
@standards{Linux???, errno.h}
@errno{ERESTART, ???/85, Interrupted system call should be restarted}
@end deftypevr

@deftypevr Macro int ECHRNG
@standards{Linux???, errno.h}
@errno{ECHRNG, ???/44, Channel number out of range}
@end deftypevr

@deftypevr Macro int EL2NSYNC
@standards{Obsolete, errno.h}
@errno{EL2NSYNC, ???/45, Level 2 not synchronized}
@end deftypevr

@deftypevr Macro int EL3HLT
@standards{Obsolete, errno.h}
@errno{EL3HLT, ???/46, Level 3 halted}
@end deftypevr

@deftypevr Macro int EL3RST
@standards{Obsolete, errno.h}
@errno{EL3RST, ???/47, Level 3 reset}
@end deftypevr

@deftypevr Macro int ELNRNG
@standards{Linux???, errno.h}
@errno{ELNRNG, ???/48, Link number out of range}
@end deftypevr

@deftypevr Macro int EUNATCH
@standards{Linux???, errno.h}
@errno{EUNATCH, ???/49, Protocol driver not attached}
@end deftypevr

@deftypevr Macro int ENOCSI
@standards{Linux???, errno.h}
@errno{ENOCSI, ???/50, No CSI structure available}
@end deftypevr

@deftypevr Macro int EL2HLT
@standards{Obsolete, errno.h}
@errno{EL2HLT, ???/51, Level 2 halted}
@end deftypevr

@deftypevr Macro int EBADE
@standards{Linux???, errno.h}
@errno{EBADE, ???/52, Invalid exchange}
@end deftypevr

@deftypevr Macro int EBADR
@standards{Linux???, errno.h}
@errno{EBADR, ???/53, Invalid request descriptor}
@end deftypevr

@deftypevr Macro int EXFULL
@standards{Linux???, errno.h}
@errno{EXFULL, ???/54, Exchange full}
@end deftypevr

@deftypevr Macro int ENOANO
@standards{Linux???, errno.h}
@errno{ENOANO, ???/55, No anode}
@end deftypevr

@deftypevr Macro int EBADRQC
@standards{Linux???, errno.h}
@errno{EBADRQC, ???/56, Invalid request code}
@end deftypevr

@deftypevr Macro int EBADSLT
@standards{Linux???, errno.h}
@errno{EBADSLT, ???/57, Invalid slot}
@end deftypevr

@deftypevr Macro int EDEADLOCK
@standards{Linux???, errno.h}
@errno{EDEADLOCK, ???/58, File locking deadlock error}
@end deftypevr

@deftypevr Macro int EBFONT
@standards{Linux???, errno.h}
@errno{EBFONT, ???/59, Bad font file format}
@end deftypevr

@deftypevr Macro int ENONET
@standards{Linux???, errno.h}
@errno{ENONET, ???/64, Machine is not on the network}
@end deftypevr

@deftypevr Macro int ENOPKG
@standards{Linux???, errno.h}
@errno{ENOPKG, ???/65, Package not installed}
@end deftypevr

@deftypevr Macro int EADV
@standards{Linux???, errno.h}
@errno{EADV, ???/68, Advertise error}
@end deftypevr

@deftypevr Macro int ESRMNT
@standards{Linux???, errno.h}
@errno{ESRMNT, ???/69, Srmount error}
@end deftypevr

@deftypevr Macro int ECOMM
@standards{Linux???, errno.h}
@errno{ECOMM, ???/70, Communication error on send}
@end deftypevr

@deftypevr Macro int EDOTDOT
@standards{Linux???, errno.h}
@errno{EDOTDOT, ???/73, RFS specific error}
@end deftypevr

@deftypevr Macro int ENOTUNIQ
@standards{Linux???, errno.h}
@errno{ENOTUNIQ, ???/76, Name not unique on network}
@end deftypevr

@deftypevr Macro int EBADFD
@standards{Linux???, errno.h}
@errno{EBADFD, ???/77, File descriptor in bad state}
@end deftypevr

@deftypevr Macro int EREMCHG
@standards{Linux???, errno.h}
@errno{EREMCHG, ???/78, Remote address changed}
@end deftypevr

@deftypevr Macro int ELIBACC
@standards{Linux???, errno.h}
@errno{ELIBACC, ???/79, Can not access a needed shared library}
@end deftypevr

@deftypevr Macro int ELIBBAD
@standards{Linux???, errno.h}
@errno{ELIBBAD, ???/80, Accessing a corrupted shared library}
@end deftypevr

@deftypevr Macro int ELIBSCN
@standards{Linux???, errno.h}
@errno{ELIBSCN, ???/81, .lib section in a.out corrupted}
@end deftypevr

@deftypevr Macro int ELIBMAX
@standards{Linux???, errno.h}
@errno{ELIBMAX, ???/82, Attempting to link in too many shared libraries}
@end deftypevr

@deftypevr Macro int ELIBEXEC
@standards{Linux???, errno.h}
@errno{ELIBEXEC, ???/83, Cannot exec a shared library directly}
@end deftypevr

@deftypevr Macro int ESTRPIPE
@standards{Linux???, errno.h}
@errno{ESTRPIPE, ???/86, Streams pipe error}
@end deftypevr

@deftypevr Macro int EUCLEAN
@standards{Linux???, errno.h}
@errno{EUCLEAN, ???/117, Structure needs cleaning}
@end deftypevr

@deftypevr Macro int ENOTNAM
@standards{Linux???, errno.h}
@errno{ENOTNAM, ???/118, Not a XENIX named type file}
@end deftypevr

@deftypevr Macro int ENAVAIL
@standards{Linux???, errno.h}
@errno{ENAVAIL, ???/119, No XENIX semaphores available}
@end deftypevr

@deftypevr Macro int EISNAM
@standards{Linux???, errno.h}
@errno{EISNAM, ???/120, Is a named type file}
@end deftypevr

@deftypevr Macro int EREMOTEIO
@standards{Linux???, errno.h}
@errno{EREMOTEIO, ???/121, Remote I/O error}
@end deftypevr

@deftypevr Macro int ENOMEDIUM
@standards{Linux???, errno.h}
@errno{ENOMEDIUM, ???/???, No medium found}
@end deftypevr

@deftypevr Macro int EMEDIUMTYPE
@standards{Linux???, errno.h}
@errno{EMEDIUMTYPE, ???/???, Wrong medium type}
@end deftypevr

@deftypevr Macro int ENOKEY
@standards{Linux, errno.h}
@errno{ENOKEY, ???/???, Required key not available}
@end deftypevr

@deftypevr Macro int EKEYEXPIRED
@standards{Linux, errno.h}
@errno{EKEYEXPIRED, ???/???, Key has expired}
@end deftypevr

@deftypevr Macro int EKEYREVOKED
@standards{Linux, errno.h}
@errno{EKEYREVOKED, ???/???, Key has been revoked}
@end deftypevr

@deftypevr Macro int EKEYREJECTED
@standards{Linux, errno.h}
@errno{EKEYREJECTED, ???/???, Key was rejected by service}
@end deftypevr

@deftypevr Macro int EOWNERDEAD
@standards{Linux, errno.h}
@errno{EOWNERDEAD, ???/???, Owner died}
@end deftypevr

@deftypevr Macro int ENOTRECOVERABLE
@standards{Linux, errno.h}
@errno{ENOTRECOVERABLE, ???/???, State not recoverable}
@end deftypevr

@deftypevr Macro int ERFKILL
@standards{Linux, errno.h}
@errno{ERFKILL, ???/???, Operation not possible due to RF-kill}
@end deftypevr

@deftypevr Macro int EHWPOISON
@standards{Linux, errno.h}
@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.

@deftypefun {char *} strerror (int @var{errnum})
@standards{ISO, string.h}
@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

@deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n})
@standards{GNU, string.h}
@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

@deftypefun void perror (const char *@var{message})
@standards{ISO, stdio.h}
@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}.

@deftypevar {char *} program_invocation_name
@standards{GNU, errno.h}
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

@deftypevar {char *} program_invocation_short_name
@standards{GNU, errno.h}
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}.

@deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{})
@standards{GNU, error.h}
@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

@deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{})
@standards{GNU, error.h}
@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}.

@deftypevar {void (*error_print_progname)} (void)
@standards{GNU, error.h}
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

@deftypevar {unsigned int} error_message_count
@standards{GNU, error.h}
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

@deftypevar int error_one_per_line
@standards{GNU, error.h}
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.

@deftypefun void warn (const char *@var{format}, @dots{})
@standards{BSD, err.h}
@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

@deftypefun void vwarn (const char *@var{format}, va_list @var{ap})
@standards{BSD, err.h}
@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

@deftypefun void warnx (const char *@var{format}, @dots{})
@standards{BSD, err.h}
@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

@deftypefun void vwarnx (const char *@var{format}, va_list @var{ap})
@standards{BSD, err.h}
@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

@deftypefun void err (int @var{status}, const char *@var{format}, @dots{})
@standards{BSD, err.h}
@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

@deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap})
@standards{BSD, err.h}
@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

@deftypefun void errx (int @var{status}, const char *@var{format}, @dots{})
@standards{BSD, err.h}
@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

@deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap})
@standards{BSD, err.h}
@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
