Errno
errno, _doserrno,sys_errlist, sys_nerr
Функция Позволяет функции perror печатать сообщение об ошибке.
Синтаксис extern int errno; extern int _doserrno; extern char * sys_errlist[ ]; extern int sys_nerr;
Объявлено в errno.h,stdlib.h(errno,_doserrno, sys_errlist,sys_nerr) dos.h(_doserrno)
Описание errno, sys_errlist и sys_nerr) использую- тся в функции perror для печати сообщений об ошибке. _doserrno это переменная, которая переда- ет многие коды ошибок DOS переменной errno; одна- ко perror не использует непосредственно перемен- ную _doserrno.
_doserrno. Когда при системном вызове DOS происходит ошибка, текущий код ошибки DOS присваи- вается переменной _doserrno. Переменная errno по- лучает параллельное значение кода, соответствующее операционной системе UNIX.
errno. Где бы ни произошла ошибка при системном вызове, переменная errno указывает на тип ошибки. Иногда errno и _doserrno бывают идентичны. В ос- тальных случаях errno не содержит действительный код ошибки DOS, который содержится в _doserrno. При некоторых ошибках их код может присваиваться только переменной errno, но не _doserrno.
sys_errlist. Чтобы обеспечить лучший контроль за выдачей сообщений об ошибках, существует массив строк сообщений, хранящийся в sys_errlist. errno может использоваться в качестве индекса на мас- сив, где каждый индекс соответствует требуемой строке. Строка не содержит не одного символа пе- рехода на новую строку.
sys_nerr. Данная переменная представляет собой число строк сообщений об ошибках в переменной sys_errlist.
Следующая таблица дает мнемонические значения для сообщений, хранящихся в переменной sys_errlist. --------------------------------------------------------------------- Мнемомика Значение --------------------------------------------------------------------- E2BIG Список аргументов слишком длинный. EACCES Отказ доступа. EBADF Неверный номер файла. ECONTR Блоки памяти разрушены. ECURDIR Попытка удаления текущего директория. EDOM Ошибка области определения. EEXIST Файл уже существует. EFAULT Неизвестная ошибка. EINVACC Неверный код доступа. EINVAL Неверный аргумент. EINVDAT Неверные данные. EINVDRV Неверная спецификация устройства. EINVENV Неверное окружение. EINVFMT Неверный формат. EINVFNC Неверный номер функции. EINVMEM Неверный адрес блока памяти. EMFILE Слишком много открытых файлов. ENMFILE Больше нет файлов. ENODEV Не существует такого устройства. ENOENT Не существует такого файла или директории. ENOEXEC Ошибка формата. ENOFILE Не существует такого файла или директории. ENOMEM Не хватает памяти. ENOPATH Маршрут не найден. ENOTSAM Не такое же устройство. ERANGE Результат превышает допустимые пределы. EXDEV Перекрестная связь между устройствами. EZERO Ошибка 0. ---------------------------------------------------------------------
Следующий список дает мнемонику действительных кодов ошибок DOS, которые присваиваются перемен- ной _doserrno. Значения в _doserrno могут содер- жать, или не содержать, (через errno) эквивалент- ные строки сообщений об ошибках в sys_errlist. --------------------------------------------------------------------- Мнемоника Код ошибки DOS --------------------------------------------------------------------- E2BIG Неверное окружение. EACCESS Отказ доступа. EACCESS Неверный доступ. EACCESS Текущий директорий. EBADF Неверный дескриптор. EFAULT Зарезервировано. EINVAL Неверные данные. EINVAL Неверная функция. EMFILE Слишком много открытых файлов. ENOENT Нет такого файла или директрория. ENOEXEC Неверный формат. ENOMEM Разрушен Mcb. ENOMEM Выход за пределы памяти. ENOMEM Неверный блок. EXDEV Неверное устройство. EXDEV Не такое же устройство. ---------------------------------------------------------------------
Пользуйтесь документом "Справочное руководство программиста по DOS". В нем вы найдете подробное описание кодов ошибок DOS.
Пример:
#include
#include
extern char *sys_errlist[];
main() { int i=0; while(sys_errlist[i++]) printf("%s\n",sys_errlist[i]); return 0; }