Provided by:
manpages-pl-dev_20060617-1_all 
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)
2004-12-17 ERRNO(3)