если при загрузке обнаруживается сопроцессор
_8087
Функция Флаг состояния сопроцессора.
Синтаксис extern int _8087;
Объявлено в dos.h
Описание Переменная _8087 устанавливается в нену- левое значение (1, 2 или 3), если при загрузке обнаруживается сопроцессор с плавающей точкой (8087, 80287 или 80387 соответственно). Иначе пе- ременная устанавливается в 0. Эта проверка может быть заменена на установку переменной окружения в YES или NO. (Команды SET 87=YES или SET 87=NO; пробелов в знаке равенства быть не должно). В этом случае переменная _8087 установится в 1 или 0. Более подробная информация об этой переменной содержится в Главе 4 Руководства программиста "Модели памяти, операции с плавающей точкой и оверлеи.
_Argc
_argc
Функция Содержит количество аргументов командной строки.
Синтаксис extern int _argc;
Объявлено в dos.h
Описание _argc имеет значение argc, передаваемое функ- ции main при запуске программы.
_Argv
_argv
Функция Массив указателей на аргументы командной строки.
Синтаксис extern char * _argv[];
Объявлено в dos.h
Описание _argv указывает на массив, содержащий аргу- менты командной строки (элементы argv[]), переда- ваемые функции main при запуске программы.
_Chmod
_chmod
Функция Изменяет режим доступа к файлу.
Синтаксис #include
#include
int _chmod(const char * path, int func[,int attrib]);
Файл, содержащий io.h прототип
Описание Функция _chmod может изменять или устанавливать атрибуты файлов DOS. Если func равен 0, то функ- ция возвращает текущие атрибуты DOS для данного файла. Если func равен 1, то атрибуты устанавли- ваются в сооответствии с аргументом attrib.
attrib может быть одной из следующих символьных константных значений (определенных в dos.h):
FA_RDONLY только чтение FA_HIDDEN скрытый файл FA_SYSTEM системный файл FA_LABEL метка тома FA_DIREC директория FA_ARCH архив
Возвращаемое При успешном завершении _chmod возвращает слово с значение атрибутами файла; иначе, возвращается значение -1.
В случае ошибки errno присваивается одно из сле- дующих значений:
ENOENT - Маршрут или имя файла не найдены EACCES - Отказ доступа
Переносимость _chmod уникальна для DOS.
Смотрите также
Пример:
#include
#include
#include
#include
int get_file_attrib(char *filename);
int main(void); { char filename[128]; int attrib; printf("Введите имя файла:"); scanf("%s",filename); attrib = get_file_attrib(filename); if(attrib == -1) switch(errno) { case ENOENT:printf("Маршрут или имя файла не найдены\n"); break; case EACCES:printf("Отказ доступа\n"); break; default: printf("Ошибка номер %d\n",errno); break; } else { if(attrib & FA_RDONLY) printf("%s имеет атрибут только на чтение\n",filename); if(attrib & FA_HIDDEN) printf("%s - cкрытый файл\n",filename); if(attrib & FA_SYSTEM) printf("%s - системный файл \n",filename); if(attrib & FA_LABEL) printf("%s - метка тома\n",filename); if(attrib & FA_DIREC) printf("%s - директория\n",filename); if(attrib & FA_ARCH) printf("%s - архивный файл\n",filename); } return 0; } /* возвращает атрибуты файла */ int get_file_attrib(char *filename) { return(_chmod(filename,0)); }
_clear87
Функция Очищает слово состояния операций с плавающей точ- кой.
Синтаксис #include
insigned int _clear87(void);
Файл, содержащий float.h прототип
Описание Функция _clear87 очищает слово состояния операций с плавающей точкой, которое является комбинацией слова состояния сопроцессора 8087/80287 и других условий, обнаруженных программой обработки исклю- чительных ситуаций сопроцессора 8087/80287.
Возвращаемое Биты, из которых состоит возвращаемое значение значение функции, содержат старое слово состоя- ния операций с плавающей точкой до его очистки. Смотрите описание констант в float.h, где вы най- дете полное определение битов слова состояния.
Смотрите также 7, 7.
Пример:
#include
#include
int main(void) { float x; double y=1.5e-100; printf("Состояние 8087 перед ошибкой: %X\n",_status87()); x = y; /* создание состояния переполнения и потери точности */ printf("Состояние 8087 после ошибки: %X\n",_status87()); _clear87(); printf("Состояние 8087 после обнуления: %X\n",_status87()); return 0; }
_Close
_close
Функция Закрывает файл.
Синтаксис #include
int _close(int handle);
Файл, содержащий io.h прототип
Описание _close закрывает файл, связанный с дескриптором handle. Аргумент handle обозначает дескриптор файла, присваиваемый ему при вызове функций _creat, creat, creatnew, creattemp, dup, dup2, _open или open.
Примечание. Эта функция не записывает символ Ctrl-Z в конец файла. Если вы хотите завершить файл этим символом, его следует явно вывести.
Возвращаемое При успешном завершении _close значение возвращает значение 0. Иначе возвращается значе- ние -1.
Если аргумент handle не является дескриптором от- крытого файла, это приводит к неудачному заверше- нию операции. errno получает следующее значение:
EBADF - Неверный номер файла.
Переносимость _close уникальна для DOS.
Смотрите также
Пример:
#include
#include
#include
int main(void) { int handle; char buf[11] = "0123456789"; /* создать файл содержащий 10 байт */ handle = open("DUMMY.FIL",O_CREAT); write(handle,buf,strlen(buf)); /* закрыть файл */ _close(handle); return 0; }
_Control
_control87
Функция Манипулирует словом управления операций с плавающей точкой.
Синтаксис #include
unsigned int _control87(unsigned int newcw, unsigned int mask);
Файл, содержащий float.h прототип
Описание _control87 извлекает и изменяет слово управления операциями с плавающей точкой.
Слово управления плавающей точки имеет тип unsigned int, в котором бит за битом перечислены режимы операций с плавающей точкой, а именно: ре- жимы точности, бесконечности и округления. Изме- нение этих режимов позволяет маскировать исключи- тельные состояния операций с плавающей точкой.
_control87 сравнивает биты в mask с битами в newcw. Если бит в mask равен 1, то соответствую- щий бит в new содержит новое значение для такого же бита в слове управления операций с плавающей точкой, а _control87 устанавливает этот бит в слове управления в новое значение.
Пример:
Исходное слово управления: 0100 0011 0110 0011 mask 1000 0001 0100 1111 newcw 1110 1001 0000 0101 Изменяющиеся биты 1xxx xxx1 x0xx 0101
Если mask равен 0, то _control87 возвращает слово управления операциями с плавающей точкой без из- менения.
_control87 не изменяет бит Denormal, поскольку Turbo C++ использует ненормальную обработку иск- лючительных ситуаций.
Возвращаемое Биты в возвращаемом значении представляют собой значение новое слово управления операциями с плавающей точ- кой. Полное описание битов, возвращаемых функцией _control87, приведено в в файле заголовка float.h.
Переносимость _control87 уникальна для DOS.
Смотрите также 7, 7.
Пример: /* маскирование исключительных ситуаций вычисле- ний с плавающей точкой */ _control87(MCW_EM,MCW_EM);
_Creat
_creat
Функция Создает новый файл или перезаписывает существующий.
Синтаксис #include
int _creat(const char * path, int attrib);
Файл, содержащий io.h прототип
Описание _creat берет аргумент attrib - слово атрибутов DOS. Файл всегда открывается в двоичном режиме. При успешном создании файла указатель файла уста- навливается на начало этого файла. Файл открыва- ется сразу для чтения и записи.
Если файл уже существует, то его размер устанав- ливается равным 0. (Это эквивалентно удалению файла и созданию нового файла с этим же именем).
Аргумент attrib в _creat может быть одной из сле- дующих констант (определенных в dos.h):
FA_DRONLY Только чтение FA_HIDDEN Скрытый файл FA_SYSTEM Системный файл
Возвращаемое При успешном завершении _creat возвращает дескрип- значение тор нового файла, неотрицательное число; иначе воз- вращается -1.
В случае ошибки errno принимает одно из следующих значений:
ENOENT - Маршрут или имя файла не найдены EMFILE - Слишком много открытых файлов EACCES - Отказ доступа
Переносимость _creat уникальна для DOS.
Смотрите также
Пример:
#include
#include
#include
#include
#include
#include
#include
int main(void) { int handle; char buf[] = "0123456789"; /* создать файл для чтения и записи в двоичном режиме */ if((handle = _creat("DUMMY.FIL",0)) < 0) { switch(errno) { case ENOENT: printf("Ошибка:Маршрут или имя файла не найдены.\n"); break; case EMFILE: printf("Ошибка:Слишком много открытых файлов.\n"); break; case EACCES: printf("Ошибка: Отказ доступа\n"); break; default: printf("Ошибка при создании файла\n"); break; } exit(1); } /* записать в файл строку с завершающим нулевым символом */ write(handle,buf,strlen(buf)+1); /* закрыть файл */ close(handle); return 0; }
_Ctype
_ctype
Функция Массив атрибутов символа.
Синтаксис extern char _ctype[];
Объявлено в ctype.h
Описание _ctype.h является массивом атрибутов символа, индексируемого по значению ASCII + 1. Каждый эле- мент является набором бит, описывающих символ.
__Emit__
__emit__
Функция Вставляет значение литерала непосредственно в код.
Синтаксис #include
void __emit__(argument,...);
Файл, содержащий dos.h прототип
Описание Функция __emit__ позволяет вам вставить значение литерала непосредственно в объектный код, как если бы он был откомпилирован. Она используется для ге- нерирования машинных инструкций без использования встроенных операторов ассемблера.
Обычно аргументы __emit__ вызывают однобайтовые машинные команды. Однако возможности данной функ- ции позволяют строить более сложные команды, вплоть до ссылок на переменные Си.
Предупреждение! Этой функцией могут воспользовать- ся только программисты, хорошо ориентирующиеся в машинном языке процессоров семейства 80х86. Вы мо- жете использовать данную функцию для помещения произвольных байтов в машинный код функции. Если эти байты будут неправильными, то это может при- вести к неисправимой ошибке. Turbo C++ не анализи- рует код, помещаемый таким образом. Если эти ма- шинные команды изменяют значение регистров или пе- ременных, то Turbo C++ не знает об этом и не сох- раняет их перед использованием данного кода, как он делает это при работе со встроенным ассембле- ром, где он, например, распознает использование регистров SI и DI и сохраняет их. Здесь же вы пре- доставлены сами себе.
Вы должны передать __emit__ по меньшей мере 1 ар- гумент; реальное число может быть больше. Аргумен- ты этой функции рассматриваются не так, как других функций: никаких преобразований они не претерпева- ют.
Имеется специальное ограничение формы аргументов __emit__. Они должны иметь форму константных выра- женй, т.е. чтобы их можно было использовать для инициализации статических объектов. Это означает, что в выражениях можно использовать целые констан- ты, константы с плавающей точкой и адреса стати- ческих объектов. Значение записывается в точке вы- зова функции также, как если они используются для инициализации данных. Можно также использовать ад- реса параметров и автоматических переменных, плюс или минус константное смещение. Для этих аргумен- тов запоминается смещение переменной в BP.
Количество байт, помещаемых в объектный код, опре- деляется типом аргумента, за исключением следующих случаев:
- знаковая целая константа (например 0х90) значе- ние которой лежит в диапазоне от 0 до 255 рассмат- ривается как символ.
- Когда используется адрес автоматической перемен- ной или параметра, то если смещение переменной в BP лежит в диапазоне от -128 до 127 то записывает- ся байт, иначе слово.
Просто байты записываются следующим образом:
__emit__(0x90);
Если вы хотите записать слово, однако его значение меньше 255, то просто преобразуйте его в unsigned:
__emit__(0xB8,(unsigned)17);
или
__emit__(0xB8, 17u);
Двух- или четырехбайтовые адреса можно прямо ука- зать с помощью типов: void near * и void far *, соответственно.
Возвращаемое Нет. значение
Переносимость __emit__ уникальна для семейства машин 80х86.
Пример:
#include
int main() { /* вставить код, который генерирует печать экрана, через прерывание int 5 */ __emit__(0xcd,0x05); /* INT 05h */ return 0; }
_Exit
_exit
Функция Прекращает выполнение программы.
Синтаксис #include
void _exit(int status);
Файл, содержащий process.h, stdlib.h прототип
Описание Функция _exit заканчивает процесс без закрытия ка- ких-либо файлов, сохранения какого-либо вывода, вызова каких-либо "функций выхода".
В любом случае, для вызываемого процесса обеспечи- вается аргумент status, который представляет собой статус выхода для данного процесса. Обычно значе- ние, равное нулю, используется для обозначения нормального выхода из процесса,а ненулевое значе- ние обозначает какие-либо ошибки.
Возвращаемое Нет. значение
Переносимость _exit доступна в системе UNIX.
Смотри также .., ..
Пример:
#include
#include
void dose(void);
int main(void) { atexit(dose); _exit(0); return 0; } void dose() { printf("Привет\n"); }
_Fmode
_fmode
Функция Режим преобразования файла по умолчанию.
Синтаксис extern int _fmode;
Объявлено в fcntl.h
Описание Данная переменная определяет, в каком режиме (текстовом или двоичном), файлы будут открываться и преобразовываться. По умолчанию, значением _fmode является O_TEXT, что означает, что файлы будут читаться в текстовом режиме. Если же _fmode получит значение O_BINARY, файлы будут открыты и прочитаны в двоичном режиме. (O_TEXT и O_BINARY определены в файле fcntl.h).
В текстовом режиме, при вводе, комбинация возврат каретки/перевод строки (CR/LF) преобразуется в один символ перевода строки (LF). При выводе, преобразование обратное - символы LF преобразуют- ся в комбинацию CR/LF. В двоичном режиме такое преобразование не произ- водятся. Вы можете изменить режим по умолчанию, устанавли- ваемый в _fmode, если для библиотечных функций fopen, fdopen, frеopen вы определите аргумент type, равный t (для текстового режима) или b (для двоичного режима). Также, аргумент access функции open может содержать либо O_BINARY, либо O_TEXT, который явно определяет режим (текстовый или дво- ичный) открытия файла (он определяется аргументом pathname функции open).
_Fpreset
_fpreset
Функция Выполняет рестарт математического пакета операций с плавающей точкой.
Синтаксис #include
void _fpreset();
Файл, содержащий float.h прототип
Описание Функция _fpreset выполняет рестарт математического пакета операций с плавающей точкой. Данная функ- ция обычно используется вместе с функциями signal, system, или функциями exec... или spawn...
Примечание. При работе под операционной системой DOS, если в программе используется математический сопроцессор 80x87, "дочерний" процесс (выполняе- мый посредством функций system, exec... или spawn...), может изменить состояние операций с плавающей точкой "родительского" процесса.
Если вы используете сопроцессор 80x87, примите следующие предосторожности:
- Не вызывайте функции exec..., spawn... или system, пока выражение с плавающей точкой не вы- числено.
- Для установки операций с плавающей точкой после использования функций system, exec... или spawn... вызывайте функцию _fpreset (если только есть какой-либо шанс выполнения дочерним процес- сом операций с плавающей точкой, посредством соп- роцессора 8087/80287).
Возвращаемое Отсутствует. значение
Смотрите также 7, 7, .., .., 7,
Пример:
#include
#include
#include
#include
#include
#include
jmp_buf reenter;
/* определим программу обработки ошибочных ситуаций операций с плавающей точкой */ void float_trap(int sig) { printf("Прерывание по ошибке операций с плавающей точкой.\n"); printf("Для продолжения работы нажмите любую клавишу...\n"); getch(); /* рестарт сопроцессора или эмулятора */ _fpreset(); /* вернутся в точку, в которой возникла ошибка */ longjmp(reenter,-1); } int main(void) { float one = 3.14, two = 0.0; /* установить программу обработки исключительных ситуаций операций с плавающей точкой */ if(signal(SIGFPE,float_trap) == SIG_ERR) { printf("Ошибка при установке программы обработки прерываний\n"); exit(3); } printf("Генерация математической ошибки. Нажмите клавишу...\n"); getch(); if(setjmp(reenter)==0) one /* two; printf("Возврат после обработки прерывания.\n"); return 0; }
_Graphfr
_graphfreemem
Функция Пользователь освобождает графическую память.
Синтаксис #include
void far _graphfreemem(void var *ptr,unssigned size);
Файл, содержащий graphics.h прототип
Описание Графическая библиотека вызывает _graphfreemem для освобождения памяти, ранее занятой с помощью _graphgetmem. Вы можете управлять распределением памяти графической библиотеки посредством просто- го определения вашей собственной версии _graphfreemem (вы должны определить ее так, как показано в описании). Начальная версия этой прг- раммы просто вызывает free.
Возвращаемое Нет. значение
Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.
Смотрите также
Пример:
#include
#include
#include
#include
#include
#define NONSENSE -50
int main(void) { /* Инициация ошибки */ int graphdriver = NONSENSE, gmode, errorcode; int midx,midy;
/* обнуление текстового экрана */ clrscr(); printf("Для инициализацмм графики нажмите любую клавишу..."); getch(); clrscr();
/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");
/* получение результата инициализации */ errorcode = graphresult();
/* выдать соответствующее ошибке сообщение */ if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx()/2; midy = getmaxy()/2; /* вывести сообщение */ settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(midx,midy,"Для выхода из графического режима нажмите любую клавишу "); /* очистка */ getch(); closegraph(); return 0; } /* вызывается ядром графической системы для выделения памяти */ void far *far _graphgetmem(unsigned size) { printf("Вызвана _graphgetmem для выделения %d байт\n",size); printf("Нажмите любую клавишу:"); getch(); printf("\n"); /* выделить память */ return farmalloc(size); } /* вызывается ядром графической системы для освобождения памяти */ void far _graphfreemem(void far *ptr, unsigned size) { printf("Вызвана _graphfreemem для освобождения %d байт\n",size); printf("Нажмите любую клавишу:"); getch(); printf("\n"); /* освободить память */ return farfree(ptr); }
_Graphge
_graphgetmem
Функция Пользователь захватывает графическую память.
Синтаксис #include
void far _graphgetmem(unsigned size);
Файл, содержащий graphics.h прототип
Описание Графическая библиотека вызывает _graphgetmem (но не пользовательская программа) для выделения памяти для внутренних буферов, графических драй- веров и шрифтов. Вы можете управлять распределе- нием памяти графической библиотекой посредством простого определения вашей собственной версии _graphgetmem (вы должны определить ее так, как показано в описании). Начальная версия этой прг- раммы просто вызывает malloc.
Возвращаемое Нет. значение
Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.
Смотрите также
Пример:
#include
#include
#include
#include
#include
#define NONSENSE -50
int main(void) { /* Инициация ошибки */ int graphdriver = NONSENSE, gmode, errorcode; int midx,midy;
/* обнуление текстового экрана */ clrscr(); printf("Для инициализации графики нажмите любую клавишу..."); getch(); clrscr();
/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");
/* получение результата инициализации */ errorcode = graphresult();
/* выдать соответствующее ошибке сообщение */ if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx()/2; midy = getmaxy()/2; /* вывести сообщение */ settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(midx,midy,"Для выхода из графического режима нажмите любую клавишу "); /* очистка */ getch(); closegraph(); return 0; } /* вызывается ядром графической системы для выделения памяти */ void far *far _graphgetmem(unsigned size) { printf("Вызвана _graphgetmem для выделения %d байт\n",size); printf("Нажмите любую клавишу:"); getch(); printf("\n"); /* выделить память */ return farmalloc(size); } /* вызывается ядром графической системы для освобождения памяти */ void far _graphfreemem(void far *ptr, unsigned size) { printf("Вызвана _graphfreemem для освобождения %d байт\n",size); printf("Нажмите любую клавишу:"); getch(); printf("\n"); /* освободить память */ return farfree(ptr); }
_Heaplen
_heaplen
Функция Содержит длину локального heap.
Синтаксис extern unsigned _heaplen;
Объявлено в dos.h
Описание _heaplen определяет размер локального heap в ма- лых моделях данных (tiny, small, mediuim). _heaplen не существует в больших моделях данных (compact, large, huge), т.к. они не имеют локаль- ного heap.
В моделях small и medium размер сегмента данных вычисляется следующим образом:
data segment [small,medium] = global data + heap + stack
где размер стека может быть получен по _stklen. Если _heaplen установлен в 0, то программа выде- ляет 64Кбайт для сегмента данных, и действитель- ный размер heap равен:
64К - (global data + stack) байт
По умолчанию _heaplen равен 0, так что вам выде- ляется сегмент данных 64К, пока вы не укажете другое значение _heaplen. В модели tiny все (включая код) находится в одном сегменте, поэтому в сегмент данных включается код и 256 байт для PSP.
data segment [tiny] = 256 + code + global data + heap + stack
Если _heaplen равен 0 в модели tiny, то действи- тельный размер heap получается вычитанием PSP, кода, глобальных данных и стека из 64К.
В моделях compact и large не существует локально- го heap, поэтому сегмент данных равен
data segment [compact,large] = global data + stack В модели huge стек является отдельным сегментом, а каждый модуль имеет собственный сегмент данных.
Смотрите также _
_Lrotl
_lrotl
Функция Циклический сдвиг влево длинного целого.
Синтаксис #include
unsigned long _lrotl(unsigned long val,int count);
Файл содержащий stdlib.h прототип
Описание _lrotl производит циклический сдвиг влево на count бит. val имеет тип unsigned long.
Возвращаемое _lrotl возвращает значение val сдвинутое значение влево на count бит.
Переносимость _lrotl уникальна для DOS.
Смотрите также
Пример:
#include
#include
int main(void) { unsigned long result; unsigned long value = 100; result = _lrotl(value,1); printf("Значение %lu сдвинутое влево на 1 бит равно %lu\n", value,result); return 0; }
_Lrotr
_lrotr
Функция Циклический сдвиг вправо длинного целого.
Синтакс #include
unsigned long_lrotr(unsigned long val, int count);
Файл содержащий stdlib.h прототип
Описание _lrotr производит циклический сдвиг вправо на count бит. val имеет тип unsigned long.
Возвращаемое _lrotr возвращает значение val сдвинутое значение влево на count бит.
Переносимость _rotl уникальна для DOS.
Смотрите также
Пример:
#include
#include
int main(void) { unsigned long result; unsigned long value = 100; result = _lrotr(value,1); printf("Значение %lu сдвинутое вправо на 1 бит равно %lu\n", value,result); return 0; }
_Open
_open
Функция открывает файл для чтения или записи.
Синтаксис #include
int _open(const char *filename, int oflags);
Файл, содержащий io.h прототип
Описание Функция _open открывает файл, имя которого опреде- лено параметром filename, и подготавливает его для для последующих операций чтения и/или записи, определяемых параметром oflags. Файл открывается в режиме, определяемом _fmode.
Для функции _open параметр oflags в DOS 2.x огра- ничивается тремя значениями: O_RDONLY, O_WRONLY O_RDWR. В DOS 3.x вводятся дополнительные значе- ния:
O_NOINHERIT - Включается, если файл не может быть передан дочерней программе.
O_DENYALL - Позволяет доступ к файлу только по текущему номеру handle.
O_DENYWRITE - Позволяет любому другому открытию файла только чтение.
O_DENYREAD - Позволяет любому другому открытию файла только запись.
O_DENYNONE - Разрешает разделенное открытие фай- ла.
Эти символические константы (O_...) определены в файле fcntl.h.
В единственный вызов функции open под версией DOS 3.x может быть включено только одно из значений O_DENYxxx. Эти атрибуты разделения доступа к фай- лу даны в дополнение к операциям блокировки.
Максимальное число одновременно открытых файлов задается, как параметр, при конфигурировании сис- темы.
Возвращаемое При успешном завершении _open возвращает целое значение неотрицательное число handle - логический номер открытого файла. Указатель файла (указатель теку- щей позиции) устанавливается на начало файла. При ошибке _open возвращает значение -1, и переменная errno получает одно из следующих значений:
ENOENT - Маршрут или имя файла не найдены; EMFILE - Слишком много открытых файлов; EACCES - Доступ запрещен; EINVACC - Неверный код доступа.
Переносимость Функция _open уникальна для DOS.
Смотрите также
_Openfd
_openfd
Функция Массив режимов доступа.
Синтаксис extern unsigned int _openfd[];
Объявлено в io.h
Описание _openfd является массивом режимов доступа для файлов и устройств.
_Osmajor
_osmajor,_osminor
Функция Содержит старший и младший номер версии DOS.
Синтаксис extern unsigned char _osmajor; extern unsigned char _osminor;
Объявлено в dos.h
Описание Старший и младший номер версии доступны при помощи переменных _osmajor и _osminor. _osmajor содержит номер версии, а _osminor - расширение. Например, если вы работаете с версией DOS 3.2, то _osmajor будет иметь значение 3, а _osminor - 20. Эти пе- ременные могут оказаться полезны, если вы захоти- те написать программы, функционирующие под управ- лением операционной системы MS-DOS версий 2.х и 3.х. Некоторые библиотечные функции работают по-разному в зависимости от номера версии DOS, в то время как другие работают только с версией DOS 3.х. (Например, посмотрите функции _open, creatnew, ioctl в справочной секции данного руко- водства).
_OvrlIni
_OvrlInitExt
Функция Инициализирует систему подкачки дополнительной памяти для администратора оверлеев.
Синтаксис #include
int cdecl far _OvrlInitExt(unsigned long startAddress, unsigned long length);
Файл, содержащий dos.h прототип
Описание _OvrlInitExt проверяет наличие дополнительной памяти, используя известные методы поиска других программ, также использующих дополнительную па- мять, и выделяет в ней память. Если параметр startAdress равен 0, администратор оверлеев опре- деляет начальный адрес и использует, чаще всего, размеры оверлеев. Если startAdress не равен 0, то администратор оверлеев использует память выше этого адреса.
В обоих случаях, ненулевой параметр length опре- деляет максимальний размер памяти, который может быть использован администратором оверлеев.
Возвращаемое _OvrlInitExt возвращает 0, если администратор овер- значение леев может использовать для подкачки дополнитель- ную память.
Переносимость _OvrlInitExt уникальна для Turbo C++.
Смотрите также
Пример:
#include
int main(void) { /* использовать дополнительную память с адреса 0x200000L (2Mб) причем столько, сколько необходимо */ _OvrlInitExt(0x200000L,0); . . . }
_Psp
_psp
Функция Содержит адрес префикса сегмента программы (PSP).
Синтаксис extern unsigned int _psp;
Объявлено в dos.h
Описание _psp содержит адрес сегмента PSP (префикс прог- раммного сегмента) для текущей программы. PSP представляет собой дескритор процесса DOS; он со- держит специальную информацию DOS о программе. Подробную информацию о PSP вы найдете в документе "Справочное руководство программиста по DOS".
_Read
_read
Функция Считывает данные из файла.
Синтаксис #include
int _read(int handle, void *buf, unsigned len);
Файл, содержащий io.h прототип
Описание Функция _read делают попытку считать len байт из файла, связанного с handle, в буфер, адресуемый параметром buf. Функция _read является непосредс- твенным вызовом операции чтения DOS.
В файле, открытом в текстовом режиме, функция read не удаляет символы "возврат каретки".
Параметр handle - это тот же самый параметр, что получают на выходе функций creat, open, dup, dup2.
Функция _read начинает чтение с текущего положе- ния указателя позиции в файле. Когда чтение за- вершено, функция увеличивают указатель файла на число считанных байт. При работе функций с уст- ройствами, байты данных считываются непосредст- венно с устройства.
_read может считать за один раз до 65534 байт, поскольку 65535 (0xFFFF) это -1, индикатор ошибки.
Возвращаемое При успешном завершении возвращается положительное значение целое число, являющееся числом байтов, помещенных в буфер; По концу файла (EOF), функция возвращает нуль. При ошибке _read возвращает -1, и глобаль- ной переменной errno присваивает одно из следую- щих значений:
EACCES - Доступ запрещен; EBADF - Неверный номер файла.
Переносимость _read уникальна для DOS.
Смотрите также
Пример:
#include
#include
#include
#include
#include
/* #include */
int main(buffer) { void *buf; int handle,bytes; buf = malloc(10); /* Поиск в текущей директории файла с именем TEST.$$$ и попытка чтения из него 10 байт. Перед запуском этой программы необходимо создать файл TEST.$$$ */ if((handle = open("TEST.$$$",O_RDONLY|O_BINARY))== -1) { printf("Ошибка при открытии файла.\n"); exit(1); } if((bytes = _read(handle,buf,10))==-1) { printf("Ошибка чтения.\n"); exit(1); } printf("Считано %d байт.\n",bytes); return 0; }
_Rotl
_rotl
Функция Циклический сдвиг влево целого без знака.
Синтаксис #include
unsigned _rotl(unsigned value, int count);
Файл, содержащий stdlib.h прототип
Описание _rotl производит циклический сдвиг значения value влево на count разрядов. value рассматривается как целое без знака.
Возвращаемое _rotl возвращает value сдвинутое циклически на значение count разрядов.
Переносимость _rotl уникальна для DOS.
Смотрите также
Пример:
#include
#include
int main(void) { unsigned value,result; value = 32767; result = _rotl(value,1); printf("Значение %u сдвинутое на один разряд влево = %u", value,result); return 0; }
_Setcurs
_setcursortype
Функция Определяет вид курсора.
Синтаксис #include
void _setcursortype(int cur_t);
Файл, содержащий conio.h прототип
Описание Устанавливает вид курсора, в зависимости от зна- чений:
_NOCURSOR - выключает курсор _SOLIDCURSOR - курсор в виде блока _NORMALCURSOR - обычный курсор в виде подчерки- вания
Возвращаемое Нет. значение
Переносимость Данная функция работает только на компьютерах сов- местимых с IBM PC.
Пример:
#include
int main(void) { /* вывести обычный курсор */ cprintf("\r\nНормальный курсор:"); getch(); /* выключить курсор */ setcursortype(_NOCURSOR); cprintf("\r\nНет курсора:"); getch(); /* курсор в виде блока */ setcursortype(_SOLIDCURSOR); cprintf("\r\nКурсор в виде блока:"); getch(); /* вернуть обычный курсор */ cprintf("\r\nНормальный курсор:"); getch(); return 0; }
_status87
Функция Получает слово состояния операций с плавающей точкой.
Синтаксис #include
unsigned int _status87();
Файл, содержащий float.h прототип
Описание Функция _status87 получает слово состояния опера- ций с плавающей точкой, которое представляет со- бой комбинацию слова состояния математического сопроцессора 8087/80287 и прочих условий, выявля- емых подпрограммами обработки исключительных си- туаций сопроцессора 8087/80287.
Возвращаемое Возвращаемое значение состоит из битов, отражающих значение состояние операций с плавающей точкой. Определение данных битов вы найдете в float.h.
Переносимость _status87 уникальна для DOS.
Смотрите также 7, 7,
Пример:
#include
#include
int main(void) { float x; double y=1.5e-100; printf("Состояние 8087 перед ошибкой: %X\n",_status87()); x = y; /* создание состояния ошибки */ printf("Состояние 8087 после ошибки: %X\n",_status87()); return 0; }
_Stklen
_stklen
Функция Содержит размер стека.
Синтаксис extern unsigned _stklen;
Объявлено в dos.h
Описание _stklen содержит размер стека для всех шести моде- лей памяти. Минимально допустимый размер стека равен 128 словам; если вы указываете меньшее зна- чение, то _stklen автоматически расширяется до минимума. Размер стека по умолчанию равен 4К.
В моделях small и medium размер сегмента данных вычисляется следующим образом:
data segment [small,medium] = global data + heap + stack
где размер heap может быть получен через _heaplen.
В модели tiny все (включая код) находится в одном сегменте, поэтому в сегмент данных включается код и 256 байт для PSP.
data segment [tiny] = 256 + code + global data + heap + stack
В моделях compact и large не существует локально- го heap, поэтому сегмент данных равен:
data segment [compact,large] = global data + stack
В модели huge стек является отдельным сегментом, а каждый модуль имеет собственный сегмент данных.
Смотрите также
Пример:
#include
/* Установить больший размер стека, чем используется по умолчанию */ /* Это обьявление должно находится в глобальной области определения */
extern unsigned _stklen = 54321U;
int main(void) { /* показать текущий размер стека */ printf("Размер стека: %u\n",_stklen); return 0; }
_Strerro
_strerror
Функция Определяет сообщение об ошибке.
Синтаксис #include
char *strerror(const char *s);
Файл, содержащий string.h, stdio прототип
Описание _strerror позволяет вам сгенерировать определен- ное сообщение об ошибке. Она возвращает указатель на оканчивающуюся нулем строку, содержащую сооб- щение об ошибке.
- Если s равно NULL, то функция возвращает указа- тель на строку, содержащую последнее, сгенери- рованное сообщение об ошибке.
- Если s не равно нулю, то возвращаемая строка содержит определенное вами сообщение, двоето- чие, пробел, последнее сгенерированное системой сообщение об ошибке и символ перехода на следу- ющую строку. s не может быть длинее 94 симво- лов.
_strerror аналогична strerror Turbo C версии 1.0.
Возвращаемое _strerror возвращает указатель на созданную стро- значение ку сообщения об ошибке. Строка сообщения об ошиб- ке создается в статическом буфере, содержимое которого перезаписывается при каждом вызове _strerror.
Переносимость _strerror уникальна для DOS.
Смотрите также
Пример:
#include
int main(void) { FILE *fp; /* открыть файл для записи */ fp = fopen("TEST.$$$","w"); /* вызвать состояние ошибки */ if(ferror(fp)) /* вывести сообщение об ошибке */ printf("%s",_strerror("Custom"); fclose(fp); return 0; }
_Tolower
_tolower
Функция Преобразует символы в символы в нижнем регистре.
Синтаксис #include
int _tolower(int ch);
Файл, содержащий ctype.h прототип
Описание _tolower - это макрокоманда, производящая те же преобразования, что и функция tolower, за исключением того, что должно быть точно известно, что ch - символ верхнего регистра (A-Z).
Для использования tolower необходимо включать ctype.h.
Возвращаемое _tolower возвращает преобразованное значение значение ch, если она в верхнем регистре, иначе результат не определен.
Переносимость _tolower поддерживается на системах UNIX.
Пример:
#include
#include
#include
int main(void) { int length,i; char *string = "THIS IS A STRING."; /* Перед передачей символа _tolower мы должны убедиться, что этот символ в верхнем регистре. */ length = strlen(string); for(i=0;i
_Toupper
_toupper
Функция _toupper транслирует символы в верхний регистр.
Синтаксис #include
int _toupper(int ch);
Файл, содержащий ctype.h прототип
Описание _toupper - макрокоманда, выполняющая то же самое преобразование, что и функция toupper, за исклю- чением того, что ее можно применять только в том случае, если ch - символ нижнего регистра.
Для использования _toupper вам следует подключить файл ctype.h.
Возвращаемое _toupper возвращает преобразованное значение значение ch, если она в нижнем регистре, иначе результат не определен.
Переносимость _touperr поддерживается на системах UNIX.
Пример:
#include
#include
#include
int main(void) { int length,i; char *string = "this is a string."; /* Перед передачей символа _toupper мы должны убедиться, что этот символ в нижнем регистре. */ length = strlen(string); for(i=0;i
_Version
_version
Функция Содержит номер версии DOS.
Синтаксис extern unsigned int _version;
Объявлено в dos.h
Описание _version содержит номер версии DOS. В младшем байте хранится номер версии, в старшем байте - расшире- ние номера версии. (Для версии DOS x.y, x являет- ся номером версии, y - расширением номера вер- сии).
_Write
_write
Функция Записывает данные в файл.
Синтаксис #include
int _write(int handle, void *buf, unsigned len);
Файл, содержащий io.h прототип
Описание Данная функция делает попытку записи len байт из буфера, адресуемого параметром buf, в файл, соответствующий номеру handle.
Максимальное число байтов, которое _write может записать 65534, т.к. 65535(0xFFFF) тоже самое, что и -1, что является возвращаемым кодом ошибки для _write.
_write не преобразует символ перевода строки (LF), в пару CR/LF, поскольку все файлы рассмат- ривает как двоичные.
Если число действительно записанных байтов мень- ше, чем задано, то должна быть выдана ошибка и возможно это говорит, что на диске нет места.
Для дисков и дисковых файлов, запись всегда осу- ществляется с текущего файлового указателя. Для устройств, байты посылаются непосредственно на устройства.
Для файлов открытых опцией O_APPEND, файловый указатель не устанавливается на EOF функцией _write, прежде чем будет осуществлена запись дан- ных.
Возвращаемое _write возвращает число записанных байтов.В случае значение ошибки _write возвращает -1, и устанавливает гло- бальную переменную errno в:
EACCED - Permission denied; EBADR - Bad file number.
Переносимость _write уникальна для DOS.
Смотрите также Пример:
#include
#include
#include
#include
#include
#include
int main(void) { void *buf; int handle, bytes; buf = malloc(200); /* Создать в текущей директории файл TEST.$$$ и записать в него 200 байт. Если такой файл уже существует, то он будет перезаписан */ if((handle = open("TEST.$$$",O_CREAT|O_WRONLY|O_BINARY, S_IWRITE|S_IREAD)) == -1) { printf("Ошибка при открытии файла\n"); exit(1); } if((butes = _write(handle, buf, 200)) == -1) { printf("Ошибка при записи.\n"); exit(1); } printf("Записано %d байт",bytes); close(handle); /* прим. пер. в оригинале close отсутсвует */ return 0; }
_Wscroll
_wscroll
Функция Разрешает или запрещает скроллинг в функциях ввода/ вывода на консоль.
Синтаксис _extern int _wscroll
Объявлено в conio.h
Описание _wscroll это флаг прокрутки функций ввода/вывода на консоль. По умолчанию он равен 1. Установка флага в 0 запретит прокрутку. Это удобно при вы- воде у краев экрана, когда прокрутка не нужна.