Provided by: manpages-pl-dev_4.21.0-2_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. All the error names specified by POSIX.1 must have distinct values, with the exception of EAGAIN and EWOULDBLOCK, which may be the same. On Linux, these two have the same value on all architectures. 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 The name is defined by POSIX.1-2001, and is defined in later POSIX.1 versions, unless otherwise indicated. POSIX.1-2008 The name is defined in POSIX.1-2008, but was not present in earlier POSIX.1 standards. C99 The name is defined by C99. Below is a list of the symbolic error names that are defined on Linux: 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 On most architectures, a synonym for EDEADLK. On some architectures (e.g., Linux MIPS, PowerPC, SPARC), it is a separate error code "File locking deadlock error". 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 Too many open files (POSIX.1-2001). Commonly caused by exceeding the RLIMIT_NOFILE resource limit described in getrlimit(2). Can also be caused by exceeding the limit specified in /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 Brak anody. ENOBUFS Brak miejsca w buforze (POSIX.1 (opcja XSI STREAMS)). ENODATA The named attribute does not exist, or the process has no access to this attribute; see xattr(7). In POSIX.1-2001 (XSI STREAMS option), this error was described as "No message is available on the STREAM head read queue". 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 Invalid cross-device link (POSIX.1-2001). 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 == ...) { ... } } Note that the POSIX threads APIs do not set errno on error. Instead, on failure they return an error number as the function result. These error numbers have the same meanings as the error numbers returned in errno by other APIs. 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⟩.