4.3. Определение ошибок

4.3. Определение ошибок

«Если неприятность может произойти, она случается»

- Закон Мерфи -

«Будь готов»

- Бойскауты -

Ошибки могут возникнуть в любое время. Диски могут заполниться, пользователи могут ввести неверные данные, сетевой сервер, с которого осуществляется чтение, может отказать, сеть может выйти из строя и т.д. Важно всегда проверять успешность завершения каждой операции.

Основные системные вызовы Linux почти всегда возвращают при ошибке -1 и 0 или положительное значение при успехе. Это дает возможность узнать, была операция успешной или нет:

int result;

result = some_system_call(param1, param2);

if (result < 0) {

 /* ошибка, что-нибудь сделать */

} else

 /* все нормально, продолжить */

Знания того, что произошла ошибка, недостаточно. Нужно знать, какая произошла ошибка. Для этого у каждого процесса есть предопределенная переменная с именем errno. Всякий раз, когда системный вызов завершается ошибкой, errno устанавливается в один из набора предопределенных значений ошибок errno и предопределенные значения ошибок определены в файле заголовка <errno.h>.

#include <errno.h> /* ISO С */

extern int errno;

Хотя сама errno может быть макросом, который действует подобно переменной int — она не обязательно является действительной целой переменной. В частности, в многопоточном окружении у каждого потока будет своя индивидуальная версия errno. Несмотря на это, практически для всех системных вызовов и функций в данной книге вы можете рассматривать errno как простую int.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Обработка ошибок

Из книги автора

Обработка ошибок Спецификация HTML5 не просто объявляет, что должны делать браузеры, когда они обрабатывают синтаксически правильную разметку. Впервые за всю историю HTML спецификация также объявляет, что? браузеры должны делать, когда им встречаются документы с ошибками


26.4. Обработка ошибок

Из книги автора

26.4. Обработка ошибок Каждая из функций popt, которая может возвращать ошибки, возвращает целочисленные значения. В случае возникновения ошибки возвращается отрицательный код. В табл. 26.2 перечислены коды возможных ошибок. После таблицы дается подробное обсуждение каждой


Обработка ошибок

Из книги автора

Обработка ошибок В предыдущем разделе мы обсудили разницу между системными вызовами и библиотечными функциями. Они также различаются по способу передачи процессу информации об ошибке, произошедшей во время выполнения системного вызова или функции библиотеки.Обычно в


11.1. Как не совершать ошибок?

Из книги автора

11.1. Как не совершать ошибок? Очень легко нечаянно себя рассекретить. Достаточно один раз без анонимизации зайти под своим "анонимным именем" на ресурс, на который вы обычно заходили анонимно. Это самая распространенная ошибка – просто зашли на сайт из другого браузера, не


Не допускайте ошибок

Из книги автора

Не допускайте ошибок Ошибки в словах вряд ли порадуют покупателей. Помните об этом при создании продающего текста. Представьте себя на месте клиента. Он открывает письмо и понимает, что вы даже не потрудились грамотно написать слова. Как ему теперь поверить в вашу


Обработка ошибок

Из книги автора

Обработка ошибок Чтобы посетитель мог быстро исправить допущенные ошибки, от него требуется не только внимание и терпение. В ответ на некорректный ввод данных сайт должен выдать понятное сообщение. Обычно обработку ошибок возлагают на программистов. Им говорят:


8.5. Фиксация ошибок

Из книги автора

8.5. Фиксация ошибок Если вы проследили за ходом выполнения программы и обнаружили, что она работает неверно, то вам захочется зафиксировать ошибку и запустить программу снова. Предположим, что ваша программа имеет разумные размеры, тогда она скорее всего уже хранится в


Обработка ошибок

Из книги автора

Обработка ошибок Из-за ограниченного объема главы я не могу подробно остановиться на рассмотрении такого чрезвычайно важного вопроса, как обработка ошибок. Однако очень важно включить код обработки ошибок в каждую процедуру базы данных. Подробные сведения о написании


Контроль ошибок

Из книги автора

Контроль ошибок Существует широко распространенная проблема, связанная с вводом в машину данных, которые должны использоваться определенным образом. Один из методов ее решения состоит в "контроле ошибок". Это означает, что, перед тем как приступить к обработке данных,


2.2. Защита от ошибок

Из книги автора

2.2. Защита от ошибок Написать программу, которая корректно работает при "разумном" использовании, — трудная задача. Написать программу, которая ведет себя "разумно" при возникновении ошибок, — еще труднее. В этом разделе описываются методики программирования, позволяющие


Обнаружение ошибок

Из книги автора

Обнаружение ошибок Когда происходит ошибка в операции с потоком, устанавливается в ненулевое значение флажок ошибки для потока. Можно использовать макроопределение ferror, чтобы определить, произошла ли ошибка.После каждой ошибки флажок ошибки остается установленным до


Протокол ошибок

Из книги автора

Протокол ошибок Если для вас важно сохранять протокол ошибок, помните, что исключения, возникающие у клиента, приводят к отмене всей работы, выполненной в модуле. Если вы ведете протокол в таблице базы данных, то записи протокола исчезнут вместе с другой отмененной


3.1.4 Обработка ошибок

Из книги автора

3.1.4 Обработка ошибок Поскольку программа так проста, обработка ошибок не сотавляет большого труда. Функция обработки ошибок просто счтает ошибки, пишет сообщение об ошибке и возвращает управлние обратно:int no_of_errors;double error(char* s) (* cerr «„ "error: " «« s «« « “; no_of_errors++; return 1;


7.3.4 Обработка Ошибок

Из книги автора

7.3.4 Обработка Ошибок Есть четыре подхода к проблеме, что же делать, когда во время выполнения универсальное средство вроде slist сталкивется с ошибкой (в С++ нет никаких специальных средств языка для обработки ошибок):1. Возвращать недопустимое значение и позволить