erl_error
(erl_interface)This module contains some error printing routines taken from "Advanced Programming in the UNIX Environment" by W. Richard Stevens.
These functions are all called in the same manner as
printf()
, that is, with a string containing format
specifiers followed by a list of corresponding arguments. All output from
these functions is to stderr
.
Functions
const char *FormatStr;
The message provided by the caller is printed. This
function is simply a wrapper for fprintf()
.
const char *FormatStr;
Use this function when a fatal error has occurred that
is not because of a system call. The message provided by the
caller is printed and the process terminates with exit
value 1
. This function does not return.
const char *FormatStr;
Use this function after a failed system call. The message provided by the caller is printed followed by a string describing the reason for failure.
const char *FormatStr;
Use this function after a failed system call. The message
provided by the caller is printed followed by a string
describing the reason for failure, and the process
terminates with exit value 1
. This function does not
return.
Error Reporting
Most functions in Erl_Interface
report failures to the caller by
returning some otherwise meaningless value (typically
NULL
or a negative number). As this only tells you that things did not
go well, examine the error code in erl_errno
if you
want to find out more about the failure.
Functions
erl_errno
is initially (at program startup) zero
and is then set by many Erl_Interface
functions on failure to
a non-zero error code to indicate what kind of error it
encountered. A successful function call can change
erl_errno
(by calling some other function that
fails), but no function does never set it to zero. This means
that you cannot use erl_errno
to see if a
function call failed. Instead, each function reports failure
in its own way (usually by returning a negative number or
NULL
), in which case you can examine
erl_errno
for details.
erl_errno
uses the error codes defined in your
system's <errno.h>
.
Note!
erl_errno
is a "modifiable lvalue" (just
like ISO C defines errno
to be) rather than a
variable. This means it can be implemented as a macro
(expanding to, for example, *_erl_errno()
).
For reasons of thread safety (or task safety), this is exactly what
we do on most platforms.