Ecvt
ecvt
Функция Преобразует число с плавающей точкой в строку символов.
Синтаксис #include
char * ecvt(double value, int ndig, int *dec, int * sign);
Файл, содержащий stdlib.h прототип
Описание Функция ecvt конвертирует значение value в строку с нулевым окончанием из ndig цифр и возвращает ад- ресный указатель строки. Позиция десятичной точки относительно начала строки косвенным образом хра- нится в параметре decpt (отрицательное значение decpt означает левый отсчет полученных цифр). В самой строке десятичной точки нет.Если знак ре- зультата отрицательный, слово, на которое указыва- ет адресный указатель sign, не равно 0, иначе оно равно 0. Младшие разряды округляются.
Возвращаемое Функция ecvt возвращает адресный указатель на значение статическую строку, чье содержимое перезаписывает- ся при каждом вызове функций.
Переносимость Функция поддерживается на системах UNIX. Она не определена в стадарте ANSI C, и поэтому мы не ре- комендуем использовать ее при написании переноси- мых программ.
Смотрите также
Пример:
#include
#include
int main(void) { char *string; double value; int dec, sign; int ndig = 10;
value = 9.876; string = ecvt(value,ndig,&dec,&sign); printf("Строка = %s dec = %d sign = %d\n",string,dec,sign); value = -123.45; ndig = 15; string = ecvt(value,ndig,&dec,&sign); printf("Строка = %s dec = %d sign = %d\n",string,dec,sign); value = 0.6789e5; ndig = 5; string = ecvt(value,ndig,&dec,&sign); printf("Строка = %s dec = %d sign = %d\n",string,dec,sign); return 0; }
Egread
egread
Функция Считывает значения сегментных регистров.
Синтаксис #include
void segread(struct SREGS *segp);
Файл, содержащий dos.h прототип
Описание Функция segread помещает текущие значения сег- ментных регистров в структуру, адресуемую пара- метром segp.
Данный вызов предлагается использовать совместно с функциями intdosx и int86x.
Возвращаемое Нет. значение
Переносимость Функция уникальна для процессоров семейства 8086.
Смотрите также 6,6
Пример:
#include
#include
int main(void) { struct SREGS segs; segread(&segs); printf("Содержимое сегментных регистров: \n"); printf("CS: %X DS: %X\n",segs.cs, segs.ds); printf("ES: %X SS: %X\n",segs.es, segs.ss); return 0; }
Ellipse
ellipse
Функция Рисует эллиптические дуги.
Синтаксис #include
void far ellipse (int x,int y,int stangle, int endangle,int xradius int yradius);
Файл, содержащий graphics.h прототип
Описание ellpise рисует эллиптическую дугу с центром в точке с координатами (x,y), горизонтальной и вертикальной осями радиусом xradius и yradius со- ответственно,текущим цветом. Дуга рисуется от угла stangle до угла endangle.Если stangle равен 0 и endangle равен 360,функция arc нарисует полный эл- липс.
Угол для arc отсчитывается против часовой стрелки, где 0 градусов соответствует 3 часам на цифербла- та, 90 градусов - 12 часам и т.д.
Замечание. Параметр linestyle не оказывает воздей- ствие при построении дуг, окружностей, элипсов и секторов.Используется только параметр thickness.
Возвращаемое Нет. значение
Переносимость Функция уникальна для Turbo C++. ellipse работает только на компьютерах IBM PC и совместимых с ними, оснащенных дисплейными адаптерами, поддерживающими графический режим.
Смотрите также
Пример:
#include
#include
#include
#include
int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy; int stangle = 0,endangle = 360; int xradius = 100,yradius = 50;
/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");
/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx() / 2; midy = getmaxy() / 2; setcolor(getmaxcolor(1));
/* рисует эллипс */ ellipse(midx,midy,stangle,endangle,xradius,yradius);
/* очистка */ getch(); closegraph(); return 0; }
Enable
enable
Функция Разрешает прерывания.
Синтаксис #incdude
void enable(void);
Файл, содержащий dos.h прототип
Описание enable предназначена для гибкого управления прерыва- ниями.
enable - макрокоманда разрешает прерывания.
Возвращаемое Нет. значение
Переносимость enable уникальна для систем 80х86.
Смотрите также
Пример:
#include
void interrupt (*oldhandler)(void);
int count=0;
void interrupt handler(void) { /* запрет других прерываний во время обработки этого */ disable(); /* увеличение глобального счетчика */ count++; /* разрешение прерываний после обрабртки */ enable(); /* вызов старой программы обработки */ } int main(void) { /* сохранить старый вектор */ oldhandler = getvect(0x1c); /* записать новый вектор */ setvect(0x1c,handler); /* цикл, пока счетчик не достигнет 20 */ while(count < 20); /* восстановить старый вектор */ setvect(0x1c,oldhandler); return 0; }
Environ
environ
Функция Доступ к переменным окружения DOS.
Синтаксис extern char * environ[];
Объявлено в dos.h
Описание environ является массивом указателей на символьные строки; используется для доступа и из- менения переменных окружения DOS. Каждая строка массива имеет следующую форму: envvar = varvalue где envvar - это имя переменной окружения (такой как PATH), а varvalue - это строковое значение, которое присваивается переменной envvar (такое как C:\BIN;C:\DOS). Строка varvalue может быть пустой. Когда программа начинает выполняться, атрибуты операционной среды MS-DOS передаются непосредст- венно в программу. Заметим, что envp, третий ар- гумент функции main, равен первоначальному значе- нию переменной environ. Массив environ может использоваться функцией getenv; однако функция putenv является единствен- ной функцией, которая может изменять, удалять и добавлять содержимое массива environ. Хотя и су- ществует возможность изменять размеры и переме- щать массив окружения процесса, переменная environ автоматически регулируется таким образом, что она всегда указывает на массив.
Eof
eof
Функция Определяет, достигнут ли конец файла.
Синтаксис #include
int eof(int handle);
Файл, содержащий io.h прототип
Описание Функция eof определяет, достигнут ли конец фай- ла, связанного с дескриптором handle.
Возвращаемое Если текущая позиция является концом файла, функ- значение ция eof возвращает значение 1; в противном случае значение 0. При возникновении ошибки возвращается значение -1, и глобальная переменная errno получа- ет значение:
EBADF - Неверный номер файла.
Переносимость eof уникальна для DOS.
Смотрите также
Пример:
#include
#include
#include
#include
int main(void) { FILE *temp_file; int handle; char msg[] = "Тестовый пример"; char ch; /* создать уникальный временный файл */ if((temp_file=tmpfile()) == NULL) { perror("Открытие файла:"); exit(1); } /* получить дескриптор данного файла */ handle = fileno(temp_file); /* записать в файл данные */ write(handle,msg,strlen(msg)); /* переместить указатель в начало файла */ lseek(handle,0l,SEEK_SET); /* считывать данные до появления конца файла */ do { read(handle,&ch,1); printf("%c",ch); } while(!eof(handle); /* закрыть временный файл */ fclose(temp_file); return 0; }
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; }
Execl
execl, execle,execlp, execv,execve, execvp,execvpe
Функция Функции, загружающие и запускающие другие программы.
Синтаксис int execl(char * pathname, char * arg0, arg1, ..., argn, NULL); int execle(char * pathname, char * arg0, arg1, ..., argn, NULL, char ** envp); int execlp(char * pathname, char * arg0, arg1, ..., argn, NULL); int execlpe(char * pathname, char * arg0, arg1, ..., argn, NULL, char ** envp); int execv(char * pathname, char * argv[]); int execve(char * pathname, char * argv[], char ** envp); int execvp(char * pathname, char * argv[]); int execvpe(char * pathname, char * argv[], char ** envp);
Файл, содержащий process.h прототип
Описание Семейство функций exec... загружает и запускает другие программы, известные как "дочерние" процес- сы. Если вызов функции exec... завершается успеш- но, "дочерний" процесс накладывается на "родитель- ский" процесс; причем должно быть достаточно памя- ти для загрузки и выполнения "дочернего" процесса.
pathname - это имя файла вызываемого "дочернего" процесса. Функции exec... производят поиск pathname, пользуясь стандартным алгоритмом системы DOS:
- нет расширения имени файла и нет точки; в таком случае производится поиск точного имени файла, ес- ли такое имя не найдено, добавляется расширение .com и поиск продолжается. Если и такого файла не найдено, то добавляется расширение .exe и поиск продолжается;
- расширение имени присутствует - производится по- иск по точному имени файла;
- присутствует точка - производится поиск только имени файла без расширения.
Суффиксы l, v, p и e, добавляемые к имени семейст- ва exec... обозначают, что данная функция будет работать с некоторыми особенностями:
p- определяет, что функция будет искать "дочернюю" программу в директориях, определяемых переменной среды DOS PATH. Без суффикса p поиск будет произ- водиться только в рабочем каталоге. Если параметр path не содержит маршрута, то поиск производится в текущей директории, а затем по маршрутaм, опреде- ляемым переменной окружения PATH;
l- показывает, что адресные указатели (arg0, arg1, ..., argn) передаются, как отдельные аргументы. Обычно суффикс l употребляется, когда число пере- даваемых аргументов заранее вам известно;
v- показывает, что адресные указатели (arg[0], arg[1],...arg[n]) передаются, как массив указате- лей. Обычно, суффикс v используется, когда пере- даeтся переменное число аргументов;
e- показывает, что "дочернему" процессу может быть передан аргумент envp, который позволяет выбирать среду "дочернего" процесса. Без суффикса e "дочер- ний" процесс унаследует среду "родительского" про- цесса.
Каждая функция семейства exec... должна иметь один из двух суффиксов, специфицирующих аргументы (либо l, либо v). Суффиксы определения маршрута доступа (PATH) и унаследования операционной среды (p и l) являются необязательными.
Например:
-execl - представляет собой функцию семейства exec..., которая передает раздельные аргументы, ищет "дочерний" процесс только в рабочем каталоге и передает "родительскую" среду "дочернему" про- цессу.
-execvpe представляет собой функцию семейства exec..., которая передает массив указателей аргу- ментов, подсоединяет маршрут доступа PATH для по- иска "дочернего" процесса и применяет аргумент envp для выбора среды "дочернего" процесса.
Функция семейства exec... должна передавать "до- чернему" процессу хотя бы один аргумент (arg0 или argv[0]). Данный аргумент, по соглашению, предс- тавляет собой копию pathname. (Использование дру- гих значений для нулевого аргумента не будет ошиб- кой).
В системах DOS версий 3.X "дочерний" процесс может получить аргумент pathname; в более ранних версиях "дочерний" процесс не может использовать значение нулевого аргумента (arg0 или argn[0]).
При использовании суффикса l, арг0 обычно указыва- ет на pathname, а arg1, ..., argn указывают на строки символов, которые формируют новый список аргументов. Завершающий NULL, следующий за argn, обозначает конец списка. При использовании суффик- са e список назначенной среды передается с помощью аргумента envp. Данный аргумент является массивом из элементов типа char*. Каждый элемент указывает на символьную строку с нулевым окончанием формы:
envvar = value , где
envvar- имя переменной среды, а value- значение символьной строки, которая присваивается каждой переменной envvar. Последним элементом в массиве envp[] является адресный нуль NULL. Когда значени- ем envp[0] является NULL, "дочерний" процесс на- следует назначения среды "родительского" процесса.
Общая длина arg0+ arg1+...+argn (или arg[0]+ arg[1]+...+arg[n]), включая пробелы, разделяющие аргументы, должна быть меньше 128 байтов. Нулевые окончания не считаются. При вызове функции exec... любые открытые файлы остаются открытыми и в "до- чернем" процессе.
Возвращаемое При успешном завершении функции exec... не возвра- значение щают никакого значения. При возникновении ошибки функции exec... возвращают значение -1, а глобаль- ная переменная errno получает одно из следующих значений:
E2BIG - Слишком длинный список аргументов; EACCES - Отказ доступа; EMFILE - Слишком много открытых файлов; ENOENT - Маршрут доступа (PATH) или имя файла не найдены; ENOEXEC - Ошибка формата EXEC; ENOMEM - Не хватает памяти.
Переносимость exec... уникальна для DOS.
Смотрите также: ..,
Пример:
/* CHILD.C Программа для всех примеров */
#include
#include
main(int argc, char * argv[]) { int i; printf("Запущен дочерний процесс ...\n"); printf("%s\n",getenv("PATH")); for (i=0; i
#include
#include
#include
int main(int argc,char *argv[]) { int loop; printf("%s работает...\n\n",argv[0]); if(argc == 1) /* есть ли еще аргументы */ { printf("%s запускает сама себя опять...\n",argv[0]); execl(argv[0],argv[0],"ONE","TWO","THREE",NULL); perror("EXEC:"); exit(1); } printf("%s вызвана с аргументами:\n",argv[0]); for(loop = 1;loop
#include
#include
#include
#include
int main(int argc,char *argv[]) { int loop; char *new_env[] = {"TELYING",NULL};
printf("%s работает...\n\n",argv[0]); if(argc == 1) /* есть ли еще аргументы */ { printf("%s запускает сама себя опять...\n",argv[0]); execle(argv[0],argv[0],"ONE","TWO","THREE",NULL,new_env); perror("EXEC:"); exit(1); } printf("%s вызвана с аргументами:\n",argv[0]); for(loop = 1;loop
#include
#include
#include
int main(int argc,char *argv[]) { int loop; printf("%s работает...\n\n",argv[0]); if(argc == 1) /* есть ли еще аргументы */ { printf("%s запускает сама себя опять...\n",argv[0]); execlp(argv[0],argv[0],"ONE","TWO","THREE",NULL); perror("EXEC:"); exit(1); } printf("%s вызвана с аргументами:\n",argv[0]); for(loop = 1;loop
#include
#include
#include
#include
#include
void main(int argc,char *argv[],char **envp) { printf("Запуск CHILD с arg1, arg2 ...\n"); execlpe("CHILD.EXE","CHILD.EXE","arg1","arg2",NULL,envp); perror("Ошибка EXEC"); exit(1); }
#include
#include
#include
#include
#include
#include
void main(int argc,char **argv) { printf("Запуск CHILD с arg1, arg2 ...\n"); execv("CHILD.EXE",argv); perror("Ошибка EXEC"); exit(1); }
#include
#include
#include
#include
#include
#include
void main(int argc,char **argv,char **envp) { printf("Запуск CHILD с arg1, arg2 ...\n"); execve("CHILD.EXE",argv,envp); perror("Ошибка EXEC"); exit(1); }
#include
#include
#include
#include
#include
#include
void main(int argc,char **argv) { printf("Запуск CHILD с arg1, arg2 ...\n"); execvp("CHILD.EXE",argv); perror("Ошибка EXEC"); exit(1); }
#include
#include
#include
#include
#include
#include
int main(int argc,char **argv,char **envp) { printf("Запуск CHILD с arg1, arg2 ...\n"); execvpe("CHILD.EXE",argv,envp); perror("Ошибка EXEC"); exit(1); }
Exit
exit
Функция Прекращает выполнение программы.
Синтаксис #include
void exit(int status);
Файл, содержащий process.h, stdlib.h прототип
Описание Функция exit прекращает вызываемый процесс. Перед выходом из процесса все файлы закрываются, записы- вается буферный вывод (ждущий вывода) и вызываются зарегистрированные "функции выхода" (объявленные в функции atexit).
В любом случае, для вызываемого процесса обеспечи- вается аргумент status, который представляет собой статус выхода для данного процесса. Обычно, значе- ние, равное нулю, используется для обозначения нормального выхода из процесса,а ненулевое значе- ние обозначает какие-либо ошибки. Оно устанавлива- ется одним из следующих:
EXIT_SUCCESS - Нормальное завершение EXIT_FAILURE - Ненормальное завершение. Сообщает операционной системе, что программа завершилась с ошибкой.
Возвращаемое Нет. значение
Переносимость Функция exit совместима с системой UNIX и опреде- лена в стандарте ANSI C.
Смотрите также Функции .., .., и
Пример:
#include
#include
#include
int main(void) { int status; printf("Нажмите клавишу 1 или 2\n"); status = getch(); exit(status-'0'); return 0; /* эта точка не достигается */ }
Exp
exp
Функция Функция экспоненты; возвращает значение е в сте- пени x.
Синтаксис Вещественная версия Комплексная версия #include #include
double exp(double x); complex exp(complex x);
Файл, содержащий Вещественная версия Комплексная версия прототип math.h complex.h
Описание Функция exp вычисляет функцию экспоненты e^x;
Экспонента комплексного числа определена следующим образом:
exp(x+yi) = exp(x)(cos(y)+i sin(y))
Возвращаемое exp возвращает e^x. значение
Иногда аргументы функции exp выдают результат, вы- зывающий переполнение или невычисляемый. Когда верное значение вызывает переполнение, функция exp возвращает значение HUGE_VAL. При чрезмерно боль- шом результате глобальной переменной errno присва- ивается значение:
ERANGE - результат превышает допустимые пределы.
При малом результате возвращается 0.0 и errno не изменяется.
Обработку ошибок для exp можно изменить с помощью matherr.
Переносимость Функции поддерживаются на системах UNIX и стан- дартом ANSI C.
Смотрите также Функции 0, 0,
Пример:
#include
#include
int main(void) { double result; double x = 4.0; result = exp(x); printf("'e' в степени %1f (e^%1f) = %1f\n",x,x,result); return 0; }