НазадОглавлениеДалее

ПРИЛОЖЕНИЕ Б. СООБЩЕНИЯ ОБ ОШИБКАХ

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

Сообщение об ошибке связано с каждым значением errno. Это сообщение может быть напечатано с помощью функции perror.

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

Таким образом, для получения точных результатов необходимо выполнить проверку на ошибку и напечатать сообщение об ошибке, если требуется, сразу после вызова.

В файле errno.h содержится определение значений errno. Однако не все определения, заданные в файле errno.h используются под ОС MS-DOS.

В настоящем приложении описываются только те значения переменной errno, которые используются в ОС MS-DOS. Для получения полного списка значений errno см. файл errno.h.
#define EZERO0/*Error 0*/
#define EINVFNC1/*Invalid function number*/
#define ENOFILE2/*File not found*/
#define ENOPATH3/*Path not found*/
#define ECONTR7/*Memory blocks destroyed*/
#define EINVMEM9/*Invalid memory block address*/
#define EINVENV10/*Invalid environment*/
#define EINVFMT11/*Invalid format*/
#define EINVACC12/*Invalid access code*/
#define EINVDAT13/*Invalid data*/
#define EINVDRV15/*Invalid drive specified*/
#define ECURDIR16/*Attempt to remove CurDir*/
#define ENOTSAM17/*Not same device*/
#define ENMFILE18/*No more files*/
 
#define ENOENT2/*No such file or directory
#define EMFILE4/*Too many open files*/
#define EACCES5/*Permission denied*/
#define EBADF6/*Bad file number*/
#define ENOMEM8/*Not enough core*/
#define ENODEV15/*No such device*/
#define EINVAL19/*Invalid argument*/
#define E2BIG20/*Arg list too long*/
#define ENOEXEC21/*Exec format error*/
#define EXDEV22/*Cross-device link*/
#define EDOM33/*Math argument*/
#define ERANGE34/*Result too large*/
#define EEXIST35/*File already exists*/

Таблица

Значения переменной errno и их смысл
ЗначениеСообщениеОписание
E2BIGArg list too long (список аргументов слишком длинный)Список аргументов превышает 128 байтов, или память, требуемая для информации окружения, превышает 32 Кбайта.
EACCESPermission denied (доступ невозможен)Доступ невозможен: разрешение файлов не позволяет указанный доступ. Эта ошибка может происходить в ряде обстоятельств; при попытке получить доступ к файлу (или, в таком же случае, оглавлению) таким образом, который несовместим с атрибутами файла. Например: попытка чтения из файла который не открыт, попытка записи в файл, открытый только для чтения, или открыть оглавление вместо файла. В версиях MS-DOS 3.0 и выше, EACCES также может указывать на нарушение запирания или разделения. Ошибка может также встретиться при попытке переименовать файл или удалить существующее оглавление.
EBADFBad file number (плохой номер дескриптора)Handle указанного файла не является действительным значением handle для файла или относится к неоткрытому илу; или была попытка записать в йл или устройство, открытые только для чтения (или наоборот).
EDEADLOCKResource deadlock would occur (произошел тупик разделения ресурсов)Запирающее нарушение: файл не может быть заперт после 10 попыток (MS-DOS версия 3.0 и позже).
EDOMMath argument, (аргумент математический)Аргумент к математической функции не входит в область функции.
EEXISTFile exists (файл существует)Флаги O_CREAT и O_EXCL указаны, когда открывается файл, а файл с таким именем уже существует.
EINVALInvalid argumentНедействительная величина, которая дана для одного из аргументов к функции. Например, величина дана для начала, но указатель файла позиционирован раньше начинающегося в файле.
EMFILEToo many open files (слишком много открытых файлов)Нет более доступных дескрипторов, так как слишком много открытых файлов.
ENOENTNo such file or directory (нет такого файла или каталога)Указанные файл или оглавление не существуют или не могут быть найдены. Это сообщение возможно, когда указанный файл не существует, или компонента существующего оглавления не указана в пути.
ENOEXECExec format error (ошибка формата ехес)Попытка выполнения файла, который не является выполняемым или имеет недействительный формат для выполнения.
ENOMEMNot enough core, (нет достаточного ядра)Нет достаточной памяти, годной к использованию. Это сообщение может происходить, когда недостаточно имеющейся памяти для выполнения дитя процесса, или когда запрос на получение памяти в sbrk или getcwd не может быть удовлетворен.
ENOSPC QQQQNo space left on device (нет пространства, отпущенного в устройстве)Больше нет пространства, доступного для записи на устройстве (например, диск полон).
ERANGEResult too large (результат слишком большой)Аргумент в математической функции слишком большой, результат частично или вообще потерян. Эта ошибка может появиться в функции, когда аргумент больше, чем ожидается. (Например, когда аргумент имя-пути в функции getcwd длиннее, чем ожидается).
EXDEVCross-device linkПри попытке сделать передачу файла с одного устройства на другое (используя функцию rename).
  Математические ошибки
DOMAIN Аргумент функции вне сферы этой функции.
OVERFLOW Результат слишком большой, чтобы быть представленным в возвращаемом значении функции.
PLOSS Произошла частичная потеря значимости.
SING Специфичный аргумент: аргумент функции имеет незаконную величину (например, передача величины 0 в функцию, которая запрашивает ненулевую величину).
TLOSS Полная потеря значимости.
UNDERFLOW Результат слишком мал.


НазадОглавлениеДалее