Проверка ошибок

Основные системные вызовы Linux почти всегда при ошибке возвращают –1 (иногда - нулевой указатель NULL, или константу EOF, которая определена для той цели). При успешном завершении 0 (или положительное значение).

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

В man для каждого системного вызова описаны возможные значения errno, которые могут иметь место. Возможные значения определены через зарезервированные (операционной системой) символические имена. Имена начинаются с "E", содержат символы верхнего регистра или цифры (например, EACCES, EIO, EEXIST, …).

Сообщения об ошибках

Библиотека имеет функции и переменные, разработанные, чтобы облегчить вывод информативных сообщений об ошибках в обычном формате. Функции strerror(3) и perror(3) выдают стандартное сообщение об ошибках для данного кода ошибки; переменная program_invocation_short_name предоставляет удобный доступ к имени программы, которая столкнулась с ошибкой.

Функция strerror возвращает указатель на строку, соответствующую номеру ошибки, заданному параметром errnum. Значение errnum обычно исходит из переменной errno.

Функция perror печатает сообщение об ошибках в поток stderr.

Обе функции strerror(3) и perror(3) производят одно и то же сообщение для любого данного кода ошибки; точный текст изменяется от системы к системе. На системе GNU, сообщения довольно коротки; не имеются никаких многострочных сообщений или вложенных символов перевода строки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: