Linux repositories inspector
2016-03-15

manpages-pl-dev

Polish man pages for developers

man-pages-pl

Polish man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

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.

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) <>, Andrzej Krzysztofowicz (PTM) <>, Paweł Krawczyk (eglibc) <>, Jakub Bogusz (eglibc) <>, Robert Luberda <> i Michał Kułach <>.
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.
⇧ Top