Linux программирование в примерах
Шрифт:
Хотя сама
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" |
Использование
Сегодня, хотя системы GNU/Linux поставляются с исходными кодами, указанный исходный код часто не устанавливается по умолчанию. Поэтому использование этих идентификаторов для сообщений об ошибках не представляет дополнительной ценности. GNU Coding Standards даже не упоминает их.