Linux программирование в примерах | страница 75
>ENOEXEC | Ошибочный формат исполняемого файла. |
>ENOLCK | Блокировка недоступна. |
>ENOLINK | Зарезервировано. |
>ENOMEM | Недостаточно памяти. |
>ENOMSG | Сообщение нужного типа отсутствует |
>ENOPROTOOPT | Протокол недоступен. |
>ENOSPC | Недостаточно памяти в устройстве. |
>ENOSYS | Функция не поддерживается. |
>ENOTCONN | Сокет не соединен. |
>ENOTDIR | Это не каталог |
>ENOTEMPTY | Каталог не пустой. |
>ENOTSOCK | Это не сокет |
>ENOTSUP | Не поддерживается |
>ENOTTY | Неподходящая операция управления вводом/выводом |
>ENXIO | Нет такого устройства или адреса. |
>EOPNOTSUPP | Операция сокета не поддерживается |
>EOVERFLOW | Слишком большое значение для типа данных |
>EPERM | Операция не разрешена |
>EPIPE | Канал (pipe) разрушен |
>EPROTO | Ошибка протокола. |
>EPROTONOSUPPORT | Протокол не поддерживается |
>EPROTOTYPE | Ошибочный тип протокола для сокета |
>ERANGE | Результат слишком большой |
>EROFS | Файловая система только для чтения |
>ESPIPE | Недействительный поиск |
>ESRCH | Нет такого процесса |
>ESTALE | Зарезервировано |
>ETIMEDOUT | Тайм-аут соединения истек |
>ETXTBSY | Текстовый файл занят |
>EWOULDBLOCK | Блокирующая операция (может быть то же значение, что и для >EAGAIN ) |
>EXDEV | Ссылка через устройство (cross-device link) |
Многие системы предоставляют также другие значения ошибок, а в более старых системах может не быть всех перечисленных значений ошибок. Полный список следует проверить с помощью справочных страниц intro(2) и errno(2) для локальной системы.
ЗАМЕЧАНИЕ. >errno
следует проверять лишь после того, как возникла ошибка и до того, как сделаны дальнейшие системные вызовы. Начальное значение той переменной 0. Однако, в промежутках между ошибками ничто не изменяет ее значения, это означает, что успешный системный вызов не восстанавливает значение 0. Конечно, вы можете вручную установить ее в 0 в самом начале или когда захотите, однако это делается редко.
Сначала мы используем >errno
лишь для сообщений об ошибках. Для этого имеются две полезные функции. Первая — >perror()
:
>#include
>void perror(const char *s);
Функция >perror()
выводит предоставленную программой строку, за которой следует двоеточие, а затем строка, описывающая значение >errno
:
>if (some_system_call(param1, param2) < 0) {
> perror("system call failed");
> return 1;
>}
Мы предпочитаем функцию >strerror()
, которая принимает параметр со значением ошибки и возвращает указатель на строку с описанием ошибки:
>#include
>char *strerror(int errnum);
>strerror()
предоставляет для сообщений об ошибках максимальную гибкость, поскольку >fprintf()
дает возможность выводить ошибки любым нужным нам способом, наподобие этого.