Provided by: manpages-pl-dev_4.13-4_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.
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: 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: 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.
ELNRANGE 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 Brak dostępnych komunikatów w głównej kolejce odczytu strumieni (POSIX.1-2001).
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 Niepoprawne dowiązanie (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)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 5.10 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 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 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.
1 listopada 2020 r. ERRNO(3)