Man page - errno(3)

Packages contains this manual

Available languages:

en fr pl ja ru de

Manual

errno

NAZWA
BIBLIOTEKA
SKŁADNIA
OPIS
errno
Numery i nazwy błędów
Lista nazw błędów
UWAGI
ZOBACZ TAKŻE
TŁUMACZENIE

NAZWA

errno - numer ostatniego błędu

BIBLIOTEKA

Standardowa biblioteka C ( libc , -lc )

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 .

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ść. W Linuksie mają one taką samą wartość na wszystkich architekturach.

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

Nazwa jest zdefiniowana przez standard C99.

Poniżej przedstawiono listę symbolicznych nazw błędów, które są zdefiniowane pod Linuksem:

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

Na większość architektur — synonim EDEADLK . Na niektórych architekturach (np. linuksowym MIPS, PowerPC, SPARC) jest to oddzielny kod błędu „Błąd 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

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.

ELNRNG

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). Może być spowodowane również przekroczeniem limitu określonego w /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

„No anode” — dosł. brak anody (?!). /Domniemywa się, że mogło chodzić tu o wariant „inode” — i-węzła lub o „allocation node” — węzeł alokacji — przyp. tłum./

ENOBUFS

Brak miejsca w buforze (POSIX.1 (opcja XSI STREAMS)).

ENODATA

Atrybut o takiej nazwie nie istnieje lub proces nie ma dostępu do tego atrybutu, zob. xattr (7).

W POSIX.1-2001 (opcja XSI STREAMS), błąd ten opisano jako „Nie jest dostępny żaden komunikat na początku kolejki odczytu STREAM”

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

Błędne dowiązanie pomiędzy różnymi urządzeniami (POSIX.1-2001).

EXFULL

Przepełniona wymiana.

UWAGI

Powszechnym błędem jest robienie

if (jakieśwywołanie() == -1) {
printf("jakieśwywołanie() zwróciło błąd\n");
if (errno == ...) { ... }
}

ponieważ errno niekoniecznie musi mieć tę samą wartość, jaką miało po powrocie z jakieśwywołanie() (tj. mogła zostać zmieniona przez printf (3)). Jeżeli wartość errno powinna być utrzymana pomiędzy wywołaniami funkcji, musi być zachowywana:

if (jakieśwywołanie() == -1) {
int errsv = errno;
printf("jakieśwywołanie() zwróciło błąd\n");
if (errsv == ...) { ... }
}

Proszę zauważyć, że API wątków POSIX nie ustawia errno w razie wystąpienia błędu. Przy niepowodzeniu ustawiany jest numer błędu jako wynik funkcji. Te numery błędów mają takie samo znaczenie, jak numery błędów zwracane w errno przez inne interfejsy programistyczne.

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)

TŁUMACZENIE

Tłumaczenie niniejszej strony podręcznika: 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 .