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. Kazdej nazwie bledu okreslonej przez POSIX.1 musi odpowiadac inna wartosc z wyjatkiem EAGAIN i EWOULDBLOCK, ktore moga miec te sama wartosc. W Linuksie maja one taka sama wartosc na wszystkich architekturach. 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 Nazwa jest definiowana przez POSIX.1-2001, jak i przez pozniejsze wersje standardu POSIX.1, chyba ze zaznaczono, ze jest inaczej. POSIX.1-2008 Nazwa jest definiowana przez POSIX.1-2008, ale nie byla obecna we wczesniejszych standardach POSIX.1. C99 Nazwa jest zdefiniowana przez standard C99. Ponizej przedstawiono liste symbolicznych nazw bledow, ktore sa zdefiniowane pod Linuksem: 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 Na wiekszosc architektur -- synonim EDEADLK. Na niektorych architekturach (np. linuksowym MIPS, PowerPC, SPARC) jest to oddzielny kod bledu ,,Blad 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 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 Zbyt wiele otwartych plikow (POSIX.1-2001); zwykle spowodowane przekroczeniem limitu zasobow RLIMIT_NOFILE opisanego w getrlimit(2). Moze byc spowodowane rowniez przekroczeniem limitu okreslonego w /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 ,,No anode" -- dosl. brak anody (?!). /Domniemywa sie, ze moglo chodzic tu o wariant ,,inode" -- i-wezla lub o ,,allocation node" -- wezel alokacji -- przyp. tlum./ ENOBUFS Brak miejsca w buforze (POSIX.1 (opcja XSI STREAMS)). ENODATA Atrybut o takiej nazwie nie istnieje lub proces nie ma dostepu do tego atrybutu, zob. xattr(7). W POSIX.1-2001 (opcja XSI STREAMS), blad ten opisano jako ,,Nie jest dostepny zaden komunikat na poczatku kolejki odczytu STREAM" 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 Bledne dowiazanie pomiedzy roznymi urzadzeniami (POSIX.1-2001). EXFULL Przepelniona wymiana. UWAGI Powszechnym bledem jest robienie if (jakieswywolanie() == -1) { printf("jakieswywolanie() zwrocilo blad\n"); if (errno == ...) { ...; } } poniewaz errno niekoniecznie musi miec te sama wartosc, jaka mialo po powrocie z jakieswywolanie() (tj. mogla zostac zmieniona przez printf(3)). Jezeli wartosc errno powinna byc utrzymana pomiedzy wywolaniami funkcji, musi byc zachowywana: if (jakieswywolanie() == -1) { int errsv = errno; printf("jakieswywolanie() zwrocilo blad\n"); if (errsv == ...) { ...; } } Prosze zauwazyc, ze API watkow POSIX nie ustawia errno w razie wystapienia bledu. Przy niepowodzeniu ustawiany jest numer bledu jako wynik funkcji. Te numery bledow maja takie samo znaczenie, jak numery bledow zwracane w errno przez inne interfejsy programistyczne. 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 Tlumaczenie niniejszej strony podrecznika: 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.18 8 lutego 2026 r. errno(3)