sourCEntral - mobile manpages

pdf

ERRNO

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.

ZOBACZ TAKŻE

errno(1), err(3), error(3), perror(3), strerror(3)

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) <abyrtek AT priv DOT onet DOT pl>, Andrzej Krzysztofowicz (PTM) <ankry AT mif DOT pg DOT gda DOT pl>, Paweł Krawczyk (eglibc) <kravietz AT ceti DOT pl>, Jakub Bogusz (eglibc) <qboosh AT pld-linux DOT org>, Robert Luberda <robert AT debian DOT org> i Michał Kułach <michal DOT kulach AT gmail DOT com>.

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.

pdf