Errno

errno – mechanizm zgłaszania błędów przez funkcje libc, a w szczególności jądra. Jeśli funkcja zakończy się błędem, sygnalizuje to zwracając zwykle -1 lub, w przypadku funkcji zwracających wskaźnik, NULL. Program powinien wtedy zajrzeć do zmiennej globalnej errno, żeby dowiedzieć się, jaki dokładnie błąd wystąpił. Jeśli funkcja zakończy się pomyślnie, zawartość errno nie jest zdefiniowana – w szczególności może tam znajdować się kod błędu niezwiązany z ostatnim wywołaniem danej funkcji[1]. Ma to miejsce np. w przypadku, gdy funkcja foo wywoła funkcję bar, przy czym ta druga zwróci błąd, co jednak nie przeszkodzi pierwszej w pomyślnym wykonaniu. Może się też zdarzyć, że pomyślne wywołanie funkcji potencjalnie modyfikującej errno nie zmieni poprzedniej wartości tej zmiennej.

Zmienna errno jest zdefiniowana w nagłówku errno.h.

Popularne kody błędów to:

  • EACCES – odmowa dostępu
  • EAGAIN – zasób tymczasowo niedostępny
  • EBADF – niepoprawny deskryptor plików
  • EINTR – podczas wykonywania funkcji nastąpiło przerwanie
  • EINVAL – błędny argument
  • ENOTSUP – operacja nie jest zaimplementowana
  • EPERM – operacja niedozwolona
  • EPIPE – przerwany potok

Opis błędu w odpowiednim dla danego locale języku można otrzymać za pomocą funkcji:

char *strerror(int errnum);

Niestety nie jest ona bezpieczna w programach wielowątkowych, gdzie należy korzystać z trudniejszej w użyciu:

int strerror_r(int errnum, char *buf, size_t n);

From Wikipedia, the free encyclopedia · View on Wikipedia

Developed by Nelliwinne