Процедура
perror()
выводит в стандартный поток ошибки сообщения, описывая ошибку,
произошедшую при последнем системном вызове или вызове библиотечной
функции. Сначала (если
s
не равно NULL и
*s
не равно NULL) выводится строка
s,
затем двоеточие, пробел и сообщение, завершающееся переводом строки.
Для большего удобства параметы строки должны содержать имя функции,
вызвавшей ошибку. Номер ошибки извлекается из внешней переменной
errno,
которая устанавливается в случае ошибки, но не "очищается" в случае
нормального завершения работы. Глобальный список ошибок
sys_errlist[],
упорядоченный в соответствии с
errno,
может быть использован для вывода сообщений об ошибке без перевода
строки. Наибольший номер в таблице имеет
sys_nerr -1.
Будьте осторожны при непосредственном использовании этого массива. Новые
элементы не могут быть вписаны в
sys_errlist[].
Если системный вызов завершается ошибкой, то возвращается -1 и переменная
errno
устанавливается равной коду ошибки (эти величины могут быть найдены в
<errno.h>).
Многие системные функции работают именно так.
Функция
perror()
позволяет отображать коды ошибок в понятном человеку виде. Заметьте, что
errno
не является определенной после нормального завершения системного вызова:
этот вызов может изменить переменную кода ошибки, даже если завершился удачно
(например, потому, что он использовал другие функции, завершившиеся ошибкой).
Таким образом, если за вызовом, завершившимся ошибкой,
непосредственно не следует
perror,
то величина
errno
должна быть сохранена.