Next: strerror_r, Previous: strcspn, Up: Strings [Contents][Index]
strerror, strerror_l—convert error number to stringSynopsis
#include <string.h>
char *strerror(int errnum);
char *strerror_l(int errnum, locale_t locale);
char *_strerror_r(struct _reent ptr, int errnum,
int internal, int *error);
Description
strerror converts the error number errnum into a
string. The value of errnum is usually a copy of errno.
If errnum is not a known error number, the result points to an
empty string.
strerror_l is like strerror but creates a string in a format
as expected in locale locale. If locale is LC_GLOBAL_LOCALE or
not a valid locale object, the behaviour is undefined.
This implementation of strerror prints out the following strings
for each of the values defined in ‘errno.h’:
0Success
E2BIGArg list too long
EACCESPermission denied
EADDRINUSEAddress already in use
EADDRNOTAVAILAddress not available
EADVAdvertise error
EAFNOSUPPORTAddress family not supported by protocol family
EAGAINNo more processes
EALREADYSocket already connected
EBADFBad file number
EBADMSGBad message
EBUSYDevice or resource busy
ECANCELEDOperation canceled
ECHILDNo children
ECOMMCommunication error
ECONNABORTEDSoftware caused connection abort
ECONNREFUSEDConnection refused
ECONNRESETConnection reset by peer
EDEADLKDeadlock
EDESTADDRREQDestination address required
EEXISTFile exists
EDOMMathematics argument out of domain of function
EFAULTBad address
EFBIGFile too large
EHOSTDOWNHost is down
EHOSTUNREACHHost is unreachable
EIDRMIdentifier removed
EILSEQIllegal byte sequence
EINPROGRESSConnection already in progress
EINTRInterrupted system call
EINVALInvalid argument
EIOI/O error
EISCONNSocket is already connected
EISDIRIs a directory
ELIBACCCannot access a needed shared library
ELIBBADAccessing a corrupted shared library
ELIBEXECCannot exec a shared library directly
ELIBMAXAttempting to link in more shared libraries than system limit
ELIBSCN.lib section in a.out corrupted
EMFILEFile descriptor value too large
EMLINKToo many links
EMSGSIZEMessage too long
EMULTIHOPMultihop attempted
ENAMETOOLONGFile or path name too long
ENETDOWNNetwork interface is not configured
ENETRESETConnection aborted by network
ENETUNREACHNetwork is unreachable
ENFILEToo many open files in system
ENOBUFSNo buffer space available
ENODATANo data
ENODEVNo such device
ENOENTNo such file or directory
ENOEXECExec format error
ENOLCKNo lock
ENOLINKVirtual circuit is gone
ENOMEMNot enough space
ENOMSGNo message of desired type
ENONETMachine is not on the network
ENOPKGNo package
ENOPROTOOPTProtocol not available
ENOSPCNo space left on device
ENOSRNo stream resources
ENOSTRNot a stream
ENOSYSFunction not implemented
ENOTBLKBlock device required
ENOTCONNSocket is not connected
ENOTDIRNot a directory
ENOTEMPTYDirectory not empty
ENOTRECOVERABLEState not recoverable
ENOTSOCKSocket operation on non-socket
ENOTSUPNot supported
ENOTTYNot a character device
ENXIONo such device or address
EOPNOTSUPPOperation not supported on socket
EOVERFLOWValue too large for defined data type
EOWNERDEADPrevious owner died
EPERMNot owner
EPIPEBroken pipe
EPROTOProtocol error
EPROTOTYPEProtocol wrong type for socket
EPROTONOSUPPORTUnknown protocol
ERANGEResult too large
EREMOTEResource is remote
EROFSRead-only file system
ESHUTDOWNCan’t send after socket shutdown
ESOCKTNOSUPPORTSocket type not supported
ESPIPEIllegal seek
ESRCHNo such process
ESRMNTSrmount error
ESTRPIPEStrings pipe error
ETIMEStream ioctl timeout
ETIMEDOUTConnection timed out
ETXTBSYText file busy
EWOULDBLOCKOperation would block (usually same as EAGAIN)
EXDEVCross-device link
_strerror_r is a reentrant version of the above.
Returns
This function returns a pointer to a string. Your application must
not modify that string.
Portability
ANSI C requires strerror, but does not specify the strings used
for each error number.
strerror_l is POSIX-1.2008.
Although this implementation of strerror is reentrant (depending
on _user_strerror), ANSI C declares that subsequent calls to
strerror may overwrite the result string; therefore portable
code cannot depend on the reentrancy of this subroutine.
Although this implementation of strerror guarantees a non-null
result with a NUL-terminator, some implementations return NULL
on failure. Although POSIX allows strerror to set errno
to EINVAL on failure, this implementation does not do so (unless
you provide _user_strerror).
POSIX recommends that unknown errnum result in a message
including that value, however it is not a requirement and this
implementation does not provide that information (unless you
provide _user_strerror).
This implementation of strerror provides for user-defined
extensibility. errno.h defines __ELASTERROR, which can be
used as a base for user-defined error values. If the user supplies a
routine named _user_strerror, and errnum passed to
strerror does not match any of the supported values,
_user_strerror is called with three arguments. The first is of
type int, and is the errnum value unknown to strerror.
The second is of type int, and matches the internal argument
of _strerror_r; this should be zero if called from strerror
and non-zero if called from any other function; _user_strerror can
use this information to satisfy the POSIX rule that no other
standardized function can overwrite a static buffer reused by
strerror. The third is of type int *, and matches the
error argument of _strerror_r; if a non-zero value is stored
into that location (usually EINVAL), then strerror will set
errno to that value, and the XPG variant of strerror_r will
return that value instead of zero or ERANGE. _user_strerror
returns a char * value; returning NULL implies that the user
function did not choose to handle errnum. The default
_user_strerror returns NULL for all input values. Note that
_user_sterror must be thread-safe, and only denote errors via the
third argument rather than modifying errno, if strerror and
strerror_r are are to comply with POSIX.
strerror requires no supporting OS subroutines.
Next: strerror_r, Previous: strcspn, Up: Strings [Contents][Index]