errno, _doserrno, _sys_errlist i _sys_nerr
Te zmienne globalne, przytrzymaj klawisz używany przez kody błędów perror i strerror funkcje drukowania komunikaty o błędach.Bezpieczniejsze funkcjonalne wersje wymienionych w tej tabeli powinny zostać wykorzystane w miejsce ich zmiennej globalnej.
Zmienna globalna |
Funkcjonalne odpowiedniki |
---|---|
_doserrno |
|
_errno |
Te zmienne są zadeklarowane w STDLIB.H jako
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
Uwagi
errnoi _errno są podłączone do tej samej zmiennej.errnozdefiniowano kod#define errno (*_errno())
errnomożna ustawić na błąd w wywołaniu poziomie systemu.Ponieważ errno posiada wartość dla ostatniego wywołania, które go tej wartości mogą zostać zmienione przez kolejnego wywołania.Zawsze sprawdzaj errno bezpośrednio przed i po wywołania, które mogą go.
W przypadku błędu errno niekoniecznie nie jest ustawiona na tę samą wartość jak kod błędu zwrócony przez wywołanie systemowe.Operacje We/Wy, użyj _doserrno odpowiedniki kod błędu systemu operacyjnego dostęp do errno kodów.Dla większości operacji non-I/O wartości _doserrno jest niezdefiniowane.
Każdy errno wartość jest skojarzony z komunikatem o błędzie, który może być wydrukowany przy użyciu perror lub przechowywane w ciągu za pomocą strerror.perrori strerror używać _sys_errlist tablicy i _sys_nerr, liczba elementów w _sys_errlist, aby przetwarzać informacje o błędzie.
Zestaw procedur math biblioteki errno , wywołując _matherr.Do obsługi błędów matematycznych w różny sposób, należy napisać własne procedury, zgodnie z _matherr odwołać się opis i nadaj mu nazwę _matherr.
Wszystkie errno wartości zdefiniowane jako stałe wstępnie zdefiniowanych w ERRNO.H, są zgodne z systemem UNIX i są wymienione poniżej.Tylko ERANGE, EILSEQ i EDOM są określone w standardzie ANSI.
Stała |
Komunikat o błędzie systemu |
Wartość |
---|---|---|
EPERM |
Operacja nie jest dozwolona. |
1 |
ENOENT |
Nie ma takiego pliku lub katalogu |
2 |
ESRCH |
Nie ma takiego procesu |
3 |
EINTR |
Funkcja przerwane |
4 |
EIO |
Błąd We/Wy |
5 |
ENXIO |
Nie ma takiego urządzenia lub adresu |
6 |
E2BIG |
Lista argumentów jest za długa |
7 |
ENOEXEC |
Błąd formatu pliku wykonywalnego |
8 |
EBADF |
Zły numer pliku |
9 |
ECHILD |
Żadne procesy zduplikowanego |
10 |
EAGAIN |
Nie więcej procesów lub za mało pamięci lub maksymalny poziom zagnieżdżenia osiągnięty |
11 |
ENOMEM |
Za mało pamięci |
12 |
EACCES |
Odmowa uprawnień |
13 |
EFAULT |
Zły adres |
14 |
EBUSY |
Urządzenia lub zasobu jest zajęty |
16 |
EEXIST |
Plik istnieje |
17 |
EXDEV |
Łącze między urządzeniami |
18 |
ENODEV |
Nie ma takiego urządzenia |
19 |
ENOTDIR |
Nie w katalogu |
20 |
EISDIR |
Jest katalogu |
21 |
EINVAL |
Nieprawidłowy argument |
22 |
ENFILE |
Zbyt wiele plików, Otwórz w systemie |
23 |
EMFILE |
Zbyt wiele otwartych plików |
24 |
ENOTTY |
Niewłaściwa operacja sterowania We/Wy |
25 |
EFBIG |
Plik jest zbyt duży |
27 |
ENOSPC |
Brak miejsca na urządzeniu |
28 |
ESPIPE |
Nieprawidłowy seek |
29 |
EROFS |
System plików tylko do odczytu |
30 |
EMLINK |
Za dużo łączy |
31 |
EPIPE |
Przerwany potok |
32 |
EDOM |
Argument matematyczny |
33 |
ERANGE |
Wynik jest za duży |
34 |
EDEADLK |
Wystąpiłoby zakleszczenie zasobu |
36 |
EDEADLOCK |
Takie same, jak EDEADLK dla zgodności z poprzednimi wersjami programu Microsoft C |
36 |
ENAMETOOLONG |
Nazwa pliku jest zbyt długa |
38 |
ENOLCK |
Nie dostępnych blokad |
39 |
ENOSYS |
Funkcja nie jest obsługiwana. |
40 |
ENOTEMPTY |
Katalog nie jest pusty |
41 |
EILSEQ |
Nielegalne bajtowa sekwencja |
42 |
STRUNCATE |
Ciąg został obcięty. |
80 |