Provided by: manpages-pl-dev_4.27.0-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
Tłumaczenie niniejszej strony podręcznika: 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 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.
Linux man-pages 6.9.1 15 czerwca 2024 r. errno(3)