Provided by: manpages-pl-dev_0.7-1_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 Zbyt wiele otwartych plików (POSIX.1); zwykle spowodowane przekroczeniem limitu zasobów RLIMIT_NOFILE opisanego w getrlimit(2) 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 Zbyt wiele otwartych plików (POSIX.1); pod Linuksem zwykle jest to rezultat natrafienia na limit /proc/sys/fs/file-max (zob. proc(5)). 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) Zwykle błąd ten jest wynikiem nieistnienia podanej ścieżki lub nieistnienia jednej z części składowej (katalogu) ścieżki lub oznacza, że podana ścieżka jest nieprawidłowym dowiązaniem symbolicznym. 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
errno(1), err(3), error(3), perror(3), strerror(3)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem https://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>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>. 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ą 4.07 oryginału. 2016-03-15 ERRNO(3)