Kód chyby, _doserrno, _sys_errlist a _sys_nerr
Tyto globální proměnné podržte chybové kódy používané perror a strerror funkce pro tisk chybové zprávy.Bezpečnější funkční verze uvedené v této tabulce by měly použít namísto jejich globální proměnné.
Globální proměnná |
Funkčními ekvivalenty |
---|---|
_doserrno |
|
_errno |
Tyto proměnné jsou deklarovány v STDLIB.H jako
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
Poznámky
errnoa _errno jsou připojeny ke stejné proměnné.errnoje definován s kódem#define errno (*_errno())
errnoje nastavena na chyby při volání na úrovni systému.Protože errno má hodnotu posledního volání, které je tato hodnota změněná následných volání.Vždy zkontrolujte errno bezprostředně před a po volání, které může nastavit.
Na chybu errno není nutně nastavena na stejnou hodnotu jako kód chyby vrácený voláním systému.Operací, pomocí _doserrno přístup ekvivalenty kód chyby operačního systému errno kódy.U většiny operací, non-I/O hodnotu _doserrno nedefinovaná.
Každý errno hodnota je spojen s chybovou zprávu můžete vytisknout pomocí perror nebo uložené v řetězci pomocí strerror.perrora strerror použít _sys_errlist pole a _sys_nerr, počet prvků v _sys_errlist, zpracovat informace o chybě.
Sada rutin matematické knihovny errno voláním _matherr.Chcete-li jiným způsobem zpracování chyb matematické, napsat vlastní rutina podle _matherr referenční popis a název _matherr.
Všechny errno hodnoty, definované jako konstanty předdefinované v kód chyby.H, jsou kompatibilní se systémem UNIX a jsou uvedeny níže.Pouze ERANGE, EILSEQ a EDOM jsou uvedeny ve standardu ANSI.
Konstanta |
Chybová zpráva systému |
Value |
---|---|---|
EPERM |
Operace není povolena. |
1 |
ENOENT |
Tento soubor nebo adresář |
2 |
ESRCH |
Takový proces neexistuje |
3 |
EINTR |
Přerušení funkce |
4 |
EIO |
Chyba I/O |
5 |
ENXIO |
Takové zařízení ani adresa |
6 |
E2BIG |
Seznam argumentů je příliš dlouhý. |
7 |
ENOEXEC |
Chyba formátu exec |
8 |
EBADF |
Chybné číslo souboru |
9 |
ECHILD |
Žádné procesy vytvářený |
10 |
EAGAIN |
Žádné další procesy nebo není dostatek paměti nebo maximální úroveň vnoření |
11 |
ENOMEM |
Není dostatek paměti. |
12 |
EACCES |
Oprávnění byla odepřena |
13 |
EFAULT |
Chybná adresa |
14 |
EBUSY |
Zařízení nebo prostředek je zaneprázdněn |
16 |
EEXIST |
Soubor existuje |
17 |
EXDEV |
Odkaz mezi zařízeními |
18 |
ENODEV |
Žádné takové zařízení |
19 |
ENOTDIR |
Není adresář |
20 |
EISDIR |
Adresář |
21 |
EINVAL |
Neplatný argument |
22 |
ENFILE |
Příliš mnoho souborů, otevřete v systému |
23 |
EMFILE |
Příliš mnoho otevřených souborů |
24 |
ENOTTY |
Nevhodnou operací řízení I/O |
25 |
EFBIG |
Soubor je příliš velký |
27 |
ENOSPC |
Žádné volného místa v zařízení |
28 |
ESPIPE |
Neplatný seek |
29 |
EROFS |
Systém souborů pouze pro čtení |
30 |
EMLINK |
Příliš mnoho odkazů |
31 |
EPIPE |
Přerušený kanál |
32 |
EDOM |
Matematický argument |
33 |
ERANGE |
Výsledek je příliš velký |
34 |
EDEADLK |
Došlo by k zablokování prostředků |
36 |
EDEADLOCK |
Stejné jako EDEADLK pro kompatibilitu se staršími verzemi Microsoft C |
36 |
ENAMETOOLONG |
Název souboru je příliš dlouhý. |
38 |
ENOLCK |
Žádné zámky, které jsou k dispozici |
39 |
ENOSYS |
Funkce není podporována. |
40 |
ENOTEMPTY |
Adresář není prázdný. |
41 |
EILSEQ |
Neplatný bajt sekvence |
42 |
STRUNCATE |
Řetězec byl zkrácen. |
80 |