errno

ERRNO(3)                 Podręcznik programisty Linuksa                 ERRNO(3)



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          Zbyt wiele otwartych plików (POSIX.1-2001); zwykle
                       spowodowane przekroczeniem limitu zasobów RLIMIT_NOFILE
                       opisanego w getrlimit(2).

       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 == ...) { ... }
           }

       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.08 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
       <manpages-pl-list@lists.sourceforge.net>.



                             10 października 2019 r.                    ERRNO(3)