NAZWA¶
errno - numer ostatniego błędu
SKŁADNIA¶
#include <errno.h>
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Plik nagłówkowy
<errno.h> definiuje zmienną
całkowitą
errno, która jest ustawiana w razie
błędu przez wywołania systemowe oraz pewne funkcje biblioteczne
tak, aby zaznaczyć, co poszło źle. Wartość ta jest
istotna tylko gdy wywołanie zwróciło błąd (zwykle
-1), ale funkcja biblioteczna, która zakończyła się
sukcesem, także może zmienić
errno.
Czasami, gdy -1 jest także poprawną wartością zwracaną,
aby wykryć błędy należy przed wywołaniem
wyzerować
errno.
errno jest definiowana przez standard ISO C jako modyfikowalna
l-wartość typu
int, które nie może zostać
jawnie zadeklarowana;
errno może być makrem.
Wartość
errno jest lokalna w obrębie wątku, jej
zmiana w jednym wątku nie wpływa na wartość w innym.
Wszystkie poprawne numery błędów są różne od zera,
funkcja biblioteczna nigdy nie przypisuje
errno zera. Każdej
nazwie błędu określonej przez POSIX.1 musi odpowiadać inna
wartość z wyjątkiem
EAGAIN i
EWOULDBLOCK,
które mogą mieć tę samą wartość.
POSIX.1 (wydanie z 2001 roku) wyszczególnia następujące
symboliczne nazwy błędów. Dwie z nich
EDOM oraz
ERANGE są zawarte także w standardzie ISO C. Pierwsza
poprawka ISO C definiuje dodatkowy numer błędu
EILSEQ dla
kodowania błędów w wielobajtowych lub szerokich znakach.
- E2BIG
- Lista argumentów za długa
- EACCES
- Brak dostępu
- EADDRINUSE
- Adres jest używany
- EADDRNOTAVAIL
- Adres niedostępny
- EAFNOSUPPORT
- Niewspierana rodzina adresów
- EAGAIN
- Zasoby chwilowo niedostępne
- EALREADY
- Połączenie trwa
- EBADF
- Błędny deskryptor pliku
- EBADMSG
- Błędny komunikat
- EBUSY
- Zasób zajęty
- ECANCELED
- Operacja anulowana
- ECHILD
- Brak procesów potomnych
- ECONNABORTED
- Połączenie przerwane
- ECONNREFUSED
- Odmowa połączenia
- ECONNRESET
- Połączenie zrestartowane
- EDEADLK
- Uniknięto zakleszczenia zasobów
- EDESTADDRREQ
- Wymagany jest adres docelowy
- EDOM
- Błąd dziedziny
- EDQUOT
- Zarezerwowane
- EEXIST
- Plik istnieje
- EFAULT
- Błędny adres
- EFBIG
- Plik jest za duży
- EHOSTUNREACH
- Host jest nieosiągalny
- EIDRM
- Usunięto identyfikator
- EILSEQ
- Nieprawidłowa kolejność bajtów
- EINPROGRESS
- Operacja jest już wykonywana
- EINTR
- Przerwane wywołanie funkcji
- EINVAL
- Zły argument
- EIO
- Błąd wejścia/wyjścia
- EISCONN
- Gniazdo jest połączone
- EISDIR
- Jest katalogiem
- ELOOP
- Za dużo poziomów dowiązań
symbolicznych
- EMFILE
- Za dużo otwartych plików
- EMLINK
- Za dużo dowiązań
- EMSGSIZE
- Nieodpowiednia długość bufora
komunikatów
- EMULTIHOP
- Zarezerwowane
- ENAMETOOLONG
- Za długa nazwa pliku
- ENETDOWN
- Sieć jest wyłączona
- ENETRESET
- Połączenie przerwane przez sieć
- ENETUNREACH
- Sieć jest niedostępna
- ENFILE
- Za dużo otwartych plików w systemie
- ENOBUFS
- Brak dostępnej przestrzeni buforów
- ENODATA
- Brak komunikatów w nagłówku czytanej kolejki
STREAM
- ENODEV
- Nie ma takiego urządzenia
- ENOENT
- Nie ma takiego pliku ani katalogu
- ENOEXEC
- Błędny format pliku wykonywalnego
- ENOLCK
- Brak dostępnych blokad
- ENOLINK
- Zarezerwowane
- ENOMEM
- Brak miejsca
- ENOMSG
- Brak komunikatów zadanego rodzaju
- ENOPROTOOPT
- Protokół jest niedostępny
- ENOSPC
- Brak miejsca na urządzeniu
- ENOSR
- Brak zasobów STREAM
- ENOSTR
- To nie jest STREAM
- ENOSYS
- Niezaimplementowana funkcja
- ENOTCON
- Gniazdo nie jest połączone
- ENOTDIR
- To nie jest katalog
- ENOTEMPTY
- Katalog nie jest pusty
- ENOTSOCK
- To nie jest gniazdo
- ENOTSUP
- Niedostępne
- ENOTTY
- Nieodpowiednia operacja kontroli
wejścia/wyjścia
- ENXIO
- Brak urządzenia lub adresu
- EOPNOTSUPP
- Operacja niedozwolona na gnieździe
- EOVERFLOW
- Wartość za duża dla typu danych
- EPERM
- Operacja niedozwolona
- EPIPE
- Przerwany potok
- EPROTO
- Błąd protokołu
- EPROTONOSUPPORT
- Protokół nie wspierany
- EPROTOTYPE
- Niewłaściwy rodzaj protokołu dla
gniazda
- ERANGE
- Rezultat zbyt duży
- EROFS
- System plików wyłącznie do odczytu
- ESPIPE
- Nieprawidłowe przesunięcie
- ESRCH
- Nie ma takiego procesu
- ESTALE
- Zarezerwowane
- ETIME
- Timeout ioctl() dla STREAM
- ETIMEDOUT
- Operacja przeterminowana
- ETXTBSY
- Plik tekstowy jest zajęty
- EWOULDBLOCK
- Operacja blokująca (może to być ta sama
wartość, co dla EAGAIN)
- EXDEV
- Nieprawidłowe dowiązanie
UWAGI¶
Powszechnym błędem jest robienie
if (somecall() == -1) {
printf("somecall() zwróciło błąd\n");
if (errno == ...) { ... }
}
gdzie
errno niekoniecznie musi mieć tę samą
wartość, jaką miało po powrocie z
somecall() (tj.
mogła zostać zmieniona przez
printf()). Jeżeli
wartość
errno powinna być utrzymana pomiędzy
wywołaniami funkcji, musi być zachowywana:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() zwróciło błąd\n");
if (errsv == ...) { ... }
}
Powszechnie w tradycyjnym C deklarowało się ręcznie
errno
(np.
extern int errno) zamiast włączać plik
<errno.h>.
Nie rób tego. To nie będzie
działało z nowoczesnymi wersjami biblioteki C. Jednakże na
(bardzo) starych systemach Unix,
<errno.h> może nie
istnieć i ta deklaracja będzie potrzebna,
ZOBACZ TAKŻE¶
perror(3),
strerror(3)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 3 errno
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.