errno(3) Library Functions Manual errno(3) NAZWA errno - numer ostatniego bledu BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include OPIS Plik naglowkowy definiuje zmienna calkowita errno, ktora jest ustawiana w razie bledu przez wywolania systemowe oraz pewne funkcje biblioteczne tak, aby zaznaczyc, co poszlo zle. errno Wartosc zmiennej errno jest istotna, tylko gdy wywolanie zwrocilo blad (tj. -1 w wypadku wiekszosci wywolan systemowych; -1 lub NULL w wypadku wiekszosci funkcji bibliotecznych), ale funkcja biblioteczna, ktora zakonczyla sie sukcesem, takze moze zmienic errno. Zadne wywolanie systemowe ani zadna funkcja biblioteczna nie ustawiaja errno na zero. W przypadku niektorych wywolan systemowych i funkcji bibliotecznych (np. getpriority(2)) -1 jest poprawna wartoscia zwracana rowniez w razie powodzenia. W takich wypadkach, aby sprawdzic, czy wywolanie lub funkcja zakonczyly sie powodzeniem czy bledem, nalezy ustawic errno na zero przed wywolaniem, a nastepnie - jezeli wywolanie lub funkcja zwroca wartosc, ktora moglaby wskazywac na wystapienie bledu - sprawdzic, czy wartosc errno jest niezerowa. errno jest definiowana przez standard ISO C jako modyfikowalna l-wartosc typu int, ktora nie moze zostac jawnie zadeklarowana; errno moze byc makrem. Wartosc errno jest lokalna w obrebie watku, jej zmiana w jednym watku nie wplywa na wartosc w innym. Numery i nazwy bledow Poprawne numery bledow sa liczbami dodatnimi. Plik naglowkowy definiuje nazwy symboliczna dla wszystkich dodatnich numerow bledow, ktore moga wystapic 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 bledow, ktore odpowiadaja nazwom symbolicznym, moga byc rozne w roznych systemach uniksowych, a nawet moga sie roznic pomiedzy architekturami linuksowymi. Dlatego ponizsza lista nazw bledow nie zawiera numerycznych wartosci kodow bledow. Mozna uzyc funkcji perror(3) i strerror(3) do skonwertowania nazw do odpowiadajacych im tekstowych komunikatow bledow. Uzywajac polecenia errno(1) (z pakietu moreutils) w dowolnym systemie linuksowym, mozna uzyskac liste wszystkich symbolicznych nazw bledow i odpowiadajacych im numerow bledow: $ errno -l EPERM 1 Operacja niedozwolona ENOENT 2 Nie ma takiego pliku ani katalogu ESRCH 3 Nie ma takiego procesu EINTR 4 Przerwane wywolanie systemowe EIO 5 Blad wejscia/wyjscia ... Polecenia errno(1) mozna takze uzyc do wyszukania indywidualnych kodow i nazw bledow oraz do wyszukania bledow po ich opisach, tak jak w ponizszych przykladach: $ errno 2 ENOENT 2 Nie ma takiego pliku ani katalogu $ errno ESRCH ESRCH 3 Nie ma takiego procesu $ errno -s "brak dostepu" EACCES 13 Brak dostepu Lista nazw bledow W ponizszej liscie symbolicznych nazw bledow, pewne nazwy oznaczono w nastepujacy sposob: 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 argumentow za dluga (POSIX.1-2001). EACCES Brak dostepu (POSIX.1-2001). EADDRINUSE Adres jest juz w uzyciu (POSIX.1-2001). EADDRNOTAVAIL Niedostepny adres (POSIX.1-2001). EAFNOSUPPORT Rodzina adresow nieobslugiwana (POSIX.1-2001). EAGAIN Zasoby chwilowo niedostepne (moze miec te sama wartosc, co EWOULDBLOCK) (POSIX.1-2001). EALREADY Operacja jest juz wykonywana (POSIX.1-2001). EBADE Bledna wymiana. EBADF Bledny deskryptor pliku (POSIX.1-2001). EBADFD Deskryptor pliku w zlym stanie. EBADMSG Bledny komunikat (POSIX.1-2001). EBADR Bledny deskryptor zadania. EBADRQC Zly kod zadania. EBADSLT Bledny kanal. EBUSY Urzadzenie lub zasoby zajete (POSIX.1-2001). ECANCELED Operacja anulowana (POSIX.1-2001). ECHILD Brak procesow potomnych (POSIX.1-2001). ECHRNG Numer kanalu poza zakresem. ECOMM Blad komunikacji podczas wysylania. ECONNABORTED Polaczenie przerwane (POSIX.1-2001). ECONNREFUSED Polaczenie odrzucone (POSIX.1-2001). ECONNRESET Polaczenie zerwane (przez druga strone) (POSIX.1-2001). EDEADLK Uniknieto zakleszczenia zasobow (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 Bledny adres (POSIX.1-2001). EFBIG Plik zbyt duzy (POSIX.1-2001). EHOSTDOWN Urzadzenie jest wylaczone. EHOSTUNREACH Brak trasy do hosta (POSIX.1-2001). EHWPOISON Strona pamieci ma blad sprzetowy. EIDRM Identyfikator zostal usuniety (POSIX.1-2001). EILSEQ Bledny lub niepelny znak wielobajtowy (POSIX.1, C99). Komunikat tutaj pokazany pochodzi z opisu tego bledu w bibliotece glibc. W standardzie POSIX.1 ten blad jest opisany jako "Niepoprawna sekwencja bajtow". EINPROGRESS Operacja jest wlasnie wykonywana (POSIX.1-2001). EINTR Przerwane wywolanie systemowe (POSIX.1-2001); patrz signal(7) EINVAL Zly argument (POSIX.1-2001). EIO Blad wejscia/wyjscia (POSIX.1-2001). EISCONN Gniazdo juz jest polaczone (POSIX.1-2001). EISDIR Jest katalogiem (POSIX.1-2001). EISNAM Jest plikiem nazwanym. EKEYEXPIRED Klucz wygasl. EKEYREJECTED Klucz zostal odrzucony przez usluge. EKEYREVOKED Klucz zostal uniewazniony. EL2HLT Poziom 2 zatrzymany. EL2NSYNC Poziom 2 niezsynchronizowany. EL3HLT Poziom 3 zatrzymany. EL3RST Poziom 3 zatrzymany. ELIBACC Brak dostepu do wymaganej biblioteki dzielonej. ELIBBAD Proba uzycia uszkodzonej biblioteki dzielonej. ELIBMAX Proba laczenia ze zbyt wieloma bibliotekami dzielonymi. ELIBSCN Sekcja .lib w a.out jest uszkodzona. ELIBEXEC Nie mozna bezposrednio uruchomic biblioteki dzielonej. ELNRNG Numer kanalu poza zakresem. ELOOP Za duze zagniezdzenie dowiazan symbolicznych (POSIX.1-2001). EMEDIUMTYPE Niewlasciwy 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 duzo dowiazan (POSIX.1-2001). EMSGSIZE Komunikat za dlugi (POSIX.1-2001). EMULTIHOP Proba przejscia przez zbyt wiele ruterow (POSIX.1-2001). ENAMETOOLONG Za dluga nazwa pliku (POSIX.1-2001). ENETDOWN Siec jest wylaczona (POSIX.1-2001). ENETRESET Polaczenie zerwane przez siec (POSIX.1-2001). ENETUNREACH Siec jest niedostepna (POSIX.1-2001). ENFILE Zbyt wiele otwartych plikow (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 urzadzenia (POSIX.1-2001). ENOENT Nie ma takiego pliku ani katalogu (POSIX.1-2001). Zwykle blad ten jest wynikiem nieistnienia podanej sciezki lub nieistnienia jednej z czesci skladowej (katalogu) sciezki lub oznacza, ze podana sciezka jest nieprawidlowym dowiazaniem symbolicznym. ENOEXEC Bledny format pliku wykonywalnego (POSIX.1-2001). ENOKEY Wymagany klucz niedostepny. ENOLCK Brak dostepnych blokad (POSIX.1-2001). ENOLINK Polaczenie zostalo przerwane (POSIX.1-2001). ENOMEDIUM Brak medium. ENOMEM Za malo miejsca/nie mozna przydzielic pamieci (POSIX.1-2001). ENOMSG Brak komunikatu o pozadanym typie (POSIX.1-2001). ENONET Maszyna nie znajduje sie w tej sieci. ENOPKG Pakiet nie jest zainstalowany. ENOPROTOOPT Protokol niedostepny (POSIX.1-2001). ENOSPC Brak miejsca na urzadzeniu (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 urzadzenie blokowe. ENOTCONN Drugi koniec nie jest polaczony (POSIX.1-2001). ENOTDIR Nie jest katalogiem (POSIX.1-2001). ENOTEMPTY Katalog nie jest pusty (POSIX.1-2001). ENOTRECOVERABLE Stan bez mozliwosci wyjscia (POSIX.1-2008). ENOTSOCK Nie jest gniazdem (POSIX.1-2001). ENOTSUP Operacja nieobslugiwana (POSIX.1-2001). ENOTTY Niewlasciwa operacja kontrolna (ioctl) wejscia/wyjscia (POSIX.1-2001). ENOTUNIQ Nazwa nie jest unikatowa w sieci. ENXIO Nie ma takiego urzadzenia ani adresu (POSIX.1-2001). EOPNOTSUPP Operacja na gniezdzie nieobslugiwana (POSIX.1-2001). (ENOTSUP i EOPNOTSUPP maja pod Linuksem te sama wartosc, chociaz zgodnie z POSIX.1 te wartosc powinny sie roznic) EOVERFLOW Wartosc za duza dla zdefiniowanego typu danych (POSIX.1-2001). EOWNERDEAD Wlasciciel zmarl (POSIX.1-2008). EPERM Operacja niedozwolona (POSIX.1-2001). EPFNOSUPPORT Nieobslugiwana rodzina protokolow. EPIPE Przerwany potok (POSIX.1-2001). EPROTO Blad protokolu (POSIX.1-2001). EPROTONOSUPPORT Protokol nieobslugiwany (POSIX.1-2001). EPROTOTYPE Typ protokolu nie pasuje do gniazda (POSIX.1-2001). ERANGE Za duzy wynik (POSIX.1, C99). EREMCHG Zmienil sie adres drugiego konca. EREMOTE Obiekt jest obiektem zdalnym (podmontowanym przez NFS). EREMOTEIO Blad wejscia/wyjscia w odleglym systemie. ERESTART Nalezy wznowic przerwane wywolanie systemowe. ERFKILL Operacja niemozliwa ze wzgledu na RF-kill. EROFS System plikow wylacznie do odczytu (POSIX.1-2001). ESHUTDOWN Wysylanie po zamknieciu gniazda jest niemozliwe. ESPIPE Bledne przesuniecie (POSIX.1-2001). ESOCKTNOSUPPORT Nieobslugiwany typ gniazda. ESRCH Nie ma takiego procesu (POSIX.1-2001). ESTALE Nieaktualny uchwyt pliku (POSIX.1-2001). Ten blad moze wystapic na systemie plikow NFS i na innych systemach plikow. ESTRPIPE Blad potoku biblioteki strumieni. ETIME Uplynal czas stopera (POSIX.1 (opcja XSI STREAMS)). (POSIX.1 mowi "Przekroczenie czasu STREAM ioctl(2)"). ETIMEDOUT Przekroczony czas oczekiwania na polaczenie (POSIX.1-2001). ETOOMANYREFS Za duzo odniesien: dowiazanie niemozliwe. ETXTBSY Plik tekstowy zajety (POSIX.1-2001). EUCLEAN Struktura wymaga wyczyszczenia. EUNATCH Sterownik protokolu nie jest podlaczony. EUSERS Za duzo uzytkownikow. EWOULDBLOCK Operacja zostalaby zablokowana (moze miec te sama wartosc, co EAGAIN) (POSIX.1-2001). EXDEV Invalid cross-device link (POSIX.1-2001). EXFULL Przepelniona wymiana. UWAGI Powszechnym bledem jest robienie if (somecall() == -1) { printf("somecall() zwrocilo blad\n"); if (errno == ...) { ... } } poniewaz errno niekoniecznie musi miec te sama wartosc, jaka mialo po powrocie z somecall() (tj. mogla zostac zmieniona przez printf(3)). Jezeli wartosc errno powinna byc utrzymana pomiedzy wywolaniami funkcji, musi byc zachowywana: if (somecall() == -1) { int errsv = errno; printf("somecall() zwrocilo blad\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 niektorych antycznych systemach byl nieobecny lub nie deklarowal errno, tak ze trzeba bylo zadeklarowac errno samemu (tj. extern int errno). Nie nalezy tego robic. Juz od dawna nie ma takiej potrzeby, a moze powodowac problemy, gdy sa uzywane nowoczesne wersje biblioteki C. ZOBACZ TAKZE errno(1), err(3), error(3), perror(3), strerror(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Adam Byrtek , Andrzej Krzysztofowicz , Pawel Krawczyk (eglibc) , Jakub Bogusz (eglibc) , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. errno(3)