Описание функций Си

         

если при загрузке обнаруживается сопроцессор



     _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 запретит прокрутку. Это удобно при вы- воде у краев экрана, когда прокрутка не нужна.