errno.h

errno.h is a header file in the standard library of the C programming language. It defines macros for reporting and retrieving error conditions using the symbol errno (short for "error number").[1]

errno acts like an integer variable. A value (the error number) is stored in errno by certain library functions when they detect errors. At program startup, the value stored is zero. Library functions store only values greater than zero. Any library function can alter the value stored before return, whether or not they detect errors.[2] Most functions indicate that they detected an error by returning a special value, typically NULL for functions that return pointers, and -1 for functions that return integers. A few functions require the caller to preset errno to zero and test it afterwards to see if an error was detected.

The errno macro expands to an lvalue with type int, sometimes with the extern and/or volatile type specifiers depending upon the platform.[3] Originally this was a static memory location, but macros are almost always used today to allow for multi-threading, so that each thread will see its own thread-local error number.

The header file also defines macros that expand to integer constants that represent the error codes. The C standard library only requires three to be defined:[2]

EDOM

Results from a parameter outside a function's domain, e.g. sqrt(-1)

ERANGE

Results from a result outside a function's range, e.g. strtol("0xfffffffff", NULL, 0) on systems with a 32-bit wide long

EILSEQ (Required since 1994 Amendment 1 to C89 standard)[4]

Results from an illegal byte sequence, e.g. mbstowcs(buf, "\xff", 1) on systems that use UTF-8.

POSIX compliant operating systems like AIX, Linux or Solaris include many other error values, many of which are used much more often than the above ones, such as EACCES for when a file cannot be opened for reading.[5] C++11 additionally defines many of the same values found within the POSIX specification.[6]

Traditionally, the first page of Unix system manuals, named intro(2), lists all errno.h macros, but this is not the case with Linux, where these macros are instead listed in the errno(3).[7]

An errno can be translated to a descriptive string using strerror (defined in string.h) or a BSD extension called sys_errlist. The translation can be printed directly to the standard error stream using perror (defined in stdio.h). As strerror in many Unix-like systems is not thread-safe, a thread-safe version strerror_r is used, but conflicting definitions from POSIX and GNU makes it even less portable than the sys_errlist table.[8]

GLIBC macros

The GNU C library (GLIBC) provides the additional POSIX error values macros in the header file errno.h.[9] These are the descriptions of the macros provided by strerror, excluding 41 and 58 as they are not in the POSIX standard:

EPERM (1)

Operation not permitted

ENOENT (2)

No such file or directory

ESRCH (3)

No such process

EINTR (4)

Interrupted system call

EIO (5)

Input/output error

ENXIO (6)

No such device or address

E2BIG (7)

Argument list too long

ENOEXEC (8)

Exec format error

EBADF (9)

Bad file descriptor

ECHILD (10)

No child processes

EAGAIN (11)

Resource temporarily unavailable

ENOMEM (12)

Cannot allocate memory

EACCES (13)

Permission denied

EFAULT (14)

Bad address

ENOTBLK (15)

Block device required

EBUSY (16)

Device or resource busy

EEXIST (17)

File exists

EXDEV (18)

Invalid cross-device link

ENODEV (19)

No such device

ENOTDIR (20)

Not a directory

EISDIR (21)

Is a directory

EINVAL (22)

Invalid argument

ENFILE (23)

Too many open files in system

EMFILE (24)

Too many open files

ENOTTY (25)

Inappropriate ioctl for device

ETXTBSY (26)

Text file busy

EFBIG (27)

File too large

ENOSPC (28)

No space left on device

ESPIPE (29)

Illegal seek

EROFS (30)

Read-only file system

EMLINK (31)

Too many links

EPIPE (32)

Broken pipe

EDOM (33)

Numerical argument out of domain

ERANGE (34)

Numerical result out of range

EDEADLK (35)

Resource deadlock avoided

ENAMETOOLONG (36)

File name too long

ENOLCK (37)

No locks available

ENOSYS (38)

Function not implemented

ENOTEMPTY (39)

Directory not empty

ELOOP (40)

Too many levels of symbolic links

ENOMSG (42)

No message of desired type

EIDRM (43)

Identifier removed

ECHRNG (44)

Channel number out of range

EL2NSYNC (45)

Level 2 not synchronized

EL3HLT (46)

Level 3 halted

EL3RST (47)

Level 3 reset

ELNRNG (48)

Link number out of range

EUNATCH (49)

Protocol driver not attached

ENOCSI (50)

No CSI structure available

EL2HLT (51)

Level 2 halted

EBADE (52)

Invalid exchange

EBADR (53)

Invalid request descriptor

EXFULL (54)

Exchange full

ENOANO (55)

No anode

EBADRQC (56)

Invalid request code

EBADSLT (57)

Invalid slot

EBFONT (59)

Bad font file format

ENOSTR (60)

Device not a stream

ENODATA (61)

No data available

ETIME (62)

Timer expired

ENOSR (63)

Out of streams resources

ENONET (64)

Machine is not on the network

ENOPKG (65)

Package not installed

EREMOTE (66)

Object is remote

ENOLINK (67)

Link has been severed

EADV (68)

Advertise error

ESRMNT (69)

Srmount error

ECOMM (70)

Communication error on send

EPROTO (71)

Protocol error

EMULTIHOP (72)

Multihop attempted

EDOTDOT (73)

RFS specific error

EBADMSG (74)

Bad message

EOVERFLOW (75)

Value too large for defined data type

ENOTUNIQ (76)

Name not unique on network

EBADFD (77)

File descriptor in bad state

EREMCHG (78)

Remote address changed

ELIBACC (79)

Can not access a needed shared library

ELIBBAD (80)

Accessing a corrupted shared library

ELIBSCN (81)

.lib section in a.out corrupted

ELIBMAX (82)

Attempting to link in too many shared libraries

ELIBEXEC (83)

Cannot exec a shared library directly

EILSEQ (84)

Invalid or incomplete multibyte or wide character

ERESTART (85)

Interrupted system call should be restarted

ESTRPIPE (86)

Streams pipe error

EUSERS (87)

Too many users

ENOTSOCK (88)

Socket operation on non-socket

EDESTADDRREQ (89)

Destination address required

EMSGSIZE (90)

Message too long

EPROTOTYPE (91)

Protocol wrong type for socket

ENOPROTOOPT (92)

Protocol not available

EPROTONOSUPPORT (93)

Protocol not supported

ESOCKTNOSUPPORT (94)

Socket type not supported

EOPNOTSUPP (95)

Operation not supported

EPFNOSUPPORT (96)

Protocol family not supported

EAFNOSUPPORT (97)

Address family not supported by protocol

EADDRINUSE (98)

Address already in use

EADDRNOTAVAIL (99)

Cannot assign requested address

ENETDOWN (100)

Network is down

ENETUNREACH (101)

Network is unreachable

ENETRESET (102)

Network dropped connection on reset

ECONNABORTED (103)

Software caused connection abort

ECONNRESET (104)

Connection reset by peer

ENOBUFS (105)

No buffer space available

EISCONN (106)

Transport endpoint is already connected

ENOTCONN (107)

Transport endpoint is not connected

ESHUTDOWN (108)

Cannot send after transport endpoint shutdown

ETOOMANYREFS (109)

Too many references: cannot splice

ETIMEDOUT (110)

Connection timed out

ECONNREFUSED (111)

Connection refused

EHOSTDOWN (112)

Host is down

EHOSTUNREACH (113)

No route to host

EALREADY (114)

Operation already in progress

EINPROGRESS (115)

Operation now in progress

ESTALE (116)

Stale file handle

EUCLEAN (117)

Structure needs cleaning

ENOTNAM (118)

Not a XENIX named type file

ENAVAIL (119)

No XENIX semaphores available

EISNAM (120)

Is a named type file

EREMOTEIO (121)

Remote I/O error

EDQUOT (122)

Disk quota exceeded

ENOMEDIUM (123)

No medium found

EMEDIUMTYPE (124)

Wrong medium type

ECANCELED (125)

Operation canceled

ENOKEY (126)

Required key not available

EKEYEXPIRED (127)

Key has expired

EKEYREVOKED (128)

Key has been revoked

EKEYREJECTED (129)

Key was rejected by service

EOWNERDEAD (130)

Owner died

ENOTRECOVERABLE (131)

State not recoverable

ERFKILL (132)

Operation not possible due to RF-kill

EHWPOISON (133)

Memory page has hardware error

See also

References

  1. International Standard for Programming Language C (C11), ISO/IEC 9899:2011, p. 205
  2. International Standard for Programming Language C (C99), ISO/IEC 9899:1999, p. 186
  3. "Checking for Errors". The GNU C Library (glibc). GNU Project. 2014-02-08. Retrieved 2014-06-25.
  4. "A brief description of Normative Addendum 1". Retrieved 2013-09-12.
  5. errno.h: system error numbers  Base Definitions Reference, The Single UNIX Specification, Version 4 from The Open Group
  6. "Error numbers - cppreference.com". Retrieved 2015-05-08.
  7. Stevens & Rago 2013, p. 14.
  8. McCabe, Colin. "The problem with strerror". www.club.cc.cmu.edu.
  9. "Error Codes (The GNU C Library)". www.gnu.org. Retrieved 2023-10-21.

Bibliography

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.