Шрифт:
4.3.1. Значения
Стандарт POSIX 2001 определяет большое число возможных значений для errno. Многие из них относятся к сетям, IPC или другим специальным задачам. Справочная страница для каждого системного вызова описывает возможные значения
Таблица 4.1. Значения GLIBC для
| Имя | Значение |
|---|---|
| E2BIG | Слишком длинный список аргументов |
| EACCESS | Доступ запрещен |
| EADDRINUSE | Адрес используется |
| EADDRNOTAVAIL | Адрес недоступен |
| EAFNOSUPPORT | Семейство адресов не поддерживается |
| EAGAIN | Ресурс недоступен, попытайтесь снова (может быть то же самое значение, что EWOULDBLOCK ). |
| EALREADY | Соединение уже устанавливается |
| EBADF | Ошибочный дескриптор файла. |
| EBADMSG | Ошибочное сообщение. |
| EBUSY | Устройство или ресурс заняты |
| ECANCELED | Отмена операции. |
| ECHILD | Нет порожденного процесса. |
| ECONNABORTED | Соединение прервано |
| ECONNFRFUSED | Соединение отклонено |
| ECONNRESET | Восстановлено исходное состояние соединения. |
| EDEADLK | Возможен тупик (deadlock) в запросе ресурса. |
| EDESTADDRREQ | Требуется адрес назначения |
| EDOM | Математический аргумент выходит за область определения функции |
| EDQUOT | Зарезервировано. |
| EEXIST | Файл существует. |
| EFAULT | Ошибочный адрес. |
| EFBIG | Файл слишком большой. |
| EHOSTUNREACH | Хост недоступен. |
| EIDRM | Идентификатор удален |
| EILSEQ | Ошибочная последовательность байтов. |
| EINPROGRESS | Операция исполняется. |
| EINTR | Прерванная функция. |
| EINVAL | Недействительный аргумент. |
| EIO | Ошибка ввода/вывода. |
| EISCONN | Сокет (уже) соединен. |
| EISDIR | Это каталог. |
| ELOOP | Слишком много уровней символических ссылок. |
| EMFILE | Слишком много открытых файлов. |
| EMLINK | Слишком много ссылок. |
| EMSGSIZE | Сообщение слишком длинное. |
| EMULTIHOP | Зарезервировано. |
| ENAMETOOLONG | Имя файла слишком длинное |
| ENETDOWN | Сеть не работает |
| ENETRESET | Соединение прервано сетью |
| ENETUNREACH | Сеть недоступна. |
| ENFILE | В системе открыто слишком много файлов. |
| ENOBUFS | Буферное пространство недоступно. |
| ENODEV | Устройство отсутствует |
| ENOENT | Файл или каталог отсутствуют |
| 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) для локальной системы.
ЗАМЕЧАНИЕ.
Сначала мы используем
Функция
Мы предпочитаем функцию
По всей книге вы увидите множество примеров использования обеих функций.
4.3.2. Стиль сообщения об ошибках
Для использования в сообщениях об ошибках С предоставляет несколько специальных макросов. Наиболее широкоупотребительными являются
Здесь сообщение об ошибке включает не только имя программы, но также и имя функции, имя исходного файла и номер строки. Полный список идентификаторов, полезных для диагностики, приведен в табл. 4.2.
Таблица 4.2. Диагностические идентификаторы C99
| Идентификатор | Версия С | Значение |
|---|---|---|
| __DATE__ | C89 | Дата компиляции в виде « Mmm nn yyyy » |
| __FILE_ | Оригинальная | Имя исходного файла в виде « program.c » |
| __LINE__ | Оригинальная | Номер строки исходного файла в виде 42 |
| __TIME__ | C89 | Время компиляции в виде « hh:mm:ss » |
| __func__ | C99 | Имя текущей функции, как если бы было объявлено const char __func__[] = "name" |