9.2.2. Коды возврата системных вызов
9.2.2. Коды возврата системных вызов
Коды возврата, зарезервированные для всех системных вызовов — это универсальные коды возврата ошибок, представленные небольшими отрицательными числами. Библиотека С проверяет наличие ошибок каждый раз, когда происходит системный вызов. При возникновении ошибки библиотека помещает значение ошибки в глобальную переменную errno[15]. В большинстве случаев все, что вам необходимо при проверке ошибки — посмотреть, отрицательный ли код возврата. Коды ошибок определены в <errno.h>, и errno можно сравнить с любым номером ошибки из этого файла, после чего обработать ее специальным образом.
Переменная errno используется и в другом случае. Библиотека С предлагает три способа получения строк, предназначенных для описания возникшей ошибки.
perror()
Печатает сообщение об ошибке. Передайте в функцию строку с информацией о том, что код намеревался предпринять.
if ((file = open(DB_PATH, O_RDONLY)) < 0) {
perror("не удается открыть файл базы данных");
}
Функция perror() выведет сообщение, описывающее возникшую ошибку, а также объяснение того, что код собирался делать:
не удается открыть файл базы данных: No such file or directory
Обычно неплохо делать свои аргументы для perror() уникальными на протяжении всей программы, в результате при получении сообщений об ошибках из perror() вы будете точно знать, откуда начинать поиск. Обратите внимание, что в строке, передаваемой perror(), нет символа новой строки. Его передавать не нужно — функция сама его выведет.
strerror()
Возвращает статически распределенную строку, описывающую ошибку с номером, передаваемым в единственном аргументе. Это можно использовать при построении, например, своей собственной версии perror().
if ((file = open(DB_PATH, O_RDONLY) ) < 0) {
fprintf(stderr,
"не удается открыть файл базы данных %s, %s ",
DB_PATH, strerror(errno));
}
sys_errlist
He очень хорошая альтернатива strerror(). sys_errlist — это массив размером sysnerr указателей на статические, доступные только для чтения символьные строки, которые описывают ошибки. Попытка записи в эти строки приводит к нарушению сегментации и сбросу дампа ядра.
if ((file = open(DB_PATH, O_RDONLY)) < 0) {
if (errno < sys_nerr) {
fprintf(stderr,
"не удается открыть файл базы данных %s, %s ",
DB_PATH, sys_errlist[errno]);
}
}
Этот массив не является ни стандартным, ни переносимым, и упоминается здесь лишь потому, что вы можете столкнуться с кодом, от него зависящим. Заменив такой код вызовом функции strerror(), вы получите существенный выигрыш.
Если вы не собираетесь использовать errno сразу же после генерации ошибки, сохраните ее копию. Любая библиотечная функция может установить errno в любое значение, поскольку в ней могут присутствовать системные вызовы, о которых вы даже не подозреваете. А некоторые библиотечные функции могут устанавливать errno даже без системных вызовов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Коды исключений
Коды исключений Для точной идентификации типа возникшего исключения блок исключения или выражение фильтра могут использовать следующую функцию: DWORD GetExceptionCode(VOID) Код исключения должен быть получен сразу же после возникновения исключения. Поэтому функция фильтра не
9.2.4. Общие коды возврата ошибок
9.2.4. Общие коды возврата ошибок Существует множество общих кодов ошибок, для которых вы вполне могли наблюдать сообщения. Некоторые из этих сообщений могут сбивать с толку. Без знаний о том, что можно делать в Linux-системе, трудно понять ошибки, которые могут возникать в
Вызов системных функций и стандартных диалоговых окон оболочки Windows
Вызов системных функций и стандартных диалоговых окон оболочки Windows Из сценариев WSH можно выводить на экран стандартные диалоговые окна Windows (например, Выполнить (Run)) и модули панели управления (например, Установка даты и времени (Date/Time)). Для этого используются системные
14.6.8 Коды ответов
14.6.8 Коды ответов Каждой команде в диалоге соответствует ответ, состоящий из кода ответа и сообщения. Например:ftp> get subnets--> PORT 128,36,0,22,10,54200 PORT command successful.--> RETR subnets150 Opening ASCII mode data connection for subnets (3113 bytes).226 Transfer complete.Коды ответов состоят из трех цифр, каждая из которых имеет
16.10 Коды ответов
16.10 Коды ответов Коды ответов SMTP имеют структуру, подобную кодам ответов FTP. Код состоит из трех цифр. Первая цифра указывает статус команды: 1yz Положительный предварительный (Positive Preliminary) ответ (в настоящее время в SMTP не используется) 2yz Положительный дополненный (Positive
19.8.3 Коды состояния
19.8.3 Коды состояния Коды состояния используются подобно электронной почте и пересылке файлов (FTP). Наиболее распространенные значения кодов: 1xx Информация. Не используется, но зарезервирован для применения в будущем. 2xx Успешно. Запрошенная операция была успешно
3.3. Команды отмены и возврата действия
3.3. Команды отмены и возврата действия Конечно же, в процессе редактирования (как и выполнения любой другой работы в Word) никто не застрахован от ошибок. Можно ошибиться и при перемещении текста, и при выборе размера шрифта, и во многом другом. Для исправления ошибок в
2.2.3. Коды ошибок системных вызовов
2.2.3. Коды ошибок системных вызовов Большинство системных вызовов возвращает 0, если операция выполнена успешно, и ненулевое значение — в случае сбоя. (В некоторых случаях используются другие соглашения. Например, функция malloc() при возникновении ошибки возвращает нулевой
Оператор возврата return
Оператор возврата return Синтаксис:return [<выражение>];Действие:Оператор возврата return заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за
7.9.5. Параметры и тип возврата
7.9.5. Параметры и тип возврата Вернемся к задаче, сформулированной в начале данного раздела. Как использовать указатели на функции для сортировки элементов? Мы можем передать в алгоритм сортировки указатель на функцию, которая выполняет сравнение:int sort( string*, string*,int (*)( const
Пример 6-2. Использование символа ! для логической инверсии кода возврата
Пример 6-2. Использование символа ! для логической инверсии кода возврата true # встроенная команда "true".echo "код возврата команды "true" = $?" # 0! trueecho "код возврата команды "! true" = $?" # 1# Обратите внимание: символ "!" от команды необходимо отделять пробелом.# !true вызовет сообщение
18.1. Коды завершения
18.1. Коды завершения Перед тем как рассмотреть некоторые примеры удачных сценариев, посвятим несколько слов кодам завершения. Каждая выполняемая команда возвращает код завершения. Чтобы просмотреть его, достаточно воспользоваться кодом завершения последней команды:$ echo
Виртуальные коды клавиш
Виртуальные коды