Provided by: manpages-pl-dev_20060617-1_all bug

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)