Provided by: manpages-pl-dev_0.6-2_all 

NAZWA
errno - numer ostatniego błędu
SKŁADNIA
#include <errno.h>
OPIS
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 (tj. -1 w wypadku większości wywołań systemowych albo -1 lub
NULL w wypadku większości funkcji bibliotecznych), ale funkcja biblioteczna, która zakończyła się
sukcesem, także może zmienić errno.
Poprawne numery błędów są niezerowe; żadne wywołanie systemowe lub funkcja biblioteczne nigdy nie ustawi
errno na zero.
W przypadku niektórych wywołań systemowych i funkcji bibliotecznych (np. getpriority(2)) -1 jest poprawną
wartością zwracaną również w razie powodzenia. W takich wypadkach, aby sprawdzić, czy wywołanie lub
funkcja zakończyły się powodzeniem czy błędem, należy ustawić errno na zero przed wywołaniem, a następnie
- jeżeli wywołanie lub funkcja zwrócą wartość, która mogłaby wskazywać na wystąpienie błędu - sprawdzić,
czy wartość errno jest niezerowa.
errno jest definiowana przez standard ISO C jako modyfikowalna l-wartość typu int, która 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.
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ść.
Poniżej przedstawiono listę nazw błędów, które są zdefiniowane pod Linuksem. Niektóre z nich oznaczono
jako POSIX.1, wskazując, że nazwa błędu jest zdefiniowana przez POSIX.1-2001, lub jako C99, wskazując na
nazwy błędów zdefiniowane przez C99.
E2BIG Lista argumentów za długa (POSIX.1)
EACCES Brak dostępu (POSIX.1)
EADDRINUSE Adres jest już w użyciu (POSIX.1)
EADDRNOTAVAIL Niedostępny adres (POSIX.1)
EAFNOSUPPORT Rodzina adresów nieobsługiwana (POSIX.1)
EAGAIN Zasoby chwilowo niedostępne (może mieć tę samą wartość co EWOULDBLOCK) (POSIX.1)
EALREADY Operacja jest już wykonywana (POSIX.1)
EBADE Błędna wymiana
EBADF Błędny deskryptor pliku (POSIX.1)
EBADFD Deskryptor pliku w złym stanie
EBADMSG Błędny komunikat (POSIX.1)
EBADR Błędny deskryptor żądania
EBADRQC Zły kod żądania
EBADSLT Błędny kanał
EBUSY Urządzenie lub zasoby zajęte (POSIX.1)
ECANCELED Operacja anulowana (POSIX.1)
ECHILD Brak procesów potomnych (POSIX.1)
ECHRNG Numer kanału poza zakresem
ECOMM Błąd komunikacji podczas wysyłania
ECONNABORTED Połączenie przerwane (POSIX.1)
ECONNREFUSED Połączenie odrzucone (POSIX.1)
ECONNRESET Połączenie zerwane (przez drugą stronę) (POSIX.1)
EDEADLK Uniknięto zakleszczenia zasobów (POSIX.1)
EDEADLOCK Synonim EDEADLK
EDESTADDRREQ Wymagany jest adres docelowy (POSIX.1)
EDOM Argument spoza dziedziny funkcji matematycznej (POSIX.1, C99)
EDQUOT Przekroczony limit dyskowy (POSIX.1)
EEXIST Plik istnieje (POSIX.1)
EFAULT Błędny adres (POSIX.1)
EFBIG Plik zbyt duży (POSIX.1)
EHOSTDOWN Urządzenie jest wyłączone
EHOSTUNREACH Host jest niedostępny (POSIX.1)
EIDRM Identyfikator został usunięty (POSIX.1)
EILSEQ Niepoprawna sekwencja bajtów (POSIX.1, C99)
EINPROGRESS Operacja jest właśnie wykonywana (POSIX.1)
EINTR Przerwane wywołanie systemowe (POSIX.1); patrz signal(7)
EINVAL Zły argument (POSIX.1)
EIO Błąd wejścia/wyjścia (POSIX.1)
EISCONN Gniazdo już jest połączone (POSIX.1)
EISDIR Jest katalogiem (POSIX.1)
EISNAM Jest plikiem nazwanym
EKEYEXPIRED Klucz wygasł
EKEYREJECTED Klucz został odrzucony przez usługę
EKEYREVOKED Klucz został unieważniony
EL2HLT Poziom 2 zatrzymany
EL2NSYNC Poziom 2 niezsynchronizowany
EL3HLT Poziom 3 zatrzymany
EL3RST Poziom 3 zatrzymany
ELIBACC Brak dostępu do wymaganej biblioteki dzielonej
ELIBBAD Próba użycia uszkodzonej biblioteki dzielonej
ELIBMAX Próba łączenia ze zbyt wieloma bibliotekami dzielonymi
ELIBSCN Sekcja lib w a.out jest uszkodzona
ELIBEXEC Nie można bezpośrednio uruchomić biblioteki dzielonej
ELOOP Za duże zagnieżdżenie dowiązań symbolicznych (POSIX.1)
EMEDIUMTYPE Niewłaściwy typ medium
EMFILE Za dużo otwartych plików (POSIX.1)
EMLINK Za dużo dowiązań (POSIX.1)
EMSGSIZE Komunikat za długi (POSIX.1)
EMULTIHOP Próba przejścia przez zbyt wiele ruterów (POSIX.1)
ENAMETOOLONG Za długa nazwa pliku (POSIX.1)
ENETDOWN Sieć jest wyłączona (POSIX.1)
ENETRESET Połączenie zerwane przez sieć (POSIX.1)
ENETUNREACH Sieć jest niedostępna (POSIX.1)
ENFILE Za dużo otwartych plików w systemie (POSIX.1)
ENOBUFS Brak miejsca w buforze (POSIX.1 (opcja XSI STREAMS))
ENODATA Brak dostępnych komunikatów w głównej kolejce odczytu strumieni (POSIX.1)
ENODEV Nie ma takiego urządzenia (POSIX.1)
ENOENT Nie ma takiego pliku ani katalogu (POSIX.1)
ENOEXEC Błędny format pliku wykonywalnego (POSIX.1)
ENOKEY Wymagany klucz niedostępny
ENOLCK Brak dostępnych blokad (POSIX.1)
ENOLINK Połączenie zostało przerwane (POSIX.1)
ENOMEDIUM Brak medium
ENOMEM Nie można przydzielić pamięci (POSIX.1)
ENOMSG Brak komunikatu o pożądanym typie (POSIX.1)
ENONET Maszyna nie znajduje się w tej sieci
ENOPKG Pakiet nie jest zainstalowany
ENOPROTOOPT Protokół niedostępny (POSIX.1)
ENOSPC Brak miejsca na urządzeniu (POSIX.1)
ENOSR Brak dodatkowych strumieni (POSIX.1 (opcja XSI STREAMS))
ENOSTR Nie jest strumieniem (POSIX.1 (opcja XSI STREAMS))
ENOSYS Niezaimplementowana funkcja (POSIX.1)
ENOTBLK Wymagane urządzenie blokowe
ENOTCONN Drugi koniec nie jest połączony (POSIX.1)
ENOTDIR Nie jest katalogiem (POSIX.1)
ENOTEMPTY Katalog nie jest pusty (POSIX.1)
ENOTSOCK Nie jest gniazdem (POSIX.1)
ENOTSUP Operacja nieobsługiwana (POSIX.1)
ENOTTY Niewłaściwa operacja kontrolna (ioctl) wejścia/wyjścia (POSIX.1)
ENOTUNIQ Nazwa nie jest unikatowa w sieci
ENXIO Nie ma takiego urządzenia ani adresu (POSIX.1)
EOPNOTSUPP Operacja na gnieździe nieobsługiwana (POSIX.1)
(ENOTSUP i EOPNOTSUPP mają pod Linuksem tę samą wartość, chociaż zgodnie z POSIX.1 te
wartość powinny się różnić)
EOVERFLOW Wartość za duża dla zdefiniowanego typu danych (POSIX.1)
EPERM Operacja niedozwolona (POSIX.1)
EPFNOSUPPORT Nieobsługiwana rodzina protokołów
EPIPE Przerwany potok (POSIX.1)
EPROTO Błąd protokołu (POSIX.1)
EPROTONOSUPPORT Protokół nieobsługiwany (POSIX.1)
EPROTOTYPE Typ protokołu nie pasuje do gniazda (POSIX.1)
ERANGE Za duży wynik (POSIX.1, C99)
EREMCHG Zmienił się adres drugiego końca
EREMOTE Zdalny obiekt jest obiektem podmontowanym przez NFS
EREMOTEIO Błąd wejścia/wyjścia w odległym systemie
ERESTART Należy wznowić przerwane wywołanie systemowe
EROFS System plików wyłącznie do odczytu (POSIX.1)
ESHUTDOWN Wysyłanie po zamknięciu gniazda jest niemożliwe
ESPIPE Błędne przesunięcie (POSIX.1)
ESOCKTNOSUPPORT Nieobsługiwany typ gniazda
ESRCH Nie ma takiego procesu (POSIX.1)
ESTALE Nieaktualny uchwyt pliku (POSIX.1)
Ten błąd może wystąpić na systemie plików NFS i na innych systemach plików
ESTRPIPE Błąd potoku biblioteki strumieni
ETIME Upłynął czas stopera (POSIX.1 (opcja XSI STREAMS))
(POSIX.1 mówi "Przekroczenie czasu STREAM ioctl(2)")
ETIMEDOUT Przekroczony czas oczekiwania na połączenie (POSIX.1)
ETXTBSY Plik tekstowy zajęty (POSIX.1)
EUCLEAN Struktura wymaga wyczyszczenia
EUNATCH Sterownik protokołu nie jest podłączony
EUSERS Za dużo użytkowników
EWOULDBLOCK Operacja zostałaby zablokowana (może mieć tę samą wartość co EAGAIN) (POSIX.1)
EXDEV Niepoprawne dowiązanie (POSIX.1)
EXFULL Przepełniona wymiana
UWAGI
Powszechnym błędem jest robienie
if (somecall() == -1) {
printf("somecall() zwróciło błąd\n");
if (errno == ...) { ... }
}
ponieważ errno niekoniecznie musi mieć tę samą wartość, jaką miało po powrocie z somecall() (tj. mogła
zostać zmieniona przez printf(3)). 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
err(3), error(3), perror(3), strerror(3)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. Opis projektu, informacje
dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem
http://www.kernel.org/doc/man-pages/.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Adam Byrtek (PTM)
<abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Paweł Krawczyk (eglibc)
<kravietz@ceti.pl>, Jakub Bogusz (eglibc) <qboosh@pld-linux.org> i Robert Luberda <robert@debian.org>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.71 oryginału.
2008-07-09 ERRNO(3)