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 |