4.3.1. Значения errno
4.3.1. Значения errno
Стандарт POSIX 2001 определяет большое число возможных значений для errno. Многие из них относятся к сетям, IPC или другим специальным задачам. Справочная страница для каждого системного вызова описывает возможные значения errno, которые могут иметь место; поэтому вы можете написать код для проверки отдельных ошибок и соответствующим образом обработать их, если это нужно. Возможные значения определены через символические имена. Предусмотренные GLIBC значения перечислены в табл. 4.1.
Таблица 4.1. Значения GLIBC для errno
Имя Значение 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) для локальной системы.
ЗАМЕЧАНИЕ. errno следует проверять лишь после того, как возникла ошибка и до того, как сделаны дальнейшие системные вызовы. Начальное значение той переменной 0. Однако, в промежутках между ошибками ничто не изменяет ее значения, это означает, что успешный системный вызов не восстанавливает значение 0. Конечно, вы можете вручную установить ее в 0 в самом начале или когда захотите, однако это делается редко.
Сначала мы используем errno лишь для сообщений об ошибках. Для этого имеются две полезные функции. Первая — perror():
#include <stdio.h> /* ISO С */
void perror(const char *s);
Функция perror() выводит предоставленную программой строку, за которой следует двоеточие, а затем строка, описывающая значение errno:
if (some_system_call(param1, param2) < 0) {
perror("system call failed");
return 1;
}
Мы предпочитаем функцию strerror(), которая принимает параметр со значением ошибки и возвращает указатель на строку с описанием ошибки:
#include <string.h> /* ISO С */
char *strerror(int errnum);
strerror() предоставляет для сообщений об ошибках максимальную гибкость, поскольку fprintf() дает возможность выводить ошибки любым нужным нам способом, наподобие этого.
if (some_system_call(param1, param2) < 0) {
fprintf(stderr, "%s: %d, %d: some_system_call failed: %s ",
argv[0], param1, param2, strerror(errno));
return 1;
}
По всей книге вы увидите множество примеров использования обеих функций.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Значения маски АСЕ
Значения маски АСЕ Модели "пользователь, группа, прочие", которую реализует функция InitUnixSA в большинстве случаев будет вполне достаточно, хотя с использованием тех же базовых методов могут реализовываться и другие модели.Вместе с тем, для этого необходимо знать
Значения функции GMP
Значения функции GMP gmp_initСоздает число GMP.Синтаксис:resource gmp_init(mixed number)Число GMP создается из целочисленного или строкового аргумента.В строке может быть указано число десятеричного или шестнадцатеричного формата. Если это шестнадцатеричный формат, то перед числом должен
Ключи и значения
Ключи и значения array_flipМеняет местами индексы и значения массива.Синтаксис:array array_flip(array arr)Эта функция "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Если в массиве присутствовало
Значение системной переменной Unix errno
Значение системной переменной Unix errno Когда при выполнении функции Unix (например, одной из функций сокетов) происходит ошибка, глобальной переменной errno присваивается положительное значение, указывающее на тип ошибки, а возвращаемое значение функции обычно равно -1. Наша
Значение errno
Значение errno При возникновении ошибки в функции Unix глобальной переменной errno присваивается положительное значение, указывающее на тип ошибки; при этом функция обычно возвращает значение –1. Наша функция err_sys выводит соответствующее коду ошибки сообщение (например, Resource
Значения по умолчанию
Значения по умолчанию Наш пример проиллюстрировал присваивание константам значений по умолчанию. Константам, появляющимся в описании enum, присваиваются целые числа 0, 1, 2 и т. д. в порядке их расположения. Так, описание enum kids {nippy, slats, skip, nana, liz};присваивает nаnа значение 3.
Присвоенные значения
Присвоенные значения Можно выбирать значения, которые вы хотите присвоить константам, но они должны быть целого типа (включая char). Для этого включите желаемыe значения в описание: enum levels {low = 100, medium = 500, high = 2000};Если вы присваиваете какое-либо значение одной константе и не
1. Пустые значения (Empty-значения)
1. Пустые значения (Empty-значения) Пустое значение – это просто одно из множества возможных значений какого-то вполне определенного типа данных.Перечислим наиболее «естественные», непосредственные пустые значения (т. е. пустые значения, которые мы могли бы выделить
2. Неопределенные значения ( Null-значения)
2. Неопределенные значения (Null-значения) Слово Null используется для обозначения неопределенных значений в базах данных.Чтобы лучше понять, какие значения понимаются под неопределенными, рассмотрим таблицу, являющуюся фрагментом базы данных: Итак, неопределенное
3. Значения по умолчанию
3. Значения по умолчанию Системы управления базами данных могут иметь возможность создания любых произвольных значений по умолчанию или, как их еще называют, умолчаний. Эта операция в любой среде программирования имеет достаточно большой вес, ведь практически в любой
7.4. Возврат значения
7.4. Возврат значения В теле функции может встретиться инструкция return. Она завершает выполнение функции. После этого управление возвращается той функции, из которой была вызвана данная. Инструкция return может употребляться в двух формах:return;return expression;Первая форма
Временные значения
Временные значения CURRENT_CONNECTION и CURRENT_TRANSACTION не имеют смысла вне текущего соединения и контекста транзакции соответственно. Сервер Firebird сохранит самые последние значения этих идентификаторов в заголовочной странице базы данных. После восстановления базы данных из
Это не имеет значения
Это не имеет значения Только сутьНаш любимый ответ на вопрос «Почему вы не сделали это или почему вы не сделали то?». Всегда такой: «Поскольку это не имеет значения».Когда мы запустили Campfire, мы слышали некоторые из этих вопросов от людей, впервые проверяющих
4.6.4 Возврат Значения
4.6.4 Возврат Значения Из функции, которая не описана как void, можно (и долно) возвращать значение. Возвращаемое значение задается опратором return. Например:int fac(int n) (*return (n»1) ? n*fac(n-1) : 1; *)В функции может быть больше одного оператора return: int fac(int n) (* if (n » 1) return n*fac(n-1); else return 1; *)Как и
Unique-значения
Unique-значения Иногда при разработке программ возникает потребность в сущности, принимающей лишь несколько значений, характеризующих возможные ситуации. Так, операция чтения может вернуть код результата, значениями которого будут признаки успешной операции, ошибки при