<errno.h> je hlavičkový soubor ve standardní knihovně jazyka C. Definuje makra pro oznamování chyb pomocí symbolu errno (zkratka slov „číslo chyby“).International Standard for Programming Language C (C11), ISO/IEC 9899:2011, p. 205
Symbol errno funguje jako celočíselná proměnná. Knihovní funkce uloží do errno určitou hodnotu (číslo chyby), když odhalí chybu. Při startu programu má errno hodnotu nula. Knihovní funkce používají vždy hodnoty větší než nula. Každá knihovní funkce může před svým ukončením změnit hodnotu errno, bez ohledu na to, zda detekovala chybu.International Standard for Programming Language C (C99), ISO/IEC 9899:1999, p. 186 Většina funkcí indikuje, že detekovaly chybu, vrácením speciální hodnoty, typicky NULL pro funkce, které vracejí ukazatel, nebo -1 pro funkce, které vracejí celá čísla. Některé funkce pro zjištění, zda došlo k chybě, vyžadují, aby volající nastavil před jejich vyvoláním errno na nulu, a po vyvolání hodnotu errno otestoval.
Makro errno se expanduje na l-hodnotu typu int, na některých platformách se specifikátory extern nebo volatile. errno původně byla statická proměnná, ale v systémech s podporou multithreadingu má každé vlákno vlastní proměnnou lokální pro vlákno.
Hlavičkový soubor také definuje makra, která se expandují na celočíselné konstanty reprezentující kódy chyb. Standardní knihovna jazyka C vyžaduje, aby byly definované pouze následující tři makra:
EDOM Hodnota parametru byla mimo definiční obor funkce, např. sqrt(-1) ERANGE Výsledek mimo obor hodnot funkce, například strtol("0xfffffffff", NULL, 0) na systémech, kde má typ long 32 bitů EILSEQ (Požadované od Amendment 1 standardu C89 z roku 1994)Nepovolená posloupnost bajtů, například mbstowcs(buf, "\xff", 1) na systémech, které používají UTF-8.
Operační systémy kompatibilní s normou POSIX, jako AIX, Linux nebo Solaris definují mnoho dalších chybových hodnot, z nichž některé se používá mnohem častěji než výše uvedené, např. EACCES udává, že soubor nelze otevřít pro čtení. C++11 navíc definuje mnoho hodnot, které se vyskytují ve specifikaci POSIX.
První manuálová stránka na unioxvých systémech pojmenovaná intro(2) obsahuje všechna makra z errno.h, v Linuxu však jsou tato makra vypsány v errno(3).
Hodnoty proměnné errno lze převést na textový popis chyby pomocí funkce strerror (definované v hlavičkovém souboru <string.h>) nebo pomocí BSD rozšíření nazývaného sys_errlist. Takto získaný popis chyby lze vypisovat přímo na standardní chybový výstup pomocí funkce perror (definované v <stdio.h>). Protože strerror v mnoha unixových systémech není vláknově bezpečná, používá se vláknově bezpečná verze strerror_r, ale konflikt definic v POSIXu a GNU způsobuje, že její použití je ještě méně přenositelné než použití tabulky sys_errlist.
Posixové chyby GNU libc (GLIBC) poskytuje v hlavičkovém souboru <errno.h> další makra chybových hodnot podle normy POSIX, která jsou shrnuta v následující tabulce.
Symbol Hodnota Popis Český překlad EPERM 1 Operation not permitted Operace není povolena ENOENT 2 No such file or directory Soubor nebo adresář neexistuje ESRCH 3 No such process Neexistující proces EINTR 4 Interrupted system call Přerušené systémové volání EIO 5 Input/output error Chyba vstupu/výstupu ENXIO 6 No such device or address Neexistující zařízení nebo adresa E2BIG 7 Argument list too long Seznam argumentů je příliš dlouhý ENOEXEC 8 Exec format error Chybný formát proveditelného souboru EBADF 9 Bad file descriptor Chybný popisovač souboru ECHILD 10 No child processes Proces nemá žádné potomky EAGAIN 11 Resource temporarily unavailable Prostředek je dočasně nedostupný ENOMEM 12 Cannot allocate memory Nelze alokovat paměť EACCES 13 Permission denied Přístup odmítnut EFAULT 14 Bad address Chybná adresa ENOTBLK 15 Block device required Je požadováno blokové zařízení EBUSY 16 Device or resource busy Zařízení nebo prostředek se používá EEXIST 17 File exists Soubor existuje EXDEV 18 Invalid cross-device link Odkaz na jiné zařízení není povolen ENODEV 19 No such device Zařízení neexistuje ENOTDIR 20 Not a directory Toto není adresář EISDIR 21 Is a directory Toto je adresář EINVAL 22 Invalid argument Neplatný argument ENFILE 23 Too many open files in system V systému je příliš mnoho otevřených souborů EMFILE 24 Too many open files Příliš mnoho otevřených souborů ENOTTY 25 Inappropriate ioctl for device Použité ioctl není pro toto zařízení povolené ETXTBSY 26 Text file busy Textový soubor je používán EFBIG 27 File too large Soubor je příliš velký ENOSPC 28 No space left on device Na zařízení není volné místo ESPIPE 29 Illegal seek Nepovolený seek EROFS 30 Read-only file system Systém souborů je pouze pro čtení EMLINK 31 Too many links Příliš mnoho odkazů EPIPE 32 Broken pipe Roura byla uzavřena EDOM 33 Numerical argument out of domain Numerický argument není v definičním oboru ERANGE 34 Numerical result out of range Numerický výsledek z oboru hodnot EDEADLK 35 Resource deadlock avoided Došlo k vyhnutí se deadlocku pro prostředek ENAMETOOLONG 36 File name too long Jméno souboru je příliš dlouhé ENOLCK 37 No locks available Není dostupný žádný zámek ENOSYS 38 Function not implemented Funkce není implementovaná ENOTEMPTY 39 Directory not empty Adresář není prázdný ELOOP 40 Too many levels of symbolic links Příliš mnoho úrovní symbolického odkazu ENOMSG 42 No message of desired type Zpráva požadovaného typu neexistuje EIDRM 43 Identifier removed Identifikátor byl odstraněn ECHRNG 44 Channel number out of range Číslo kanálu mimo povolený rozsah EL2NSYNC 45 Level 2 not synchronized Úroveň 2 není synchronizovaná EL3HLT 46 Level 3 halted Úroveň 3 zastavena EL3RST 47 Level 3 reset Úroveň 3 resetována ELNRNG 48 Link number out of range Počet odkazů mimo rozsah EUNATCH 49 Protocol driver not attached Ovladač pro protokol není dostupný ENOCSI 50 No CSI structure available Není dostupná žádná CSI struktura EL2HLT 51 Level 2 halted Úroveň 2 zastavena EBADE 52 Invalid exchange Neplatná výměna EBADR 53 Invalid request descriptor Neplatný deskriptor požadavku EXFULL 54 Exchange full Výměna je plná ENOANO 55 No anode Anode neexistuje EBADRQC 56 Invalid request code Neplatný kód požadavku EBADSLT 57 Invalid slot Neplatná pozice EBFONT 59 Bad font file format Chybný formát souboru s fontem ENOSTR 60 Device not a stream Zařízení není proudové ENODATA 61 No data available Žádná data nejsou k dispozici ETIME 62 Timer expired Časovač vypršel ENOSR 63 Out of streams resources Příliš mnoho proudů ENONET 64 Machine is not on the network Stroj není v síti ENOPKG 65 Package not installed Balíček není nainstalovaný EREMOTE 66 Object is remote Objekt není lokální (je vzdálený) ENOLINK 67 Link has been severed Odkaz byl přerušen EADV 68 Advertise error Chyba oznámení ESRMNT 69 Srmount error Chyba srmount ECOMM 70 Communication error on send Komunikační chyba při odesílání EPROTO 71 Protocol error Chyba protokolu EMULTIHOP 72 Multihop attempted Nepovolený multihop EDOTDOT 73 RFS specific error Chyba RFS EBADMSG 74 Bad message Chybná zpráva EOVERFLOW 75 Value too large for defined data type Hodnota přesahuje rozsah definovaného datového typu ENOTUNIQ 76 Name not unique on network Jméno v síti není unikátní EBADFD 77 File descriptor in bad state Popisovač souboru je v chybovém stavu EREMCHG 78 Remote address changed Vzdálená adresa se změnila ELIBACC 79 Can not access a needed shared library Přístup ke sdílené knihovně selhal ELIBBAD 80 Accessing a corrupted shared library Sdílená knihovna je poškozená ELIBSCN 81 .lib sekce in a a.out corrupted Sekce .lib proveditelného souboru je poškozená ELIBMAX 82 Attempting to link in too many shared libraries Bylo požadováno připojení příliš mnoha sdílených knihoven ELIBEXEC 83 Cannot exec a shared library directly Nelze přímo spustit sdílenou knihovnu EILSEQ 84 Invalid or incomplete multibyte or wide character Neplatný nebo neúplný multibajtový nebo široký znak ERESTART 85 Interrupted system call should be restarted Přerušené systémové volání musí být restartováno ESTRPIPE 86 Streams pipe error Chyba proudové roury EUSERS 87 Too many users Příliš mnoho uživatelů ENOTSOCK 88 Socket operation on non-socket Tuto operaci lze provést pouze na soket EDESTADDRREQ 89 Destination address required Je vyžadována cílová adresa EMSGSIZE 90 Message too long Zpráva je příliš dlouhá EPROTOTYPE 91 Protocol wrong type for socket Chybný typ protokolu pro soket ENOPROTOOPT 92 Protocol not available Protokol není dostupný EPROTONOSUPPORT 93 Protocol not supported Protokol není podporovaný ESOCKTNOSUPPORT 94 Socket type not supported Typ soket není podporovaný EOPNOTSUPP 95 Operation not supported Operace není podporovaná EPFNOSUPPORT 96 Protocol family not supported Rodina protokolů není podporovaná EAFNOSUPPORT 97 Address family not supported by protocol Rodina adres není podporovaná protokolem EADDRINUSE 98 Address already in use Adresa je již použita EADDRNOTAVAIL 99 Cannot assign requested address Požadovanou adresu nelze přiřadit ENETDOWN 100 Network is down Síť je mimo provoz ENETUNREACH 101 Network is unreachable Síť je nedosažitelná ENETRESET 102 Network dropped connection on reset Síť ukončila spojení resetem ECONNABORTED 103 Software caused connection abort Ukončení spojení způsobené software ECONNRESET 104 Connection reset by peer Protistrana odmítla spojení ENOBUFS 105 No buffer space available Není dostupný prostor pro buffer EISCONN 106 Transport endpoint is already connected Transportní koncový bod již je připojen ENOTCONN 107 Transport endpoint is not connected Transportní koncový bod není připojen ESHUTDOWN 108 Cannot send after transport endpoint shutdown Po uzavření koncového bodu přenosu nelze poslat data ETOOMANYREFS 109 Too many references: cannot splice Příliš mnoho referencí: nelze spojit ETIMEDOUT 110 Connection timed out Prodleva pro spojení vypršela ECONNREFUSED 111 Connection refused Spojení odmítnuto EHOSTDOWN 112 Host is down Server není v provozu EHOSTUNREACH 113 No route ti host Cesta k serveru neexistuje EALREADY 114 Operation already in progress Operace již probíhá EINPROGRESS 115 Operation now in progress Operace nyní probíhá ESTALE 116 Stale file handle Neplatný popisovač souboru EUCLEAN 117 Structure needs cleaning Strukturu je třeba vyčistit ENOTNAM 118 Not a Xenix named type file Nejedná se o soubor typu XENIX ENAVAIL 119 No Xenix semaphores available Žádný xenixový semafor není dostupný EISNAM 120 Is a named type file Jde o pojmenovaný soubor EREMOTEIO 121 Remote I/O error Vzdálená V/V chyba EDQUOT 122 Disk quota exceeded Disková kvóta překročena ENOMEDIUM 123 No medium found Médium nalezeno EMEDIUMTYPE 124 Wrong medium type Chybný typ média ECANCELED 125 Operation canceled Operace byla zrušena ENOKEY 126 Required key not available Požadovaný klíč není dostupný EKEYEXPIRED 127 Key has expired Platnost klíče vypršela EKEYREVOKED 128 Key has been revoked Platnost klíče byla odvolána EKEYREJECTED 129 Key was rejected by service Klíč byl službou zamítnut EOWNERDEAD 130 Owner died Vlastník skončil ENOTRECOVERABLE 131 State not recoverable Z tohoto stavu se nelze zotavit ERFKILL 132 Operation not possible due to RF-kill Operaci nelze provést kvůli vypnutí rádiového rozhraní EHWPOISON 133 Memory page has hardware error Hardwarová chyba paměťové stránky ENOTSUP 134 Not supported parameter or option Nepodporovaný parametr nebo volba ENOMEDIUM 135 Missing media Médium není dostupné EILSEQ 138 Invalid multibyte sequence Neplatná multibajtová posloupnost EOVERFLOW 139 Value too large Příliš velká hodnota ECANCELED 140 Asynchronous operation stopped before normal completion Asynchronní operace byla zastavena před dokončením ENOTRECOVERABLE 141 State not recoverable Z tohoto stavu se nelze zotavit EOWNERDEAD 142 Previous owner died Předchozí vlastník skončil (zemřel) ESTRPIPE 143 Streams pipe error Chyba při použití prodové roury