The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at errno, _doserrno, _sys_errlist, and _sys_nerr.
Global macros that hold error codes that are set during program execution, and string equivalents of the error codes for display.
Syntax
#define errno (*_errno())
#define _doserrno (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())
Remarks
Both errno and _doserrno are set to 0 by the runtime during program startup. 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. Run-time library calls that set errno on an error do not clear errno on success. Always clear errno by calling _set_errno(0) immediately before a call that may set it, and check it immediately after the call.
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, _doserrno stores the operating-system error-code equivalents of errno codes. For most non-I/O operations, the value of _doserrno is not set.
Each errno value is associated with an error message in _sys_errlist that can be printed by using one of the perror functions, or stored in a string by using one of the strerror or strerror_s functions. The perror and strerror functions use the _sys_errlist array and _sys_nerr—the number of elements in _sys_errlist—to process error information. Direct access to _sys_errlist and _sys_nerr is deprecated for code-security reasons. We recommend that you use the more secure, functional versions instead of the global macros, as shown here:
| Global Macro | Functional Equivalents |
|---|---|
_doserrno |
_get_doserrno, _set_doserrno |
errno |
_get_errno, _set_errno |
_sys_errlist, _sys_nerr |
strerror_s, _strerror_s, _wcserror_s, __wcserror_s |
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.
All errno values in the following table are predefined constants in <errno.h>, and are UNIX-compatible. Only ERANGE, EILSEQ, and EDOM are specified in the ISO C99 standard.
| Constant | System error message | Value |
|---|---|---|
EPERM |
Operation not permitted | 1 |
ENOENT |
No such file or directory | 2 |
ESRCH |
No such process | 3 |
EINTR |
Interrupted function | 4 |
EIO |
I/O error | 5 |
ENXIO |
No such device or address | 6 |
E2BIG |
Argument list too long | 7 |
ENOEXEC |
Exec format error | 8 |
EBADF |
Bad file number | 9 |
ECHILD |
No spawned processes | 10 |
EAGAIN |
No more processes or not enough memory or maximum nesting level reached | 11 |
ENOMEM |
Not enough memory | 12 |
EACCES |
Permission denied | 13 |
EFAULT |
Bad address | 14 |
EBUSY |
Device or resource busy | 16 |
EEXIST |
File exists | 17 |
EXDEV |
Cross-device link | 18 |
ENODEV |
No such device | 19 |
ENOTDIR |
Not a directory | 20 |
EISDIR |
Is a directory | 21 |
EINVAL |
Invalid argument | 22 |
ENFILE |
Too many files open in system | 23 |
EMFILE |
Too many open files | 24 |
ENOTTY |
Inappropriate I/O control operation | 25 |
EFBIG |
File too large | 27 |
ENOSPC |
No space left on device | 28 |
ESPIPE |
Invalid seek | 29 |
EROFS |
Read-only file system | 30 |
EMLINK |
Too many links | 31 |
EPIPE |
Broken pipe | 32 |
EDOM |
Math argument | 33 |
ERANGE |
Result too large | 34 |
EDEADLK |
Resource deadlock would occur | 36 |
EDEADLOCK |
Same as EDEADLK for compatibility with older Microsoft C versions | 36 |
ENAMETOOLONG |
Filename too long | 38 |
ENOLCK |
No locks available | 39 |
ENOSYS |
Function not supported | 40 |
ENOTEMPTY |
Directory not empty | 41 |
EILSEQ |
Illegal byte sequence | 42 |
STRUNCATE |
String was truncated | 80 |
Requirements
| Global macro | Required header | Optional header |
|---|---|---|
errno |
<errno.h> or <stdlib.h>, <cerrno> or <cstdlib> (C++) | |
_doserrno, _sys_errlist, _sys_nerr |
<stdlib.h>, <cstdlib> (C++) | <errno.h>, <cerrno> (C++) |
The _doserrno, _sys_errlist, and _sys_nerr macros are Microsoft extensions. For more compatibility information, see Compatibility.
See Also
Global Variables
errno Constants
perror, _wperror
strerror, _strerror, _wcserror, __wcserror
strerror_s, _strerror_s, _wcserror_s, __wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno