_doserrno, errno, _sys_errlist, and _sys_nerr
These global variables hold error codes used by the perror and strerror functions for printing error messages. Manifest constants for these variables are declared in STDLIB.H as follows:
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
errno is set on an error in a system-level call. Because errno holds the value for the last call that set it, this value may be changed by succeeding calls. Always check errno immediately before and after a call that may set it. All errno values, defined as manifest constants in ERRNO.H, are UNIX-compatible. The values valid for 32-bit Windows applications are a subset of these UNIX values.
On an error, errno is not necessarily set to the same value as the error code returned by a system call. For I/O operations only, use _doserrno to access the operating-system error-code equivalents of errno codes. For other operations the value of _doserrno is undefined.
Each errno value is associated with an error message that can be printed using perror or stored in a string using strerror. perror and strerror use the _sys_errlist array and _sys_nerr, the number of elements in _sys_errlist, to process error information.
Library math routines set errno by calling _matherr. To handle math errors differently, write your own routine according to the _matherr reference description and name it _matherr.
The following errno values are compatible with 32-bit Windows applications. Only ERANGE and EDOM are specified in the ANSI standard.
Constant | System Error Message | Value |
E2BIG | Argument list too long | 7 |
EACCES | Permission denied | 13 |
EAGAIN | No more processes or not enough memory or maximum nesting level reached | 11 |
EBADF | Bad file number | 9 |
ECHILD | No spawned processes | 10 |
EDEADLOCK | Resource deadlock would occur | 36 |
EDOM | Math argument | 33 |
EEXIST | File exists | 17 |
EINVAL | Invalid argument | 22 |
EMFILE | Too many open files | 24 |
ENOENT | No such file or directory | 2 |
ENOEXEC | Exec format error | 8 |
ENOMEM | Not enough memory | 12 |
ENOSPC | No space left on device | 28 |
ERANGE | Result too large | 34 |
EXDEV | Cross-device link | 18 |