errno

Autres langues

Langue: pl

Autres versions - même langue

Version: 2004-12-17 (openSuse - 09/10/07)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

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 (zwykle -1), ale funkcja biblioteczna, która zakoñczy³a siê sukcesem, tak¿e mo¿e zmieniæ errno.

Czasami, gdy -1 jest tak¿e poprawn± warto¶ci± zwracan±, aby wykryæ b³êdy nale¿y przed wywo³aniem wyzerowaæ errno.

errno jest definiowana przez standard ISO C jako modyfikowalna l-warto¶æ typu int, które 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.

Wszystkie poprawne numery b³êdów s± ró¿ne od zera, funkcja biblioteczna nigdy nie przypisuje errno zera. 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¶æ.

POSIX.1 (wydanie z 2001 roku) wyszczególnia nastêpuj±ce symboliczne nazwy b³êdów. Dwie z nich EDOM oraz ERANGE s± zawarte tak¿e w standardzie ISO C. Pierwsza poprawka ISO C definiuje dodatkowy numer b³êdu EILSEQ dla kodowania b³êdów w wielobajtowych lub szerokich znakach.

E2BIG
Lista argumentów za d³uga
EACCES
Brak dostêpu
EADDRINUSE
Adres jest u¿ywany
EADDRNOTAVAIL
Adres niedostêpny
EAFNOSUPPORT
Niewspierana rodzina adresów
EAGAIN
Zasoby chwilowo niedostêpne
EALREADY
Po³±czenie trwa
EBADF
B³êdny deskryptor pliku
EBADMSG
B³êdny komunikat
EBUSY
Zasób zajêty
ECANCELED
Operacja anulowana
ECHILD
Brak procesów potomnych
ECONNABORTED
Po³±czenie przerwane
ECONNREFUSED
Odmowa po³±czenia
ECONNRESET
Po³±czenie zrestartowane
EDEADLK
Unikniêto zakleszczenia zasobów
EDESTADDRREQ
Wymagany jest adres docelowy
EDOM
B³±d dziedziny
EDQUOT
Zarezerwowane
EEXIST
Plik istnieje
EFAULT
B³êdny adres
EFBIG
Plik jest za du¿y
EHOSTUNREACH
Host jest nieosi±galny
EIDRM
Usuniêto identyfikator
EILSEQ
Nieprawid³owa kolejno¶æ bajtów
EINPROGRESS
Operacja jest ju¿ wykonywana
EINTR
Przerwane wywo³anie funkcji
EINVAL
Z³y argument
EIO
B³±d wej¶cia/wyj¶cia
EISCONN
Gniazdo jest po³±czone
EISDIR
Jest katalogiem
ELOOP
Za du¿o poziomów dowi±zañ symbolicznych
EMFILE
Za du¿o otwartych plików
EMLINK
Za du¿o dowi±zañ
EMSGSIZE
Nieodpowiednia d³ugo¶æ bufora komunikatów
EMULTIHOP
Zarezerwowane
ENAMETOOLONG
Za d³uga nazwa pliku
ENETDOWN
Sieæ jest wy³±czona
ENETRESET
Po³±czenie przerwane przez sieæ
ENETUNREACH
Sieæ jest niedostêpna
ENFILE
Za du¿o otwartych plików w systemie
ENOBUFS
Brak dostêpnej przestrzeni buforów
ENODATA
Brak komunikatów w nag³ówku czytanej kolejki STREAM
ENODEV
Nie ma takiego urz±dzenia
ENOENT
Nie ma takiego pliku ani katalogu
ENOEXEC
B³êdny format pliku wykonywalnego
ENOLCK
Brak dostêpnych blokad
ENOLINK
Zarezerwowane
ENOMEM
Brak miejsca
ENOMSG
Brak komunikatów zadanego rodzaju
ENOPROTOOPT
Protokó³ jest niedostêpny
ENOSPC
Brak miejsca na urz±dzeniu
ENOSR
Brak zasobów STREAM
ENOSTR
To nie jest STREAM
ENOSYS
Niezaimplementowana funkcja
ENOTCON
Gniazdo nie jest po³±czone
ENOTDIR
To nie jest katalog
ENOTEMPTY
Katalog nie jest pusty
ENOTSOCK
To nie jest gniazdo
ENOTSUP
Niedostêpne
ENOTTY
Nieodpowiednia operacja kontroli wej¶cia/wyj¶cia
ENXIO
Brak urz±dzenia lub adresu
EOPNOTSUPP
Operacja niedozwolona na gnie¼dzie
EOVERFLOW
Warto¶æ za du¿a dla typu danych
EPERM
Operacja niedozwolona
EPIPE
Przerwany potok
EPROTO
B³±d protoko³u
EPROTONOSUPPORT
Protokó³ nie wspierany
EPROTOTYPE
Niew³a¶ciwy rodzaj protoko³u dla gniazda
ERANGE
Rezultat zbyt du¿y
EROFS
System plików wy³±cznie do odczytu
ESPIPE
Nieprawid³owe przesuniêcie
ESRCH
Nie ma takiego procesu
ESTALE
Zarezerwowane
ETIME
Timeout ioctl() dla STREAM
ETIMEDOUT
Operacja przeterminowana
ETXTBSY
Plik tekstowy jest zajêty
EWOULDBLOCK
Operacja blokuj±ca (mo¿e to byæ ta sama warto¶æ, co dla EAGAIN)
EXDEV
Nieprawid³owe dowi±zanie

UWAGI

Powszechnym b³êdem jest robienie



if (somecall() == -1) {

    printf("somecall() zwróci³o b³±d\n");

    if (errno == ...) { ... }

}



gdzie errno niekoniecznie musi mieæ tê sam± warto¶æ, jak± mia³o po powrocie z somecall() (tj. mog³a zostaæ zmieniona przez printf()). 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

perror(3), strerror(3)