Provided by: manpages-pl-dev_4.23.1-1_all 

NAZWA
errno - numer ostatniego błędu
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
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. errno Wartość zmiennej errno jest istotna, tylko gdy wywołanie zwróciło błąd (tj. -1 w wypadku większości wywołań systemowych; -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. Żadne wywołanie systemowe ani żadna funkcja biblioteczna nie ustawiają 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. Numery i nazwy błędów Poprawne numery błędów są liczbami dodatnimi. Plik nagłówkowy <errno.h> definiuje nazwy symboliczna dla wszystkich dodatnich numerów błędów, które mogą wystąpić w zmiennej errno. 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ść. W Linuksie mają one taką samą wartość na wszystkich architekturach. Numery błędów, które odpowiadają nazwom symbolicznym, mogą być różne w różnych systemach uniksowych, a nawet mogą się różnić pomiędzy architekturami linuksowymi. Dlatego poniższa lista nazw błędów nie zawiera numerycznych wartości kodów błędów. Można użyć funkcji perror(3) i strerror(3) do skonwertowania nazw do odpowiadających im tekstowych komunikatów błędów. Używając polecenia errno(1) (z pakietu moreutils) w dowolnym systemie linuksowym, można uzyskać listę wszystkich symbolicznych nazw błędów i odpowiadających im numerów błędów: $ errno -l EPERM 1 Operacja niedozwolona ENOENT 2 Nie ma takiego pliku ani katalogu ESRCH 3 Nie ma takiego procesu EINTR 4 Przerwane wywołanie systemowe EIO 5 Błąd wejścia/wyjścia ... Polecenia errno(1) można także użyć do wyszukania indywidualnych kodów i nazw błędów oraz do wyszukania błędów po ich opisach, tak jak w poniższych przykładach: $ errno 2 ENOENT 2 Nie ma takiego pliku ani katalogu $ errno ESRCH ESRCH 3 Nie ma takiego procesu $ errno -s "brak dostępu" EACCES 13 Brak dostępu Lista nazw błędów W poniższej liście symbolicznych nazw błędów, pewne nazwy oznaczono w następujący sposób: POSIX.1-2001 Nazwa jest definiowana przez POSIX.1-2001, jak i przez późniejsze wersje standardu POSIX.1, chyba że zaznaczono, że jest inaczej. POSIX.1-2008 Nazwa jest definiowana przez POSIX.1-2008, ale nie była obecna we wcześniejszych standardach POSIX.1. C99 Nazwa jest zdefiniowana przez standard C99. Poniżej przedstawiono listę symbolicznych nazw błędów, które są zdefiniowane pod Linuksem: E2BIG Lista argumentów za długa (POSIX.1-2001). EACCES Brak dostępu (POSIX.1-2001). EADDRINUSE Adres jest już w użyciu (POSIX.1-2001). EADDRNOTAVAIL Niedostępny adres (POSIX.1-2001). EAFNOSUPPORT Rodzina adresów nieobsługiwana (POSIX.1-2001). EAGAIN Zasoby chwilowo niedostępne (może mieć tę samą wartość, co EWOULDBLOCK) (POSIX.1-2001). EALREADY Operacja jest już wykonywana (POSIX.1-2001). EBADE Błędna wymiana. EBADF Błędny deskryptor pliku (POSIX.1-2001). EBADFD Deskryptor pliku w złym stanie. EBADMSG Błędny komunikat (POSIX.1-2001). EBADR Błędny deskryptor żądania. EBADRQC Zły kod żądania. EBADSLT Błędny kanał. EBUSY Urządzenie lub zasoby zajęte (POSIX.1-2001). ECANCELED Operacja anulowana (POSIX.1-2001). ECHILD Brak procesów potomnych (POSIX.1-2001). ECHRNG Numer kanału poza zakresem. ECOMM Błąd komunikacji podczas wysyłania. ECONNABORTED Połączenie przerwane (POSIX.1-2001). ECONNREFUSED Połączenie odrzucone (POSIX.1-2001). ECONNRESET Połączenie zerwane (przez drugą stronę) (POSIX.1-2001). EDEADLK Uniknięto zakleszczenia zasobów (POSIX.1-2001). EDEADLOCK Na większość architektur — synonim EDEADLK. Na niektórych architekturach (np. linuksowym MIPS, PowerPC, SPARC) jest to oddzielny kod błędu „Błąd zakleszczenia blokowania pliku”. EDESTADDRREQ Wymagany jest adres docelowy (POSIX.1-2001). EDOM Argument spoza dziedziny funkcji matematycznej (POSIX.1, C99). EDQUOT Przekroczony limit dyskowy (POSIX.1-2001). EEXIST Plik istnieje (POSIX.1-2001). EFAULT Błędny adres (POSIX.1-2001). EFBIG Plik zbyt duży (POSIX.1-2001). EHOSTDOWN Urządzenie jest wyłączone. EHOSTUNREACH Brak trasy do hosta (POSIX.1-2001). EHWPOISON Strona pamięci ma błąd sprzętowy. EIDRM Identyfikator został usunięty (POSIX.1-2001). EILSEQ Błędny lub niepełny znak wielobajtowy (POSIX.1, C99). Komunikat tutaj pokazany pochodzi z opisu tego błędu w bibliotece glibc. W standardzie POSIX.1 ten błąd jest opisany jako „Niepoprawna sekwencja bajtów”. EINPROGRESS Operacja jest właśnie wykonywana (POSIX.1-2001). EINTR Przerwane wywołanie systemowe (POSIX.1-2001); patrz signal(7) EINVAL Zły argument (POSIX.1-2001). EIO Błąd wejścia/wyjścia (POSIX.1-2001). EISCONN Gniazdo już jest połączone (POSIX.1-2001). EISDIR Jest katalogiem (POSIX.1-2001). 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. ELNRNG Numer kanału poza zakresem. ELOOP Za duże zagnieżdżenie dowiązań symbolicznych (POSIX.1-2001). EMEDIUMTYPE Niewłaściwy typ medium. EMFILE Zbyt wiele otwartych plików (POSIX.1-2001); zwykle spowodowane przekroczeniem limitu zasobów RLIMIT_NOFILE opisanego w getrlimit(2). Może być spowodowane również przekroczeniem limitu określonego w /proc/sys/fs/nr_open. EMLINK Za dużo dowiązań (POSIX.1-2001). EMSGSIZE Komunikat za długi (POSIX.1-2001). EMULTIHOP Próba przejścia przez zbyt wiele ruterów (POSIX.1-2001). ENAMETOOLONG Za długa nazwa pliku (POSIX.1-2001). ENETDOWN Sieć jest wyłączona (POSIX.1-2001). ENETRESET Połączenie zerwane przez sieć (POSIX.1-2001). ENETUNREACH Sieć jest niedostępna (POSIX.1-2001). ENFILE Zbyt wiele otwartych plików (POSIX.1-2001); pod Linuksem zwykle jest to rezultat natrafienia na limit /proc/sys/fs/file-max (patrz proc(5)). ENOANO „No anode” — dosł. brak anody (?!). /Domniemywa się, że mogło chodzić tu o wariant „inode” — i-węzła lub o „allocation node” — węzeł alokacji — przyp. tłum./ ENOBUFS Brak miejsca w buforze (POSIX.1 (opcja XSI STREAMS)). ENODATA Atrybut o takiej nazwie nie istnieje lub proces nie ma dostępu do tego atrybutu, zob. xattr(7). W POSIX.1-2001 (opcja XSI STREAMS), błąd ten opisano jako „Nie jest dostępny żaden komunikat na początku kolejki odczytu STREAM” ENODEV Nie ma takiego urządzenia (POSIX.1-2001). ENOENT Nie ma takiego pliku ani katalogu (POSIX.1-2001). 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-2001). ENOKEY Wymagany klucz niedostępny. ENOLCK Brak dostępnych blokad (POSIX.1-2001). ENOLINK Połączenie zostało przerwane (POSIX.1-2001). ENOMEDIUM Brak medium. ENOMEM Za mało miejsca/nie można przydzielić pamięci (POSIX.1-2001). ENOMSG Brak komunikatu o pożądanym typie (POSIX.1-2001). ENONET Maszyna nie znajduje się w tej sieci. ENOPKG Pakiet nie jest zainstalowany. ENOPROTOOPT Protokół niedostępny (POSIX.1-2001). ENOSPC Brak miejsca na urządzeniu (POSIX.1-2001). ENOSR Brak dodatkowych strumieni (POSIX.1 (opcja XSI STREAMS)). ENOSTR Nie jest strumieniem (POSIX.1 (opcja XSI STREAMS)). ENOSYS Niezaimplementowana funkcja (POSIX.1-2001). ENOTBLK Wymagane urządzenie blokowe. ENOTCONN Drugi koniec nie jest połączony (POSIX.1-2001). ENOTDIR Nie jest katalogiem (POSIX.1-2001). ENOTEMPTY Katalog nie jest pusty (POSIX.1-2001). ENOTRECOVERABLE Stan bez możliwości wyjścia (POSIX.1-2008). ENOTSOCK Nie jest gniazdem (POSIX.1-2001). ENOTSUP Operacja nieobsługiwana (POSIX.1-2001). ENOTTY Niewłaściwa operacja kontrolna (ioctl) wejścia/wyjścia (POSIX.1-2001). ENOTUNIQ Nazwa nie jest unikatowa w sieci. ENXIO Nie ma takiego urządzenia ani adresu (POSIX.1-2001). EOPNOTSUPP Operacja na gnieździe nieobsługiwana (POSIX.1-2001). (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-2001). EOWNERDEAD Właściciel zmarł (POSIX.1-2008). EPERM Operacja niedozwolona (POSIX.1-2001). EPFNOSUPPORT Nieobsługiwana rodzina protokołów. EPIPE Przerwany potok (POSIX.1-2001). EPROTO Błąd protokołu (POSIX.1-2001). EPROTONOSUPPORT Protokół nieobsługiwany (POSIX.1-2001). EPROTOTYPE Typ protokołu nie pasuje do gniazda (POSIX.1-2001). ERANGE Za duży wynik (POSIX.1, C99). EREMCHG Zmienił się adres drugiego końca. EREMOTE Obiekt jest obiektem zdalnym (podmontowanym przez NFS). EREMOTEIO Błąd wejścia/wyjścia w odległym systemie. ERESTART Należy wznowić przerwane wywołanie systemowe. ERFKILL Operacja niemożliwa ze względu na RF-kill. EROFS System plików wyłącznie do odczytu (POSIX.1-2001). ESHUTDOWN Wysyłanie po zamknięciu gniazda jest niemożliwe. ESPIPE Błędne przesunięcie (POSIX.1-2001). ESOCKTNOSUPPORT Nieobsługiwany typ gniazda. ESRCH Nie ma takiego procesu (POSIX.1-2001). ESTALE Nieaktualny uchwyt pliku (POSIX.1-2001). 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-2001). ETOOMANYREFS Za dużo odniesień: dowiązanie niemożliwe. ETXTBSY Plik tekstowy zajęty (POSIX.1-2001). 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-2001). EXDEV Błędne dowiązanie pomiędzy różnymi urządzeniami (POSIX.1-2001). EXFULL Przepełniona wymiana.
UWAGI
Powszechnym błędem jest robienie if (jakieśwywołanie() == -1) { printf("jakieśwywołanie() zwróciło błąd\n"); if (errno == ...) { ... } } ponieważ errno niekoniecznie musi mieć tę samą wartość, jaką miało po powrocie z jakieśwywołanie() (tj. mogła zostać zmieniona przez printf(3)). Jeżeli wartość errno powinna być utrzymana pomiędzy wywołaniami funkcji, musi być zachowywana: if (jakieśwywołanie() == -1) { int errsv = errno; printf("jakieśwywołanie() zwróciło błąd\n"); if (errsv == ...) { ... } } Proszę zauważyć, że API wątków POSIX nie ustawia errno w razie wystąpienia błędu. Przy niepowodzeniu ustawiany jest numer błędu jako wynik funkcji. Te numery błędów mają takie samo znaczenie, jak numery błędów zwracane w errno przez inne interfejsy programistyczne. Na niektórych antycznych systemach <errno.h> był nieobecny lub nie deklarował errno, tak że trzeba było zadeklarować errno samemu (tj. extern int errno). Nie należy tego robić. Już od dawna nie ma takiej potrzeby, a może powodować problemy, gdy są używane nowoczesne wersje biblioteki C.
ZOBACZ TAKŻE
errno(1), err(3), error(3), perror(3), strerror(3)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej Krzysztofowicz <ankry@green.mf.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> Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej ⟨manpages-pl- list@lists.sourceforge.net⟩.