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

         

Sbrk



     sbrk

Функция Изменяет размещение сегмента данных в памяти.

Синтаксис #include

char *sbrk(int incr);

Файл, содержащий alloc.h прототип

Описание Функция sbrk добавляет к завершающему значению incr байт, и соответственно выделяет память. incr может быть и отрицательным, в этом случае объем выделенной памяти уменьшается.

В случае если для выделения памяти недостаточно свободного места, sbrk завершается по ошибке и не производит никаких действий.

Возвращаемое При успешном завершении sbrk возвращает старое значение значение. При ошибке, sbrk возвращает -1 и гло- бальной переменной errno присваивает значение:

ENOMEM - Недостаточно памяти.

Переносимость sbrk доступна в системах UNIX.

Смотрите также

Пример:

#include

#include

int main(void) { printf("Изменение выделенного объема памяти с помощью sbrk\n"); printf("Перед вызовом sbrk свободны %lu байт.\n", (unsigned long)coreleft()); sbrk(1000); printf("После вызова sbrk свободны %lu байт.\n", (unsigned long)coreleft()); return 0; }



Scanf



     scanf

Функция Выполняет форматированный ввод из потока stdin.



Синтаксис #include

int scanf(const char *format [,adress, ...]);

Файл, содержащий stdio.h прототип

Описание Функция scanf просматривают входные поля, символ за символом, считывая их из потока stdin. Затем каждое поле форматируется в соответствии со спе- цификацией формата, передаваемой scanf аргументом format. После этого она записывает отформатиро- ванный ввод по адресам, задаваемым аргументами, следующими за форматной строкой. Число специфика- ций формата должно соответствовать числу адресов.

Строка формата.

Строка формата, присутствующая в каждом вызове функций семейства ...scanf, управляет тем, каким образом каждая функция будет считывать, преобра- зовывать и записывать входные поля. Для заданных спецификаций формата должно быть достаточное ко- личество адресных аргументов; если это не соблю- дается, результат может быть непредсказуемым и, вероятно ошибочным. Лишние адресные аргументы (больше, чем требует формат) будут игнорированы.

Примечание. scanf часто приводит к непредсказуе- мым результаттам, когда вы отклоняетесь от точно- го шаблона. Вам необходимо помнить, что нужно указать scanf, каким образом синхронизировать ко- нец строки. В результате предпочтительнее на наш взгляд комбинация gets или fgets, за которыми следует sscanf.

Строка фомата - это символьная строка, содержащая три типа объектов: незначащие символы, значащие символы и спецификации формата.

Незначащие символы - это пусто ( ), знак табуля- ции (\t) и символ перехода на новую строку (\n). Как только функция семейства ...scanf встречает незначащий символ в строке формата, она считыва- ет, но не сохраняет все последующие незначащие символы до тех пор, пока не встретится первый значащий символ.

Значащие символы - это все символы ASCII, за иск- лючением знака процента (%). Если функция семейс- тва ...scanf встречает в форматной строке значаю- щий символ, она считывает, но не сохраняет данный символ.


Спецификация формата управляет процессом чтения и преобразования из входных полей в значения специ- альных типов и записывает их по адресам, постав- ляемых адресными аргументами.

Хвостовые незначащие символы остаются несчитанны- ми (включая символ перехода на новую строку), ес- ли они не встретились явно в строке формата.

Спецификации формата.

Спецификации формата функций ... scanf имеют сле- дующую форму:

%[*] [ширина] [F/N] [h/l/L] символ типа

Спецификация формата начинается со знака %. После этого знака следует спецификации в определенном порядке:

- необязательный символ подавления назначения [*]; - необязательный спецификатор ширины [width]; - необязательный модификатор размера указателя [F/N]; - необязательный модификатор типа аргумента [h/l/L]; - символ типа.

Необязательные компоненты форматной строки.

Далее перечислены основные принципы форматирова- ния и спецификаторы форматной строки:

-----------------T--------------------------------------------------- Символ или ¦ Каким образом он управляет форматом. спецификатор ¦ -----------------¦--------------------------------------------------- * ¦ подавляет назначение следующего входного поля; width ¦ максимальное число считываемых символов; если ¦ функция ...scanf встречает незначащий или непреоб- ¦ разуемый символ, могут быть прочитаны дополнитель- ¦ ные символы; size ¦ отвергает заданный по умолчанию размер адресного ¦ аргумента ¦ (N - ближний указатель, ¦ F - дальний указатель) тип ¦ отвергает заданный по умолчанию адресный аргумент аргумента ¦ (h - короткое целое, ¦ l - длинное целое, если символ типа указывает ¦ целочисленное преобразование ¦ l - двойной точности, если символ типа указывает ¦ на преобразование чисел с плавающей точкой ¦ L - длинное, двойной точности (допустимо только ¦ при преобразовании чисел с плавающей точкой -----------------+---------------------------------------------------

Символы типов для функций ...scanf.

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



Информация в данной таблице подразумевает, что никакие спецификаторы или модификаторы не были включены в спецификацию формата. Чтобы увидеть, как включение в формат некоторых спецификаторов или модификаторов влияет на вводимые данные, смотрите таблицу, следующую за данной:

-------T----------------T-------------------------------------------- Символ ¦ Ожидаемый ввод ¦ Тип аргумента типа ¦ ¦ -------+----------------+-------------------------------------------- Числовые данные. -------T----------------T-------------------------------------------- d ¦ десятичное ¦ указатель на целое (int *arg) ¦ целое ¦ D ¦ десятичное ¦ указатель на длинное целое (long *arg) ¦ целое ¦ o ¦ восьмеричное ¦ указатель на целое (int *arg) ¦ целое ¦ O ¦ восьмеричное ¦ указатель на длинное целое (long *arg) ¦ целое ¦ i ¦ десятичное, ¦ указатель на длинное целое (long *arg) ¦ восьмеричное ¦ ¦ или шестнадца- ¦ ¦ теричное целое ¦ u ¦ десятичное ¦ указатель на целое без знака (unsigned ¦ целое без знака¦ int *arg) U ¦ десятичное ¦ указатель на длинное целое без знака ¦ целое без знака¦ (unsigned long *arg) x ¦ шестнадцатерич-¦ указатель на целое (int *arg) ¦ ное целое ¦ X ¦ шестнадцатерич-¦ указатель на длиное целое (long *arg) ¦ ное целое ¦ e ¦ число с плаваю-¦ указатель на число с плавающей точкой ¦ щей точкой ¦ (float *arg) E ¦ число с плаваю-¦ указатель на число с плавающей точкой ¦ щей точкой ¦ (float *arg) f ¦ число с плаваю-¦ указатель на число с плавающей точкой ¦ щей точкой ¦ (float *arg) g ¦ число с плаваю-¦ указатель на число с плавающей точкой ¦ щей точкой ¦ (float *arg) G ¦ число с плаваю-¦ указатель на число с плавающей точкой ¦ щей точкой ¦ (float *arg) -------+----------------+-------------------------------------------- Символьные данные. -------T----------------T-------------------------------------------- s ¦ строка символов¦ указатель на массив символов (char arg[ ]) c ¦ символ ¦ указатель на символ (char *arg); если шири- ¦ ¦ на поля w задается вместе с символом типа c ¦ ¦ (как напр. %5c): указатель на массив из w ¦ ¦ символов (char arg[w]); % ¦ символ % ¦ Никакого преобразования не происходит; сим- ¦ ¦ вол % сохраняется. -------+----------------+-------------------------------------------- Указатели. -------T----------------T-------------------------------------------- n ¦ (отсутствует) ¦ указатель на целое (int *arg) ¦ ¦ данный указатель хранит количество считан- ¦ ¦ ных символов до %n. p ¦ шестнадцатерич-¦ указатель на данный объект (дальний * или ¦ ное число в ¦ ближний *). ¦ форме: ¦ Преобразования %p предусматривают стандарт- ¦ YYYY:ZZZZ ¦ ный размер указателя, принятый в данной мо- ¦ или ZZZZ ¦ дели памяти. -------+----------------+--------------------------------------------



Входные поля.

Входным полем может быть одно из следующих выра- жений:

- все символы до (но не включая) следующего по порядку незначающего символа;

- все символы до первого встретившегося, который не может быть преобразован текущей спецификаци- ей формата (такие, например, как цифры 8 и 9 при восьмеричном формате).

- до n символов, где n - это заданная ширина по- ля.

Соглашения.

Далее перечислены некоторые соглашения, принятые для определенных спецификаций формата.

преобразование %c

Данная спецификация позволяет считывать 1, следу- ющий по порядку символ, включая и незначащие. Чтобы пропустить один незначащий и прочесть сле- дующий значащий символ, используйте %1s.

Преобразование %Wc (W - спецификация ширины).

Адресный аргумент является указателем на массив символов; массив состоит из W элементов (char arg[W]).

Преобразование %s

Адресный аргумент является указателем на массив символов (char arg[]).

Размер массива должен быть по крайней мере (n+1) байтов, где n = длина строки s (в символах). Входное поле оканчивается пробелом или символом перехода на новую строку. К символьной строке ав- томатически добавляется нулевое окончание и запи- сывается, как последний элемент массива.

Преобразование %[search set]

Набор символов, заключенный в квадратные скобки, может быть заменен на символ типа s. Адресный ар- гумент является указателем на массив символов (char arg[]). В квадратные скобки заключен набор символов, который определяет "искомый набор" воз- можных символов, формирующих строку (входное по- ле).

Если первый символ в скобках - это символ (^), искомый набор инвертируется таким образом, чтобы содержать все символы ASCII кроме тех, что пере- числены между квадратными скобками. (Обычно, сим- вол будет включен в инвертированный искомый на- бор, если он не указан явно в списке символов после первого знака).

Входное поле представляет собой строку символов, не ограниченную незначащими символами. Функции семейства ...scanf будут считывать входное поле до тех пор, пока не появится первый символ, от- сутствующий в искомом наборе (или в инвертирован- ном искомом наборе). Далее приведены два примера данного типа преобразования:



%[abcd] будет производиться поиск во входном поле любых из символов a, b, c, d.

%[^abcd] будет производиться поиск во входном поле любых символов, кроме a, b, c, d.

Здесь вы можете также указать диапазон (чисел или символов). Это короткая запись. К примеру для по- иска десятичной цифры во входном потоке можно указать: %[0123456789] или тоже самое, но короче: %[0-9] Для поиска символов вы можете использовать следу- ющие сокращения:

%[A-Z] Все символы верхнего регистра %[0-9A-Za-z] Все десятичные цифры и все сим- волы (и верхнего и нижнего ре- гистра). %[A-FT-Z] Все символы верзхнего регистра с A по F и c T по Z

В такой сокращенной записи необходимо придержи- ваться следующих правил:

- Символ предшествующий тире (-) должен быть лек- сически меньше символа, находящегося правее ти- ре;

- Символ тире не должен быть ни первым, ни пос- ледним в наборе символов. Если он первый или последний, то он рассматривается просто как символ, а не как указатель диапазона.

- Символы являющиеся краями диапазона (т.е. слева и справо от тире) не должны входить в другой диапазон.

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

%[-+*/] Четыре арифметических операции %[z-a] Символы z, - и a. %[+0-9-A-Z] Символы + и - и диапазон от 0 до 9 и от A до Z %[+0-9A-Z-] Также символы + и - и диапазон от 0 до 9 и от A до Z %[^-0-9+A-Z] Все символы, исключая + и - и символы в диапазоне от 0 до 9 и от A до Z

преобразования %e, %E, %f, %g, %G (с плавающей точкой.

Числа с плавающей точкой во входном поле должны соответствовать следующему формату:

[+/-]ddddddddd [.]dddd [E|e] [+/-]ddd,

где заключение знаков в квадратные скобки означа- ет их необязательность, а ddd- представляет деся- тичные, восьмеричные и шестнадцатеричные цифры.

Кроме этого +INF, -INF, +NAN, -NAN распознаются как числа сплавающей точкойю При этом знак должен присутсвовоать обязательно (INF - бесконечность, NAN - не число). преобразования %d,%i,%o,%x,%D,%I,%O,%X,%c,%h.



В любом преобразовании, в котором разрешены ука- затели на символ, целое, длинное целое, могут быть использованы указатели на символ без знака, целое без знака, длинное целое без знака.

Символ подавления присвоения.

Символом подавления назначения является звездочка (*); Не путайте его символом адресации в языке СИ (также звездочка).

Если данный символ (*) следует за знаком % в спе- цификации формата, следующее входное поле будет считано, но не будет присвоено соответствующему адресному аргументу. Предполагается, что подавля- емое входное поле соответствует типу, объявленно- му вслед за символом *. Точное символьное соот- ветствие и подавление присвоения не связаны между собой непосредственно.

Спецификаторы ширины.

Спецификатор ширины (n), десятичное целое, конт- ролирует максимальное число символов, которое бу- дет прочитано из текущего входного поля.

Если входное поле содержит менее n символов, фун- кции семейства ...scanf прочтут все символы дан- ного поля, затем перейдут к следующему полю и со- ответствующей ему спецификации формата.

Если до того, как будет прочитано n символов, встретится незначащий символ или неконвертируемый символ, то все символы до данного будут считаны и преобразованы, затем функция перейдет к следующе- му полю и спецификации формата.

Неконвертируемым символом считается такой символ, который не может быть преобразован в соответствии с данной спецификацией формата (например, символы 8 или 9 при восмеричном формате, или символы J или K при шестнадцатеричном или десятичном форма- те). --------------T------------------------------------------------------ Спецификатор ¦ Как спецификатор ширины влияет на сохраняемый ширины ¦ ввод. --------------+------------------------------------------------------ n ¦ До n символов будет считано, преобразовано и запи- ¦ сано в текущий адресный аргумент. --------------+------------------------------------------------------

Модификаторы размера ввода и типа аргумента.

Модификаторы размера ввода (N и F) и типа аргу- мента (h,l и L) оказывают влияние на то, каким образом функции ...scanf интерпретируют соответс- твующие адресные аргументы arg.



Модификаторы F и N отвергают заданные стандартно или объявленные размеры аргумента arg.

Модификаторы h, l и L обозначают, какой тип пре- образования будет использоваться для следующих за ними входных данных (h- короткое целое, l- длин- ное целое, L - длинное двойной точности). Входные данные будут преобразованы в заданный тип, и ар- гумент arg для входных данных будет адресовать объект соответствующего размера ("короткий" объ- ект для %h и длинный или двойной точности объект для %l или %L). -------------T------------------------------------------------------- Модификатор ¦ Как он влияет на преобразование -------------+------------------------------------------------------- F ¦ Отвергает заданный по умолчанию или объявленный раз- ¦ мер; ¦ arg интерпретируется, как дальний указатель. N ¦ Отвергает заданный по умолчанию или объявленный раз- ¦ мер; ¦ arg интерпретируется, как ближний указатель. ¦ В сверхбольшой моделе не может использоваться ни с ¦ какими преобразованиями. h ¦ Для типов d,i,o,u,x: конвертирует ввод в короткое це- ¦ лое, записывает в "короткий" объект. ¦ Для типов D,I,O,C,X: не оказывает влияния. ¦ Для типов e,f,c,s,n,p: не оказывает влияния. l ¦ Для типов d,i,o,u,x: преобразует ввод в длинное целое, ¦ записывает в "длинный" объект. ¦ Для типов e,f: преобразует ввод в число двойной точ- ¦ ности, записывает в объект двойной точности. ¦ Для типов D,I,O,U,X: не оказывает влияния. ¦ Для типов c,s,n,p: не оказывает влияния. L ¦ Для типов e, f, g: преобразует введенные данные в ¦ длинное двойной точности, и сохраняет их в объекте с ¦ тем же типом. На остальные форматы влияния не оказы- ¦ вает. -------------+-------------------------------------------------------

Когда функции ...scanf прекращают считывание.

Функции семейства ...scanf могут прекратить счи- тывание определенного входного поля до достижения нормального конца данных (незначащий символ), или считывание может завершиться на середине данных (по различным причинам).

Функции ...scanf прекратят считывание, запишут текущее поле и перейдут к обработке следующего поля в следующих случаях:



-Символ подавления присвоения (*) появляется в спецификации формата после знака процента %; те- кущее поле считывается, но не запоминается.

-Считано width символов (width - спецификатор ши- рины, положительное десятичное целое).

-Следующий считанный символ не может быть конвер- тирован при действующем формате (например, сим- вол A, если формат-десятичный).

-Следующий считанный символ входного поля отсутс- твует в "поисковом" наборе (или, наоборот, при- сутствует в инвертированном "поисковом" наборе).

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

Функции семейства ...scanf заканчивают свою рабо- ту при следующих ситуациях:

-Следующий по порядку символ входного поля не со- ответствует относящемуся к нему значащему симво- лу в строке формата.

-Следующий символ во входном поле - EOF.

-Строка формата исчерпана.

Если в строке формата появляется последователь- ность символов, не являющаяся частью спецификации формата, она должна совпадать с текушей последо- вательностью символов входного поля; функции ...scanf считывают, но не сохраняют совпадающие символы. Когда встречается конфликтный символ, он остается во входном поле, как бы непрочитанным.

Возвращаемое Функция scanf возвращают количество успешно прочи- значение танных, преобразованных и запомненных входных по- лей; возвращаемое значение не включает в себя прочитанные поля, которые не были сохранены.

Если одна из данных функций делает попытку чтения в конце файла (EOF), возвращаемым значением будет EOF.

Если не было записано ни одного поля, возвращает- ся значение 0.

Переносимость scanf поддерживается на системах UNIX и определена в стандарте ANSI C. Определены у Кернигана и Рит- чи.

Смотрите также

#include

#include

int main(void) { char label[20]; char name[20]; int entries = 0; int loop,age; double salary; struct Entry_struct { char name[20]; int age; float salary; } entry[20]; /* ввести заглавие, как строку, длиной до 20 символов */ printf("Введите заглавие для диаграммы: "); scanf("%20s",label); fflash(stdin); /* сбросить входной поток, в случае ошибки */ /* ввести число элементов в виде целого */ printf("Сколько элементов (не > 20): "); scanf("%d",&entries); fflash(stdin); /* сбросить входной поток, в случае ошибки */ for(loop = 0; loop < entries; ++loop) { printf("Элемент %d\n",loop); /* ввести имя, только буквы в верхнем или нижнем регистре */ printf("Имя: "); scanf("%[A_Za-z]",entry[loop].name); fflash(stdin); /* сбросить входной поток, в случае ошибки */ /* ввести возраст, как целое число */ printf("Возраст: "); scanf("%d",&entry[loop].age); fflash(stdin); /* сбросить входной поток, в случае ошибки */ /* ввести размер зарплаты как float */ printf("Зарплата: "); scanf("%f",&entry[loop].salary); fflash(stdin); /* сбросить входной поток, в случае ошибки */ } /* ввести имя, возраст и зарплату как строку, целое и число с пла- вающей точкой, соответственно */ printf("Пожалуйста, введите свое имя, возраст и зарплату.\n"); scanf("%20s %d %lf",name,&age,&salary); /* напечатать введенные данные */ printf("\n\AТаблица %s\n",label); printf("Вычислена %s, возраст %d, $%15.2lf\n",name,age,salary); printf("-----------------------------------------------------\n"); for(loop = 0; loop


Searchpa



     searchpath

Функция Просматривает маршрут в поисках файла.

Синтаксис #include

char *searchpath(const char *filename);

Файл, содержащий dir.h прототип

Описание Функция searchpath делает попытку найти файл с именем filename, используя маршрут DOS, определя- емый в переменной окружения PATH. Указатель на полное имя маршрута файла возвращается в качестве значения функции. Сначала просматривается текущая директория рабочего диска. Если файл там не най- ден, вызывается переменная операционной среды PATH и каждая директория в маршруте PATH просмат- ривается до тех пор, пока файл не будет найден или маршрут не будет исчерпан.

Как только файл будет найден, возвращается стро- ка, содержащая полное имя маршрута файла. Эта строка затем может быть использована в вызовах функций open или exec... для получения доступа к файлу.

Возвращаемая строка с именем файла помещается в static буфер и переписывается при каждом последу- ющем вызове функции searchpath.

Возвращаемое Если файл успешно найден, возвращается указатель значение на строку filename, в противном случае, функция searchpath возвращает значение NULL.

Переносимость Функция уникальна для DOS.

Смотрите также .., ..,

Пример:

#include

#include

int main(void) { char *p; p = searchpath("TLINK.EXE"); printf("Маршрут для TLINK.EXE : %s\n", p); p = searchpath("NOTEXIST.FIL"); printf("Маршрут для NOTEXIST.FIL : %s\n", p); return 0; }

Вывод: Маршрут для TLINK.EXE : C:\BIN\TLINK.EXE Маршрут для NOTEXIST.FIL : (null)



Sector



     sector

Функция Рисует и закрашивает эллиптические сектора.

Синтаксис #include

void far sector (int x,int y,int stangle, int endangle,int xradius, int yradius);

Файл, содержащий graphics.h прототип

Назначение sector рисует эллиптический сектор с центром в точке с координатами (x,y) и горизонтальными и вертикальными радиусами xradius и yradius соот- ветственно, текущим цветом рисунка. Дуга рисуется от угла stangle до угла endangle. Сектор рисуется текущим цветом и закрашивается цветом и шаблоном, определенными функциями setfillstyle или setfillpattern.

Угол для arc отсчитывается против часовой стрел- ки, где 0 градусов соответствует 3 часам на ци- ферблата, 90 градусов - 12 часам и т.д.

Если во время заполнения сектора возникает ошиб- ка, graphresult возвращает значение -6 (grNoScanMem).

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

EW1setgraphbufsizeFW0

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy,i; 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;

/* цикл по шаблонам */ for(i=EMPTY_FILL; i



Setactiv



     setactivepage

Функция Устанавливает активную страницу для графического вывода.

Синтаксис #include

void far setactivepage(int page);

Файл, содержащий graphics.h прототип

Описание setactivepage делает страницу page активной. Весь последующий графический вывод будет направ- ляться на эту страницу.

Активной графической страницей может быть та, ко- торую вы видите на экране, хотя это и не обяза- тельно. Это зависит от количества графических страниц в вашей системе. Только графические карты EGA, VGA и Hercules поддерживают несколько стра- ниц.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Выбрать драйвер и режим, который он поддерживает */ int graphdriver = EGA, gmode = EGAHI, errorcode; int x,y,ht;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"\\tc");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } x = getmaxx() / 2; y = getmaxy() / 2; ht = textheight("W"); /* выбрать для вывода невидимую в настоящий момент страницу */ setactivepage(1); /* нарисовать на ней линию */ line(0,0,getmaxx(),getmaxy()); settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(x,y,"This is page #1"); outtextxy(x,y+ht,"Press any key to halt"); /* выбрать для вывода страницу 0 */ setactivepage(0); /* вывести текст на страницу 0 */ outtextxy(x,y,"This is page #0"); outtextxy(x,y+ht,"Press any key to view page #1"); getch(); /* сделать страницу 1 видимой */ setvisualpage(1);

/* очистка */ getch(); closegraph(); return 0; }



Setallpa



     setallpalette

Функция Изменяет всю палитру красок.

Синтаксис #include

void far setallpalette(struct palettetype far *palette);

Файл, содержащий graphics.h прототип

Описание setallpalette устанавлмвает текущую политру в значения, заданные в структуре palettetype, на которую указывает параметр palette. Вы можете частично (или полностью) изменить цвета политры EGA/VGA c помощью функции setallpalette.

Константа MAXCOLORS и структура palettetype ис- пользуемые в setallpalette, определены в graphics.h следующим образом:

#define MAXCOLORS 15

struct palettetype{ unsigned char size; signed char colors[MAXCOLORS+1]; };

size содержит количество цветов в палитре для те- кущего графического драйвера в текущем режиме.

colors -массив из size байтов, содержащий ряд но- меров цветов для каждого элемента палитры. Если элемент в массиве colors равен -1, то цвет палит- ры для этого элемента не изменяется.

Элементы массива colors, используемые в setallpalette, могут быть представлены в виде символических констант, определенных в graphics.h

----------------------------------------------------- Таблица доступных цветов ----------------------------------------------------- CGA EGA/VGA Имя Знач Имя Знач. ----------------------------------------------------- BLACK 0 EGA_BLACK 0 BLUE 1 EGA_BLUE 1 GREEN 2 EGA_GREEN 2 CYAN 3 EGA_CYAN 3 RED 4 EGA_RED 4 MAGENTA 5 EGA_MAGENTA 5 BROWN 6 EGA_LIGHTGRAY 7 LIGHTGRAY 7 EGA_BROWN 20 DARKGRAY 8 EGA_DARKGRAY 56 LIGHTBLUE 9 EGA_LIGHTBLUE 57 LIGHTGREEN 10 EGA_LIGHTGREEN 58 LIGHTCYAN 11 EGA_LIGHTCYAN 59 LIGHTRED 12 EGA_LIGHTRED 60 LIGHTMAGENTA 13 EGA_LIGHTMAGENTA 61 YELLOW 14 EGA_YELLOW 62 WHITE 15 EGA_WHITE 63 -----------------------------------------------------

Заметим, что цвета зависят от текущих графическо- го драйвера и графического режима.

Изменения, произведенные в палитре, сразу же мо- гут быть увидены на экране. При изменении цвета в палитре, все на экране, окрашенное в этот цвет, станет окрашенным в новый цвет.


Замечание. setallpalette не может использоваться с драйвером IBM-8514.

Возвращаемое Если в setallpalette передается ошибочное значение значение, graphresult возвратит -11(grError) а текущая палитра останется без изменений.

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; struct palettetype pal; int color,maxcolor,ht; int y=10; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */

{ printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } maxcolor = getmaxcolor(); ht = 2*textheight("W"); /* получить копию палитры */ getpalette(&pal); /* вывести значения цветов палитры */ for(color = 1; color


Setaspec



     setaspectratio

Функция Изменяет корректитующий фактор характеристичес- кого отношения, установленного по умолчанию.

Синтаксис #include

void far setaspectratio(int xasp,int yasp);

Файл, содержащий graphics.h прототип

Описание setaspectratio испльзуется для изменения, установленного по умолчанию характеристического отношения графической системы. Характеристическое отношение используется графической системой для того, чтобы убедиться, что окружность рисуется круглой. Если окружность на экране выглядит эл- липсом, монитор плохо настроен. Это может быть исправлено в аппаратном обеспечении посредством перенастройки монитора, или это может быть сдела- но в пограммном обеспечении, используя setaspectratio для установки характеристического отношения. Для получения текущего характеристи- ческого отношения для системы вызывается getaspectratio.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int xasp,yasp,midx,midy;

/* инициализация графики и локальных переменных */ 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());

/* получить текущее характеристическое отношение */ getaspectratio(&xasp,&yasp);

/* нарисовать нормальную окружность */ circle(midx,midy,100); getch();

/* нарисовать окружность, вытянутую в ширину */ cleardevice(); setaspectratio(xasp/2,yasp); circle(midx,midy,100); getch();

/* нарисовать окружность, вытянутую в длину */ cleardevice(); setaspectratio(xasp,yasp/2); circle(midx,midy,100); getch();

/* очистка */ getch(); closegraph(); return 0; }



Setbkcol



     setbkcolor

Функция Устанавливает текущий цвет фона, используя палитру.

Синтаксис #include

void far setbcolor(int color);

Файл, содержащий graphics.h прототип

Описание setbcolor устанавливает фон в цвет, опре- деляемый color. Аргумент color может быть именем или номером, как показано в следующей таблице.

----------------------------------------------------- номер имя номер имя ----------------------------------------------------- 0 BLACK 8 DARKGRAY 1 BLUE 9 LIGHTBLUE 2 GREEN 10 LIGHTGREEN 3 CYAN 11 LIGHTCYAN 4 RED 12 LIGHTRED 5 MAGENTA 13 LIGHTMAGENT 6 BROWN 14 YELLOW 7 LIGHTGRAY 15 WHITE -----------------------------------------------------

Замечание. Эти символические имена определены в graphics.h

Например, если вы хотите установить цвет фона в синий, вы можете вызвать

setbkcolor(BLUE) /* или */ setbkcolor(1)

На системах с CGA и EGA setbkcolor изменяет цвет фона изменением первого элемента палитры.

Замечание. Если вы используете VGA или EGA и ме- няте цвета палитры с помощью setpalette или setallpalette, то предопределенные символические константы могут не дать требуемого цвета. Это происходит потому, что параметр для setbkcolor отображает номер элемента в текущей палитре, а не указанный цвет (если параметр не равен 0, т.к. он всегда устанавливает цвет фона в черный).

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Выбрать драйвер и режим, поддерживающие несколько цветов фона */ int graphdriver = EGA, gmode = EGAHI, errorcode; int bkcolor,x,y,maxcolor; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult();

if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* максимальный поддерживаемый индекс цвета */ maxcolor = getmaxcolor(); /* установить центрирование текста */ settextjustify(CENTER_TEXT,CENTER_TEXT); x = getmaxx() / 2; y = getmaxy() / 2; /* цикл по допустимым цветам */ for(bkcol=0;bkcol



Setblock



     setblock

Функция Модифицирует размер ранее выделенного сегмента памяти.

Синтаксис #include

int setblock(unsigned segx, unsigned newsize);

Файл, содержащий dos.h прототип

Описание setblock изменяет размер сегмента памяти. segx - адрес сегмента, который был получен при вызове функции allocmem. newsize - это новый необходимый размер сегмента в параграфах.

Возвращаемое setblock возвращает -1 при успешном завершении. значение При возникновении ошибки она возвращает размер в параграфах самого большого блока и устанавлива- ет соответствующее значение в переменной _doserrno.

Переносимость setblock уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { unsigned int size,segp; int stat; size = 64; /* выделить 1024 байта (16 * 64) */ stat = allocmem(size,&segp); if(stat == -1) printf("Память выделена в сегменте %X\n",segp); else { printf("Ошибка. Максимальный размер блока: %d\n",stat); exit(1); } stat = setblock(segp,size*2); if(stat == -1) printf("Расширенный блок в сегменте %X\n",segp); else printf("Ошибка. Максимальный размер блока: %d\n",stat); freemem(segp); return 0; }



Setbuf



     setbuf

Функция Назначает буфер для потока stream.

Синтаксис #include

void setbuf(FILE *stream, char *buf);

Файл, содержащий stdio.h прототип

Описание Функция setbuf выделяет буфер buf для использова- ния в операциях ввода/вывода - вместо автомати- чески выделяемого буфера. Он будет использоваться только после того, как данный поток stream будет открыт.

При использовании функции setbuf, если параметр buf = NULL, ввод/вывод производится без буфера; в противном случае буфер используется.

Буфер должен быть длиной BUFSIZE байтов (данная константа определяется в файле stdio.h).

Стандартный ввод и вывод stdin и stdout не ис- пользуют буферов, если они не были переназначены; в противном случае, ввод и вывод производиться с буферизацией.

unbuffered (небуферизованный ввод/вывод) означа- ет, что символы, записываемые в поток, поступают непосредственно в файл или на устройство; в то время как buffered (буферизованный ввод/вывод) означает, что символы накапливаются и затем запи- сываются, как блок.

Функция setbuf может привести к непредвиденным результатам, если она вызывается для потока stream, причем не следует немедленно за операцией открытия или вызовом функции fseek. Вызов функции setbuf после того, как поток stream обработан без буферов, разрешен, и не вызовет ошибок.

Наиболее распространенной причиной ошибки являет- ся размещение буфера, в качестве automatiс (ло- кальной) переменной и затем попытка закрыть файл до выхода из функции, в которой был объявлен бу- фер.

Возвращаемое Нет. значение

Переносимость Функция поддерживаются на системах UNIX и стан- дартом ANSI C.

Смотрите также

Пример:

#include

/* BUFSIZE определено в stdio.h */ char buf[BUFSIZE];

int main(void) { int i; /* подключить буфер к стандартному потоку */ setbuf(stdout,buf); /* поместить в буфер символы */ puts("Это тест буферизованного вывода.\n"); puts("Этот вывод осуществляется в buf\n"); puts("и вы ничего не увидите, пока буффер не заполнится\n"); puts("или вы не сбросите его.\n"); /* сбросить поток */ fflush(stdout); return 0; }



Setcbrk



     setcbrk

Функция Устанавливает control-break.

Синтаксис #include

int setcbrk(int value);

Файл, содержащий dos.h прототип

Описание setcbrk использует функцию DOS 0х33 для установки флага Ctrl_Break.

value = 0 Выключает реакцию на Ctrl_Break (вклю- чена только во время операций ввода/вы- вода на консоль, принтер или коммуника- ционный порт.)

value = 1 Включает реакцию на Ctrl_Break. (При любых системных вызовах).

Возвращаемое setcbrk возвращает value, т.е. переданное значение значение.

Переносимость setcbrk уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int break_flag; printf("Для выключения нажмите 0\n"); printf("Для включения нажмите 1\n"); break_flag = getch()-'0'; /* прим. пер. в оригинале без вычит. */ setcbrk(break_flag); if(getcbrk()) printf("Флаг Ctrl-Break включен\n"); else printf("Флаг Ctrl-Break выключен\n"); return 0; }



Setcolor



     setcolor

Функция Устанавливает текущий цвет рисования, используя палитру.

Синтаксис #include

void far setcolor(int color);

Файл, содержащий graphics.h прототип

Описание setcolor изменяет текущий цвет рисования, ко- торый может изменяться от 0 до getmaxcolor.

Текуший цвет рисования - это значение которое присваивается пикселям при рисовании линий и т.п. Следующие таблицы содержат цвета, используемые в CGA и EGA соответственно. ----------------------------------------------------------- Номер Константа присвоенная номеру цвета(значение пиксел палитры 1 2 3 ----------------------------------------------------------- 0 CGA_LIGHTGREEN CGA_LIGHTRED CGA_YELLOW 1 CGA_LIGHTCYAN CGA_LIGHTMAGENTA CGA_WHITE 2 CGA_GREEN CGA_RED CGA_BROWN 3 CGA_CYAN CGA_MAGENTA CGA_LIGHTGRA ----------------------------------------------------------- --------------------------------- Числовое Символическое значение имя --------------------------------- 0 BLACK 1 BLUE 2 GREEN 3 CYAN 4 RED 5 MAGENTA 6 BROWN 7 LIGHTGRAY 8 DARKGRAY 9 LIGHTBLUE 10 LIGHTGREEN 11 LIGHTCYAN 12 LIGHTRED 13 LIGHTMAGENTA 14 YELLOW 15 WHITE ----------------------------------- Вы выбираете цвет рисования, посылая либо сам но- мер цвета, либо соответствующее символическое имя в setcolor. Например, в режиме CGAC0 палитра сос- тоит из четырех цветов: цвет фона, яркозеленый, яркокрасный и желтый. В этом режиме либо вызовом setcolor(3) либо setcolor(CGA_YELLOW) выбирается желтый цвет рисунка.

Возвращаемое Нет. значение

Переносимость Эта функция пригодна только для компьюте- ров IBM PC и совместимых с ними, оснащенных дис- плейными адаптерами, поддерживающими графический режим.

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Выбрать драйвер и режим, поддерживающие несколько цветов */ int graphdriver = EGA, gmode = EGAHI, errorcode; int color,x,y,maxcolor; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* максимальный поддерживаемый индекс цвета */ maxcolor = getmaxcolor(); /* установить центрирование текста */ settextjustify(CENTER_TEXT,CENTER_TEXT); x = getmaxx() / 2; y = getmaxy() / 2; /* цикл по допустимым цветам */ for(color=0;color



Setdate



     setdate

Функция Устанавливает дату DOS.

Синтаксис #include

void setdate(struct date *datep);

Файл, содержащий dos.h прототип

Описание setdate устанавливает системную дату (месяц, день, год) в структуре data, на которую указывает datep.

Структура date определена следующим образом:

struct date { int da_year; /* год */ char da_day; /* день месяца */ char da_mon; /* месяц (1 = Янв.) */ };

Возвращаемое Нет. значение

Переносимость setdate уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

int main(void) { struct date reset; reset.da_year = 2001; reset.da_mon = 1; reset.da_day = 1; setdate(&reset); system("date"); return 0; }



Setdisk



     setdisk

Функция Устанавливает спецификацию текущего дисковода.

Синтаксис #include

int setdisk(int drive);

Файл, содержащий dir.h прототип

Описание setdisk устанавливает текущим дисковод, определяе- мый параметром drive (0 - A, 1 - B, 2 - C и т. д.). Эквивалентно вызову функции DOS 0х0Е.

Возвращаемое setdisk возвращает общее число доступных дисково- значение дов.

Переносимость setdisk уникальна для DOS.

Смотрите также

Пример:

#include

#include

int main(void) { int maxdrives; maxdrives = setdisk(2); printf("Доступно %d логических устройств\n",maxdrives); return 0; }



Setdta



     setdta

Функция Устанавливает адрес DTA. (Область связи с диском).

Синтаксис #include

void setdta(char far *dta);

Файл, содержащий dos.h прототип

Описание setdta изменяет текущий адрес области связи с дис- ком (DTA) по значению параметра dta.

Возвращаемое Нет. значение

Переносимость setdta уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { char far *save_dta; char line[80]; char buffer[256] = "SETDTA test!"; struct fcb blk; int result; /* ввести имя файла */ printf("Введите имя нового файла (без маршрута, например\ a:file.dat)\n"); gets(line); /* записать имя файла в FCB */ if(!parsfnm(line,&blk,1)) printf("Устройство #%d файл: %s\n\n",blk.fcb_drive, blk.fcb_name); /* создать файл, с использованием функций DOS, работающих с FCB */ if(bdosptr(0x16,&blk,0)==-1) { printf("Ошибка при создании файла\n"); exit(1); } /* сохранить старый DTA, создать новый */ save_dta = getdta(); setdta(buffer); /* вывод в файл */ blk.fcb_recsize = 256; blk.fcb_random = 0L; result = randbwd(&blk,1); /* проверить результат операции */ printf("result = %d",result); if(!result) printf("Запись закончена успешно\n"); else { perror("Ошибка диска\n"); exit(1); } /* закрыть файл */ if(bdosptr(0x10,&blk,0)==-1) { printf("Ошибка при закрытии файла\n"); exit(1); } /* восстановить DTA */ setdta(save_dta); return 0; }



Setfillp



     setfillpattern

Функция Выбирает определенный пользователем шаблон закраски.

Синтаксис #include

void far setfillpattern(char far *upattern, int color);

Файл, содержащий graphics.h прототип

Описание setfillpattern аналогична функции setfill- style, за исключением того, что вы используете ее для установки определенного пользователем шаблона 8 x 8 вместо встроенных шаблонов.

upattern - указатель на последовательность из 8 байт, где каждый байт соответствует 8-ми пикселям шаблона. Каждый бит шаблонного байта установлен- ный в 1, вызывает отображение соответствующего пиксела на экране.

Возвращаемое Нет. значение

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int maxx,maxy; char pattern[8] = {0x00,0x70,0x20,0x27,0x24,0x24,0x07,0x00);

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } maxx = getmaxx(); maxy = getmaxy(); setcolor(getmaxcolor()); /* выбрать пользовательский шаблон */ setfillpattern(pattern,getmaxcolor()); /* заполнить экран с помощью этого шаблона */ bar (0,0,maxx,maxy); /* очистка */ getch(); closegraph(); return 0; }



Setfills



     setfillstyle

Функция Устанавливает шаблон и цвет заполнения.

Синтаксис #include

void far setfillstyle(int pattern,int color);

Файл, содержащий graphics.h прототип

Описание setfillstyle устанавливает текущие цвет и шаблон заполнения. Для установки шаблона, опреде- ленного пользователем не устанавливайте pattern равным 12 (USER_FILL) в setfillfile, а лучше ис- пользуйте функцию setfillpattern.

Перечисляемый тип fill_patterns, определенный в graphics.h, задает имена встроенных шаблонов за- полнения и индикатор для шаблона, определяемого пользователем. -------------------------------------------------------------- имя значение описание -------------------------------------------------------------- EMPTY_FILL 0 заполнеие цветом фона SOLD_FILL 1 сплошное заполнение цветом заполнения LINE_FILL 2 заполнение ______ LSTLASH_FILL 3 заполнение ////// SLASH_FILL 4 заполнение /// толстой линией BKSLASH_FILL 5 заполнение \\\ толстой линией LTBKSLASH_FILL 6 заполнение \\\\ HATCH_FILL 7 светлая штриховка сеткой XHATCH_FILL 8 крестообразная штриховка INTERLEAVE_FILL 9 тканеобразная штриховка WIDE_DOT_FILL 10 заполнение редкими точками CLOSE_DOT_FILL 11 заполнение частыми точками USER_FILL 12 шаблон заполнения, определяемый пользователем -------------------------------------------------------------- Все, кроме EMPTY_FILL заполняют текущим цветом; EMPTY_FILL использует текущий цвет фона.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

#include

/* имена поддерживаемых типов заполнения */ char *fname[] = {"EMPTY_FILL", "SOLID_FILL", "LINE_FILL", "LSTLASH_FILL", "SLASH_FILL", "BKSLASH_FILL", "LTBKSLASH_FILL", "HATCH_FILL", "XHATCH_FILL", "INTERLEAVE_FILL", "WIDE_DOT_FILL", "CLOSE_DOT_FILL", "USER_FILL" };

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; struct fillsettingstype fillinfo; int maxx,maxy,style; char stylestr[40];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx()/2; midy = getmaxy()/2; for(style=EMPTY_FILL;style



Setftime



     setftime

Функция Устанавливает дату и время создания файла.

Синтаксис #include

int setftime(int handle, struct ftime *ftimep);

Файл, содержащий io.h прототип

Описание setftime устанавливает время и дату файла, свя- занного с открытым дескриптором handle, в соот- ветствии с содержимым структуры ftime.

Структура ftime определена следующим образом:

struct ftime { unsigned ft_tsec:5; /* по две сек.*/ unsigned ft_min:6; /* минуты */ unsigned ft_hour:5; /* часы */ unsigned ft_day:5; /* день */ unsigned ft_month:4; /* месяц */ unsigned ft_year:7; /* год-1980 */ };

Возвращаемое При успешном завершении setftime возвращает 0. значение Если произошла ошибка, она возвращает -1 и гло- бальной переменной errno присваивает одно из сле- дующих значений:

EINVFNC - Неверный номер функции; EBADF - Неверный номер файла.

Переносимость setftime уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { struct ftime filet; FILE *fp; if((fp=fopen("TEST.$$$","w")) == NULL) { perror("Ошибка:"); exit(1); } fprintf(fp,"Тестирование...\n"); filet.ft_tsec = 1; filet.ft_min = 1; filet.ft_hour = 1; filet.ft_day = 1; filet.ft_month = 1; filet.ft_year = 21; system("dir TEST.$$$"); setftime(fileno(fp),&filet); system("dir TEST.$$$"); fclose(fp); unlink("TEST.$$$"); return 0; }



Setgraph



     setgraphmode

Функция Переводит систему в графический режим, очищает экран.

Синтаксис #include

void far setgraphmode(int mode);

Файл, содержащий graphics.h прототип

Описание setgraphmode выбирает графический режим отличный от установленного по умолчанию функцией initgraph. mode должен быть режимом, допустимым для используемого драйвера. setgraphmode очищает экран и устанавливает все графические величины в значение по умолчанию (CP, палитра, цвет, окно и т.д.).

Вы можете использовать setgraphmode совместно с restorecrtmode для переключения между графическим и текстовым режимами.

Возвращаемое Если вы задаете setgraphmode несуществующий значение для используемого драйвера режим, то graph- result вернет значение -10 (grInvalidMode).

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int x,y;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } x = getmaxx()/2; y = getmaxy()/2; /* вывести сообщение */ settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(x,y,"Press any key to exit graphics..."); getch(); /* перевести систему в текстовый режим */ restorecrtmode(); printf("Мы в текстовом режиме\n"); printf("Для возврата в графический режим нажмите клавишу.\n"); getch(); /* возврат в графический режим */ setgraphmode(getgraphmode());

/* вывести сообщение */ settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(x,y,"We're back in graphics mode..."); outtextxy(x,y+textheight("W"),"Press any key to halt...");

/* очистка */ getch(); closegraph(); return 0; }



Setjmp



     setjmp

Функция Устанавливает нелокальный переход.

Синтаксис #include

int setjmp(jmp_buf jmpb);

Файл, содержащий setjmp.h прототип

Описание setjmp захватывает состояние задачи в jmpb и воз- вращает 0.

Последующий вызов longjmp восстанавливает состоя- ние задачи из jmpb и возвращается также как и setjmp со значением val.

Cостояние задачи представляет собой следующее:

- все сегментные регистры (CX,DS,ES,SS); - переменные-регистры (SI,DI); - указатель стека (SP); - указатель базы (BP); - флаги.

Состояние задачи является достаточно полным, так что функции setjmp и longjmp могут быть использо- ваны как инструмент для организации сопрограмм.

Перед использованием функции longjmp необходимо вызвать функцию setjmp. Программа вызывающая setjmp и устанавливающая jmpb должна оставаться активной и не должна возвращать управления до вы- зова longjmp. Если это случится, то результат непредсказуем.

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

Примечание. Функции setjmp и longjmp нельзя ис- пользовать для реализации оверлейных программ. Обычно setjmp и longjmp сохраняют и восстананав- ливают все, необходимые для реализации сопрог- рамм, однако для управления оверлеями необходимо следить за стеком, причем подразумевается, что стек один. При реализации сопрограмм вы обычно используете два стека, или две части одного сте- ка, и поэтому администратор оверлеев не сможет корректно их отслеживать.

Вы можете иметь задачи, работающие в фоновом ре- жиме, которые используют свой стек, или свой раз- дел общего стека, однако вы должны быть уверены, что они не используют оверлеев, и вы не должны использовать оверлейные версии setjmp и longjmp для переключения на эти фоновые задачи.

Возвращаемое setjmp возвращает 0 при начальном вызове. значение Если это вызов для возврата после longjmp, setjmp возвращает ненулевое значение (как в примере).

Переносимость Функция поддерживаются на системах UNIX и стандар- том ANSI C.

Смотрите также

Пример:

#include

#include

#include

void subroutine(void);

imp_buf jumper;

int main() { int value; value = setjmp(jumper); if (value != 0) { printf("longjmp со значением %d\n", value); exit(value); } printf("Вызов подпрограммы ... \n"); subroutine(); return 0; } void subroutine(void) { longjmp(jumper,l); }



Setlines



     setlinestyle

Функция Устанавливает толщину и тип линии.

Синтаксис #include

void far setlinestyle(int linestyle, unsigned upattern, int thickness);

Файл, содержащий graphics.h прототип

Описание Устанавливает тип для всех линий, рисуемых функциями line, lineto, rectangle, drawpoly и т.д.

Структура linesettingstype определена в graphics.h следующим образом:

struct linesettingstype{ int linestyle; unsigned upattern; int thickness; };

linestyle определяет тип линий, который будет ис- пользоваться (непрерывная, пунктир, штрихпунктир, штриховая). Перечисленные line_styles, определен- ные в graphics.h, дают названия этим операциям: ------------------------------------------- Название Знач. Описание ------------------------------------------- SOLID_LINE 0 сплошная DOTTED_LINE 1 пунктир CENTER_LINE 2 штрихпунктир DASHED_LINE 3 штриховая USERBIT_LINE 4 тип линии, заданный пользователем ------------------------------------------- thickness определяет будут ли последующие линии тонкими или толстыми. ------------------------------------------- Название Знач. Описание ------------------------------------------- NORM_WIDTH 1 толшина в 1 пиксел THICK_WIDTH 3 толщина в 3 пиксела -------------------------------------------

upattern -это 16-битный шаблон, который использу- ется только когда linestyle равен USERBIT_LINE (4). В этом случае, каждый бит в шаблоне установ- ленный в 1, соответствует пикселю на линии в те- кущем цвете. Например, сплошной линии соответстс- вует upattern равный 0xFFFF (рисуются все пиксе- лы), а пунктиру соответствует upattern равный 0x3333 или 0x0F0F. Если же параметр linestyle в setlynestyle не равен USERBIT_LINE (!=4), то upattern поддерживается, но игнорируется.

Замечание. Параметр linestyle не работает при построении дуг, кругов, эллипсов и секторов. В этом случае используется пареметр thickness.

Возвращаемое Если в setlinestyle передается неправиль- значение ный ввод, graphresult возвратит -11, а теку- щий тип линии останется без изменений.


Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

/* имена поддерживаемых типов линий */ char lname[] = {"SOLID_LINE", "DOTTED_LINE", "CENTER_LINE", "DASHED_LINE", "USERBIT_LINE" };

int main(void) { /* Запрос автоопределения */

int graphdriver = DETECT, gmode, errorcode; int midx,midy,style,userpat; char stylestr[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx()/2; midy = getmaxy()/2; /* пользовательский шаблон: 1 (двоичный:0000000000000001) */ userpat = 1; for(style = SOLID_STYLE; style


Setlocal



     setlocale

Функция Выбирает locale.

Синтаксис #include

char *setlocale(int category,char *locale);

Файл, содержащий locale.h прототип

Описание Turbo C++ в настоящее время поддерживает только "С" locale, поэтому вызов этой функции не будет иметь ни какого смысла.

Аргумент category может принимать следующие зна- чения:

LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME

Возвращаемое Если выбор прошел удачно, то возвращается строка значение содержащая старое значение. При ошибке возвра- щается 0.

Переносимость setlocale поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *old_locale; /* в Turbo C++ поддерживается только "C" */ old_locale = setlocale(LC_ALL,"C"); printf("Old locale was %s\n",old_locale); return 0; }



Setmem



     setmem

Функция Присваивает значение всем байтам некоторой облас- ти памяти.

Синтаксис #include

void setmem(void *dest, unsigned len, char value);

Файл, содержащий mem.h прототип

Описание setmem присваивает всем байтам блока памяти с ад- ресом dest и длиной len значение value.

Возвращаемое Нет. значение

Переносимость setmem уникальна для микропроцессоров семейства 8086.

Смотрите также

Пример:

#include

#include

#include

int main(void) { char *dest; dest = calloc(21,sizeof(char)); setmem(dest,20,'c'); printf("%s\n",dest); return 0; }



Setmode



     setmode

Функция Устанавливает режим открытия файла.

Синтаксис #include

int setmode(int handle, unsigned amode);

Файл, содержащий io.h прототип

Описание Функция setmode устанавливает режим открытия файла (либо бинарный, либо текстовый), соответствующего параметру handle. Аргумент amode принимает при этом значение либо O_BINARY, либо O_TEXT, но ни- когда вместе. (Эти символические константы опре- делены в файле fcntl.h)

Возвращаемое При успешном завершении функция setmode значение значение 0; в случае ошибки - значение -1, кроме того, гло- бальная переменная errno получает значение:

EINVAL - Неверный аргумент.

Переносимость Функция setmode поддерживается на системах UNIX.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int result; result = setmode(fileno(stdprn),O_TEXT); if(result == -1) printf("Режим не допустим\n"); else printf("Режим установлен.\n"); return 0; }



Setpalet



     setpalette

Функция Изменяет один цвет в палитре.

Синтаксис #include

void far setpalette(int colornum, int color);

Файл, содержащий graphics.h прототип

Описание setpalette устанавливает элемент colornum в color. Например, setpalette(0,5) изменяет пер- вый цвет текущей палитры (цвет фона) на цвет, имеющий код 5. Если size -это количество элемен- тов в текущей палитре, то colornum может изме- няться от 0 до (size -1).

Вы можете частично (либо целиком) поменять цвета в EGA/VGA палитре с помощью setpalette. На CGA же вы можете изменить лишь первый элемент палитры (colornum равен 0, цвет фона).

Элементы массива colors, используемые в setpalette, могут быть представлены ввиде симво- лических констант, определенных в graphics.h

----------------------------------------------------- Таблица доступных цветов ----------------------------------------------------- CGA EGA/VGA Имя Знач Имя Знач. ----------------------------------------------------- BLACK 0 EGA_BLACK 0 BLUE 1 EGA_BLUE 1 GREEN 2 EGA_GREEN 2 CYAN 3 EGA_CYAN 3 RED 4 EGA_RED 4 MAGENTA 5 EGA_MAGENTA 5 BROWN 6 EGA_LIGHTGRAY 7 LIGHTGRAY 7 EGA_BROWN 20 DARKGRAY 8 EGA_DARKGRAY 56 LIGHTBLUE 9 EGA_LIGHTBLUE 57 LIGHTGREEN 10 EGA_LIGHTGREEN 58 LIGHTCYAN 11 EGA_LIGHTCYAN 59 LIGHTRED 12 EGA_LIGHTRED 60 LIGHTMAGENTA 13 EGA_LIGHTMAGENTA 61 YELLOW 14 EGA_YELLOW 62 WHITE 15 EGA_WHITE 63 -----------------------------------------------------

Заметим, что цвета зависят от текущих графическо- го драйвера и графического режима.

Изменения, произведенные в палитре, сразу же от- ражаются на экране. При изменении цвета в палит- ре, все на экране, окрашенное в этот цвет, станет окрашенным в новый цвет.

Замечание. setpalette не может использоваться с драйвером IBM-8514.

Возвращаемое Если в setpalette передается ошибочное значение значение, graphresult возвратит -11(grError) а текущая палитра останется без изменений.

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int color,maxcolor,ht; int y=10; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } maxcolor = getmaxcolor(); ht = 2*textheight("W"); /* вывести цвета по умолчанию */ for(color=0;color



Setrgbpa



     setrgbpalette

Функция Позволяет пользователю определять цвета для IBM 8514.

Синтаксис #include

void far setgbpalette(int colornum,int red, int green, int blue);

Файл, содержащий graphics.h прототип

Описание setgbpalette может использоваться с драйверами IBM8514 и VGA.

colornum определяет элемент палитры, который дол- жен быть загружен, а red, green и blue определяют цветовые составляющие элемента палитры.

Для дисплея IBM8514 (и VGA в цветном режиме 256К) colornum изменяется в интервале от 0 до 255. Для остальных режимов VGA colornum изменяется в ин- тервале от 0 до 15. Используется только младшие байты red, green и blue, и из байта лишь 6 наибо- лее значащих бит загружаются в палитру.

Замечание. Для совместимости с другими графичес- кими адаптерами IBM, драйвер BGI устанавливает первые 16 элементов палитры IBM8514 в цвета EGA/VGA, используемые по умолчанию. Эти значения могут использоваться без изменений, а могут изме- няться с помощью setrgbpalette.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* выбор драйвера и режима, поддерживающих функцию setrgbpalette */ int graphdriver = VGA, gmode = VGAHI, errorcode; /* указатель на структуру описания политры */ struct palettetype pal; int i,ht,y,xmax;

/* инициализация графики и локальных переменных */

initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* получить копию палитры */ getpalette(&pal); for(i=0;i



Settextj



     settextjustify

Функция Устанавливает выравнивание текста для графических функций.

Синтаксис #include

void far settextjustify(int horiz,int vert);

Файл, содержащий graphics.h прототип

Описание Выводимый текст, после обращения к settext- justify будет выравнен горизантально или верти- кально относительно текущей позиции (СР). По умолчанию устанавливается выравнивание текста LEFT_TEXT (для горизонтального) и TOP_TEXT (для вертикального). Перечисленные в graphics.h text_just представляют собой имена для установки horiz и vert для передачи в settextjustify.

------------------------------------------- Название Знач. Описание ------------------------------------------- LEFT_TEXT 0 horiz CENTER_TEXT 1 horiz и vert RIGHT_TEXT 2 horiz BOTTOM_TEXT 0 vert TOP_TEXT 2 vert -------------------------------------------

Если horiz равно LEFT_TEXT и direction равно HORIZ_DIR, то элемент x CP продвигается с помощью textwidth(string) после вызова outtext(string).

settextjustify работает с текстами написанными функцией outtext и не может быть использована в текстовом режиме и с потокоориентированными функ- циями.

Возвращаемое Если в settextjustify передается неправильный значение ввод, то graphresult возвратит -11, а теку- щее выравнивание текста останется без изменений.

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

/* прототип функции */ void xat(int x,int y);

/* горизонтальное выравнивание текста */ char *hjust[] = {"LEFT_TEXT", "CENTER_TEXT", "RIGTH_TEXT"};

/* вертикальное выравнивание текста */ char *vjust[] = {"BOTTOM_TEXT", "CENTER_TEXT", "TOP_TEXT"};

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int midx,midy,hj,vj; char msg[80];

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } midx = getmaxx()/2; midy = getmaxy()/2; /* цикл по выравниваниям */ for(hj=LEFT_TEXT;hj



Settexts



     settextstyle

Функция Устанавливает текущие характеристики текста для графического вывода.

Синтаксис #include

void far settextstyle(int font,int direction, int charsize);

Файл, содержащий graphics.h прототип

Описание settextstyle устанавливает шрифт текста, направление отображения текста и размер символов. Вызов settextstyle действует для любых текстов, выводимых с помощью outtext и outtextxy.

Параметры font, direction и charsize, передавае- мые в settextstyle, описаны следующим образом:

font: допустимы: один шрифт с матрицей 8х8 бит и несколько "стилизованных" шрифтов. По умолчанию используется шрифт с матрицей 8х8 битов. Перечис- ленные font_names, определенные в graphics.h, оп- ределяют названия различных шрифтов( смотри таб- лицу): ------------------------------------------- Имя Знач. Описание ------------------------------------------- DEFAULT_FONT 0 шрифт 8х8 бит TRIPLEX_FONT 1 утроенный шрифт SMALL_FONT 2 малый шрифт SANSSERIF_FONT 3 шрифт sans-serif GOTHIC_FONT 4 готический шрифт -------------------------------------------

Битовый шрифт, используемый по умолчанию, встроен в графическую систему. Стилизованные шрифты хра- няться в дисковых файлах *.CHR и по одному могут храниться в памяти. Поэтому при выборе шрифта, отличного от загруженного в систему, необходимо загрузить соответствующий *.CHR-файл с диска. Для избежания этих загрузок при использовании нес- кольких шрифтов вы можете поместить шрифтовые файлы в вашу программу при компановки. Это осу- ществляется путем преобразования их в объектные файлы с помощью утилиты BGIOBJ и регистрации их через register- bgifont, как описано в файле UTIL.DOC, поставляемом вместе с Turbo C++. direction: поддерживается два направления - гори- зонтальный текст( слева направо) и вертикальный текст (повернут на 90 градусов против часовой стрелки). По умолчанию наравление равно HORIZ_DIR. ------------------------------------------- Имя Знач. Описание ------------------------------------------- HORIZ_DIR 0 слева направо VERT_DIR 1 снизу вверх ------------------------------------------- charsize: размер каждого символа может быть уве- личен фактором charsize. Значение charsize равное 0 используется только со стилизованными шрифтами, а ненулевое значение charsize можно использовать и с основным битовым шрифтом.


1) Если charsize равен 1, outtext и outtextxy будут отображать шрифтовую матрицу 8х8 бит в прямоугольник 8х8 пикселов на экра- не.

2) Если charsize равен 2, эта функция отоб- разит матрицу 8х8 бит в прямоугольник 16х16 пикселов на экране, и т.д.( до ограничения в 10 раз больше от нормального размера).

3) Когда charsize равен 0, функции вывода outtext и outtextxy увеличивают шрифт текста используя либо фактор увеличения символов(4) по умолчанию, либо размер шрифта определенный пользователем, используя setusercharsize.

Используйте также textheight и textwidth для оп- ределения размера шрифта.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

/* имена поддерживаемых шрифтов */ char *font[] = {"DEFAULT_FONT", "TRIPLEX_FONT", "SMALL_FONT", "SANS_SERIF_FONT", "GOTHIC_FONT" };

int main(void) { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int style,midx,midy; int size=1;

/* инициализация графики и локальных переменных */ 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); /* цикл по шрифтам */ for(style=DEFAULT_FONT;style


Settime



     settime

Функция Устанавливает системное время.

Синтаксис #include

void settime(struct time *timep);

Файл, содержащий dos.h прототип

Описание settime устанавливает системное время в соответст- вии с содержимым структуры time, на которую ука- зывает параметр timep.

Структура time определена следующим образом:

struct time { unsigned char ti_min; /* минуты */ unsigned char ti_hour; /* часы */ unsigned char ti_hund; /* сотые доли сек */ unsigned char ti_sec; /* секунды */ };

Возвращаемое Нет. значение

Переносимость settime уникальна для DOS.

Смотрите также

Пример:

#include

#include

int main(void) { struct time t; gettime(&t); printf("минута: %d\n",t.ti_min); printf("час: %d\n",t.ti_hour); printf("сотые: %d\n",t.ti_hund); printf("секунды: %d\n",t.ti_sec); /* увеличить счетчик минут */ t.ti_min++; settime(&t); return 0; }



Setuserc



     setusercharsize

Функция Позволяет пользователю изменять ширину и высоту символов для векторных шрифтов.

Синтаксис #include

void far setusercharsize(int multx,int divx, int multy,int divy);

Файл, содержащий graphics.h прототип

Описание setusercharsize позволяет вам управлять размером текста из векторных шрифтов, используе- мых графическими функциями. Значения установлен- ные функцией setusercharsize являются действи- тельными только если charsize, установленный ра- нее с помощью settextstyle, равен 0.

С помощью setusercharsize вы определяете факторы, по которым масштабируются ширина и высота. Ширина и высота, установленные по умолчанию, могут изме- няться в размерах с помощью multx:divx и multy:divy соответственно. Например, если необхо- димо сделать текст в два раза шире и на 50% выше, установите:

multx = 2; divx = 1; multy = 3; divy = 2;

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) {

/* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } /* выбрать тип шрифта */ settextstyle(TRIPLEX_FONT,HORIS_DIR,4) /* переместить CP на начальную позицию */ moveto(0,getmaxy()/2); /* вывести текст */ outtext("Norm "); /* сделать его в 1/3 нормальной высоты */ setusercharsize(1,3,1,1); outtext("Short "); /* сделать его в 3 раза больше нормальной ширины */ setusercharsize(3,1,1,1); outtext("Wide "); /* очистка */ getch(); closegraph(); return 0; }



Setvbuf



     setvbuf

Функция Назначает буфер для потока stream.

Синтаксис #include

void setvbuf(FILE *stream, char *buf, int type, size_t size);

Файл, содержащий stdio.h прототип

Описание Функция setvbuf выделяет буфер buf для использова- ния в операциях ввода/вывода - вместо автомати- чески выделяемого буфера. Они вызываются только после того, как данный поток stream будет открыт.

При вызове функции setvbuf, если параметр buf = NULL, буфер будет выделен посредством malloc; па- раметр size будет определять объем выделенной па- мяти. Параметр size определяет размер буфера и должен быть больше нуля.

Замечание. Параметр size не должен превышать 32767.

Стандартный ввод и вывод stdin и stdout не ис- пользуют буферов, если они не были переназначены; в противном случае, ввод и вывод производиться с буферизацией.

unbuffered (небуферизованный ввод/вывод) означа- ет, что символы, записываемые в поток, поступают непосредственно в файл или на устройство; в то время как buffered (буферизованный ввод/вывод) означает, что символы накапливаются и затем запи- сываются, как блок.

Параметр type имеет одно из следующих значений:

_IOFBF Файл использует буферы полностью (fully buffered). Если буфер пуст, следующая операция ввода пытается заполнить буфер. Перед тем, как данные записываются в файл, выводной буфер дол- жен полностью заполниться.

_IOLBF Файл использует буферы построчно (line buffered). Когда буфер пуст, следующая операция ввода пытается его заполнить. Тем не менее, при выводе буфер будет сброшен, как только в файл бу- дет записан символ перехода на новую строку.

_IONBF Файл не использует буферов (unbuffered). Параметры buf и size игнорируются. Каждая операция ввода будет считывать данные непосредственно из файла, и каждая операция вывода будет записывать данные непосредственно в файл.

Наиболее распространенной причиной ошибки являет- ся размещение буфера, в качестве automatiс (ло- кальной) переменной и затем попытка закрыть файл до выхода из функции, в которой был объявлен бу- фер.


Возвращаемое Функция setvbuf при успешном завершении возвращает значение 0. Не нуль она возвращает, если параметры type или size имеют неверные значения; или если для разме- щения буфера нехватает памяти.

Переносимость Функция поддерживаются на системах UNIX и стан- дартом ANSI C.

Смотрите также

Пример:

#include

int main(void) { FILE *input, *output; char bufr[512]; input = fopen("file.in", "r"); output = fopen("file.out", "w"); /* указать минимальный доступ к диску и свой буфер */ if (setvbuf(input, bufp,_IOLBF, 512) != 0) printf("Ошибка, при определении буфера для входного файла\n"); else printf("Буфер определен\n"); /* определить для входного файла строчную буферизацию, и неявно определить буфер, который будет выделен, с помощью вызова функции malloc */ if (setvbuf(output, NULL,_IOLBF, 132) != 0) printf("Ошибка, при определении буфера для выходного файла\n"); else printf("Буфер определен\n"); /* ввод вывод */ /* закрыть файлы */ fclose(input); fclose(output); return 0; }


Setvect



     setvect

Функция Устанавливает вектор прерывания.

Синтаксис void setvect(int intr_num, void interrupt(*isr) ());

Файл, содержащий dos.h прототип

Описание Каждый микропроцессор семейства 8086 включает на- бор векторов прерываний, с номерами от 0 до 255. Четырех байтовые значения каждого вектора в дейс- твительности представляют собой адреса программ обработки соответствующих прерываний. setvect устанавливает новую программу обработки прерывания с номером intr_num, передавая ее адрес в параметре isr. Адрес подпрограммы можно пере- дать только в том случае, если она объявлена как подпрограмма обработки прерывания (interrupt).

Примечание. Если вы используете прототипы, объяв- ленные в dos.h то вы можете просто посылать адрес подпрограммы обработки прерывания setvect в любой модели памяти.

Возвращаемое Нет. значение

Переносимсоть setvect уникальна для микропроцессоров семейства 8086.

Смотрите также

Пример:

/* Примечание: Это программа обработки прерываний. Вы должны компилировать данную программу с отключенной функцией проверки переполнения стека (Test Steck Overflow - off). */

#include

#include

#include

#define INTR 0X1C /* прерывание по таймеру */

void interrupt (*oldfunc)(); /* указатель на прерывание */ int count = 0;

void interrupt handler() { /* увеличить счетчик */ count ++; /* вызвать старый вектор */ oldfunc(); }

int main(void) { /* сохранить старый вектор */ oldfunc = getvect(INTR); /* установить новый вектор */ setvect(INTR,handler) /* ничего не делать */ while(count



Setverif



     setverify

Функция Устанавливает состояние флага проверки DOS.

Синтаксис #include

void setverify(int value);

Файл, содержащий dos.h прототип

Описание setverify устанавливает значение флага проверки в соответствии с параметром value.

- value = 0 Флаг проверки сбрасывается; - value = 1 Флаг проверки устанавливается.

Флаг проверки определяет, будут ли проверяться операции записи на диск. Если флаг сброшен, то проверка не производится, если установлен, то все операции записи на диск проверяются.

Возвращаемое Нет. значение

Переносимость setverify уникальна для DOS.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int verify_flag; printf("Для сброса флага нажмите '0'.\n"); printf("Для установки флага нажмите '1'.\n"); verify_flag = getch()-'0'; /* в оригинале getch(). прим. пер. */ setverify(); if(getverify()) printf("Флаг установлен. \n"); else printf("Флаг сброшен. \n"); return 0; }



Setviewp



     setviewport

Функция Устанавливает область просмотра для графического вывода.

Синтаксис #include

void far setviewport(int left, int top, int right, int bottom,int clip);

Файл, содержащий graphics.h прототип

Описание setviewport устанавливает область просмотра для графического вывода.

Углы окна задаются в абсолютных координатах экра- на с помощью (left, top) и (right, buttom). Кур- сор перемещается в позицию (0,0) нового окна.

Параметр clip определяет будет ли отсекаться изображение, выходящее за границы окна. Если clip - ненулевое значение, то все линии, выходящие за границу окна будут отсекаться.

Возвращаемое Если в setviewport передается неверное значение, значение то graphresult возвращает -11, а текущие значения останутся без изменений.

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

#define CLIP_ON 1 /* активизации клиппирования в области просмотра */

int main(void)

{ /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } setcolor(getmaxcolor(1)); /* сообщение выводится в область просмотра, по умолчанию это весь экран */ outtextxy(0,0,"



Setvisua



     setvisualpage

Функция Устанавливает номер видимой страницы графической памяти.

Синтаксис #include

void far setvisualpage(int page);

Файл, содержащий graphics.h прототип

Описание setvisualpage делает page видимой графической страницей.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main(void) { /* Выбрать драйвер и режим, которые поддерживают несколько страниц */ int graphdriver = EGA, gmode = EGAHI, errorcode; int x,y,ht;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"\\tc");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } x = getmaxx() / 2; y = getmaxy() / 2; ht = textheight("W"); /* выбрать для вывода невидимую в настоящий момент страницу */ setactivepage(1); /* нарисовать на ней линию */ line(0,0,getmaxx(),getmaxy()); /* вывести сообщение на страницу #1 */ settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(x,y,"This is page #1"); outtextxy(x,y+ht,"Press any key to halt"); /* выбрать для вывода страницу 0 */ setactivepage(0); /* вывести текст на страницу 0 */ outtextxy(x,y,"This is page #0"); outtextxy(x,y+ht,"Press any key to view page #1"); getch(); /* сделать страницу 1 видимой */ setvisualpage(1);

/* очистка */ getch(); closegraph(); return 0; }



Setwrite



     setwritemode

Функция Устанавливает режим для вывода вграфическом режиме.

Синтаксис #include

void far setwritemode(int mode);

Файл, содержащий graphics.h прототип

Описание Определены следующие константы:

COPY_PUT = 0 /* MOV */ XOR_PUT = 1 /* XOR */

Каждая константа связана с двоичной операцией, выполняемый над байтом в строке и соответствующим байтом на экране. COPY_PUT использует ассемблер- ную команду MOV для перзаписи строки независимо от того, что на экране. XOR_PUT использует коман- ду XOR для комбинирования содержимого строки и экрана. Две последовательно выполненные команды XOR приведут к уничтожению строки и восстановле- нию первоначального изображения на экране.

Замечание. setwritemode работает только с line, linerel, lineto, rectangle и drawpoly.

Возвращаемое Нет. значение

Переносимость Функция уникальна для Turbo C++. Она работает только на компьютерах IBM PC и совместимых с ни- ми, оснащенных дисплейными адаптерами, поддержи- вающими графический режим.

Смотрите также

Пример:

#include

#include

#include

#include

int main() { /* Запрос автоопределения */ int graphdriver = DETECT, gmode, errorcode; int xmax,ymax;

/* инициализация графики и локальных переменных */ initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */ errorcode = graphresult(); if(errorcode != grOk) /* если ошибка */ { printf("Ошибка :%s\n",grapherrormsg(errorcode)); printf("Для останова нажмите любую клавишу\n"); getch(); exit(1); /* завершение с кодом ошибки */ } xmax = getmaxx(); ymax = getmaxy(); /* выбрать режим XOR */ setwritemode(XOR_PUT); /* нарисовать линию */ line(0,0,xmax,ymax); getch(); /* стереть линию, нарисовав ее же, поверх существующей */ line(0,0,xmax,ymax); getch(); /* выбрать режим COPY */ setwritemode(COPY_PUT); /* нарисовать линию */ line(0,0,xmax,ymax); /* очистка */ getch(); closegraph(); return 0; }



Signal



     signal

Функция Определяет действия по обработке сигналов.

Синтаксис #include

void (*signal(int sig, void (*func) (int sig [, int subcode])))(int);

Файл, содержащий signal.h прототип

Описание signal определяет как реагировать на сигнал, с но- мером sig. Вы можете загрузить свою программу об- работки сигнала или использовать две предопреде- ленные подпрограммы, описанные в signal.h. Это следующие: -------------------------------------------------- Номер ф-ции Значение -------------------------------------------------- SIG_DFG Завершить выполнение программы SIG_IGN Игнорировать сигнал этого типа SIG_ERR Определяет ошибку, возвращае- мую signal -------------------------------------------------- Имеются предопределенные типы сигналов: -------------------------------------------------- Тип сигнала Значение -------------------------------------------------- SIGABRT Ненормальное завершение. Действие по умолчанию эквивалентно _exit(3). SIGFPE Арифметическая ошибка, возникаю- щая при делении на 0, неверной операции и т.п. Действие по умолчанию эквивалентно _exit(1). SIGILL Неверная операция. Действие по умолчанию эквивалентно _exit(1). SIGINT Прерывание по Ctrl-C. Действие по умолчанию INT 23H. SIGSEGV Неверное обращение к памяти. Действие по умолчанию экви- валентно _exit(1). SIGTERM Требование завершения программы. Действие по умолчанию экви- валентно _exit(1). --------------------------------------------------

В signal.h определен тип, названный sig_atomic_t, максимальный целый тип, который процессор может автоматически запоминать при асинхронном прерыва- нии (для семейства 8086 это 16-ти битовое слово, целое значение для Turbo C++).

Когда функцией raise генерируется сигнал и в слу- чае внешнего события, то присходит следующее:

1. Если загружена программа пользователя для об- работки этого сигнала, то действие для сигнала устанавливается в SIG_DFL. 2. Вызывается подпрограмма пользователя для обра- ботки этого сигнала.

Подпрограмма пользователя может завершаться прос- тым return или abort, _exit, exit или longjmp.


В Turbo C++ введено расширение стандарта ANSI C, для сигналов типов SIGFPE, SIGSEGV и SIGILL. Пользовательская функция обработки сигнала вызы- вается с двумя или одним дополнительными парамет- рами. Если с помощью raise был выдан сигнал SIGFPE, SIGSEGV или SIGILL, то функция вызывается с одним дополнительным параметром, целым, опреде- ляющим что программа обработки сигнала вызвана. Точные активизационные значения для этих сигналов следующие (определены в float.h): -------------------------------------------------- Тип сигнала Активизационное значение -------------------------------------------------- SIGFPE FPE_EXPLICITGEN SIGSEGV SEGV_EXPLICITGEN SIGILL ILL__EXPLICITGEN --------------------------------------------------

Если вызывается SIGSPE при появлении исключитель- ной ситуации связанной с операциями над числами с плавающей точкой, то подпрограмма пользователя вызывается с дополнительным параметром определяю- щим FPE_xxx тип сигнала. Если вызываеются сигналы SIGILL, SIGSEGV или целочисленный вариант SIGFPE (FPE_INTOVFLOW или FPE_INTDIV0), в результате ис- ключительной ситуации процессора, то программа обработки сигнала, определнная пользователем, вы- зывается с двумя параметрами:

1. Тип исключительной ситуации SIGFPE, SIGSEGV или SIGILL (смотри float.h, в котором приве- денв все типы). Первый параметр это обычный тип сигнала, определенный в ANSI C.

2. Целый указатель на программы обработки преры- вания, которая вызвала эту программу обработки сигналов. Он указывает на список регистров процессора, которые были сохранены при возник- новении исключительной ситуации. Регистры сох- раняют в том же порядке, что и параметры прог- рамм обработки прерываний: BP, DI, SI, DS, ES, DX, CX, BX, AX, IP, CS, FLAGS. Для изменения содержимого регистра при возврате управления, измените значение в этом списке. К примеру, для получения нового значения SI сделайте при- мерно следующее:

*((int*)list_pointer+2) = new_SI_value

Таким образом вы получаете доступ к регистрам. (Смотри пример 2).



Могут возникнуть или быть сгенерированы следующие типы сигналов. Они соответствуют исключительным ситуациям, которые может распознавать 8087, типа "Деление целого на 0" и "переполнение при преры- вании". Они объявлены в файле float.h -------------------------------------------------- Сигнал SIGFPE Значение -------------------------------------------------- FPE_INTOVFLOW Запущен INTO с установленным флагом OF FPE_INTDIV0 Деление целого на 0 FPE_INVALID Неверная операция FPE_ZERODIVADE Деление на 0 FPE_UNDERFLOW Выход за нижнюю границу FPE_OVERFLOW Переполнение FPE_INEXACT Точность FPE_EXPLICITGEN Запускается программа пользова- теля raise(SIGFPE) --------------------------------------------------

Замечание: сигналы FPE_INTOVFLOW и FPE_INTDIV0 генерируются при целочисленных операциях, а ос- тальные при операциях над числами с плавающей точкой. Исключительные ситуации при работе с чис- лами с плавающей точкой генерируются в зависимос- ти от слова управления сопроцессором, которое можно изменить с помощью _control87. Ненормальные ситуации обрабатываются Turbo C++ и не передаются программе обработки сигналов.

Могут появиться следующие сигналы SIGSEGV: -------------------------------------------------- Сигнал SIGSEGV Значение -------------------------------------------------- SEGV_BOUND Выход за границы SEGV_EXPLICITGEN вызвана raise(SIGSEGV) --------------------------------------------------

Замечание: Процессоры 8088 и 8086 не имеют коман- ды bound. 186, 286, 386 и NEC V серии имеют эту команду. Т.о. при работе с 8088 и 8086 сигнал SEGV_BOUND возникнуть не может. Turbo C++ не ис- пользует эти команды, однако они могут появиться во встроенном коде или в ассемблерных подпрограм- мах, с которыми ваша программа компонуется.

Могут возникнуть следующие сигналы SIGILL:

-------------------------------------------------- Сигнал SIGILL Значение -------------------------------------------------- ILL_EXECUTION Попытка неверной операции ILL_EXPLICITGEN вызов raise(SIGILL) --------------------------------------------------



Замечание: 8088, 8086, NEC V20 и NEC V30 не имеют исключительной ситуации по неверной инструкции. 186, 286, 386, NEC V40 и NEC V50 имеют эту ситуа- цию. Т.о. при работе с процессорами 8088, 8086, NEC V20 и NEC V30 сигнал типа ILL_EXECUTION воз- никнуть не может.

Замечание. Если тип сигнала SIGFPE, SIGSEGV или SIGILL, то возврат из программы обработки сигнала не желателен, т.к. состояние 8087 нарушено, ре- зультат целочисленного деления неверен, возникло переполнение, граничная операция ошибочна, или была попытка выполнить несуществующую операцию. Возврат может происходить только в том случае, если программа обработки сигналов изменила регис- тры так, что существует корректный контекст возв- рата, или если сигнал был генерирован с помощью raise, напрмер FPE_EXPLICITGEN, SEGV_EXPLICITGEN или ILL_EXPLICITGEN. В основном, в этом случае нужно печатать сообщение и завершать выполнение программы с помощью _exit, exit или abort. Если возврат осуществляется при другом состоянии, то в этом случае результаты дальнейшей работы програм- мы непредсказуемы.

Возвращаемое При успешном завершении signal возвращае указатель значение на старую программу обработки сигнала для данного типа сигналов. При ошибке signal возвращает SIG_ERR и присваивает переменной errno значение EINVAR.

Переносимость signal поддерживается стандартом ANSI C.

Смотрите также 7,

Пример:

/* В этом примере загружается программа обработки сигнала, возникающего при нажатии Ctrl-Break */

#include

#include

#include

void Cather(int sig) { printf("\n Теперь программа обработки Break"); exit(1); }

int main(void) { signal(SIGINT,Cather); for(;;) printf("\n Сейчас основная программа \n"); }

Пример 2:

/* В этом примере загружается программа обработки сигналов SIGFPE, которая отлавливает состояние переполнения при выполнении целочисленных опе- раций, восстанавливает нормальное значение в АХ и возвращает управление */

#pragma inline #include

#include

void Catcher(int sig, int type, int *reglist) { printf("Поймал!\n"); *(reglist+8)=3; /* AX = 3 */ }

int main(void) { signal(SIGFPE,Catcher); asm mov ax,07FFFH /* AX = 32767 */ asm inc ax /* вызвать перепол- нение */ asm into /* активизировать программу */

/* при возврате управления программа обработки сигнала заносит в AX значение 3. Если этого не сделать, то в следующей операции опять вызовет into (после dec) */

asm dec ax /* нет перепол. */ asm into /* не активизир. */ }


Sin



     sin

Функция Вычисляет синус.

Синтаксис Вещественная версия Комплексная версия #include #include

double sin(double x); complex sin(complex x);

Файл, содержащий Вещественная версия Комплексная версия прототип math.h complex.h

Описание sin вычисляет синус х. Угол задается в радианах.

Обработку ошибок для sin можно изменить с помошью функции matherr.

Синус комплексного числа определен следующим об- разом:

sin(z)=(exp(i*z)-exp(-i*z))/(2i)

Возвращаемое Вещественная версия sin возвращает значение в диа- значение пазоне от -1 до 1. Управление ошибками для этой функции можно изменить с помощью функции matherr.

Переносимость sin поддерживается в системах UNIX и определена в ANSI C. Комплексная версия требует С++ и скорее всего непереносима.

Смотрите также ,

Пример:

#include

#include

int main(void) { double result; double x = 0.5; result = sin(x); printf("Синус от %1f равен %1f\n",x,result); return 0; }



Sinh



     sinh

Функция Вычисляет гиперболический синус.

Синтаксис Вещественная версия Комплексная версия #include #include

double sinh(double x); complex sinh(complex x);

Файл, содержащий Вещественная версия Комплексная версия прототип math.h complex.h

Описание Вычисляет гиперболический синус: (e^x-e^-x)/2.

Обработку ошибок для sinh можно изменить с по- мошью функции matherr.

Гиперболический синус комплексного числа опреде- лен следующим образом:

sinh(z)=(exp(z)-exp(-z))/2

Возвращаемое sinh возвращает гиперболический синус от x. значение В случае переполнения sinh возвращает значение HUGE_VAL с сответствующим знаком, и errno уста- навливается в ERANGE.

Переносимость sinh поддерживается в системах UNIX и определена в ANSI C. Комплексная версия требует С++ и скорее всего непереносима.

Смотрите также ,

Пример:

#include

#include

int main(void) { double result; double x = 0.5; result = sinh(x); printf("Гиперболический синус от %1f равен %1f\n",x,result); return 0; }



Sleep



     sleep

Функция Замораживает выполнение программы на заданный интервал.

Синтаксис #include

void sleep(unsigened seconds);

Файл, содержащий dos.h прототип

Описание При вызове функции sleep выполнение программы замо- раживается на время (в секундах), заданное пара- метром seconds. Точность интервала соблюдается до сотых долей секунды, или ориентиром точности мо- гут служить внутренние "тики" DOS, в зависимости от того, что является более точным.

Возвращаемое Нет. значение

Переносимость Поддерживается на системах UNIX.

Смотрите также

Пример:

#include

#include

int main(void) { int i; for(i=1; i



Sopen



     sopen

Функция Открывает разделяемый файл.

Синтаксис #include

#include

#include

#include

int sopen(char *path, int access, int shflag, int mode);

Файл, содержащий io.h прототип

Описание Функция sopen открывает файл, имя которого опреде- лено параметром path, и подготавливает его к пос- ледующим разделяемым операциям чтения и/или запи- си, в зависимости от параметров access, shflag и mode.

sopen это макро, определенное следующим образом:

open(path, (access) | (shflag), mode)

Для функции sopen параметр access конструируется путем логического побитового сложения флагов, пе- речисленных в двух следующих списках. Из первого списка может быть использован только один флаг; остальные флаги могут применяться в любых логи- ческих комбинациях.

Список 1: флаги чтения/записи.

O_RDONLY открытие только для чтения. O_WRONLY открытие только для записи. O_RDWR открытие для чтения и записи.

Список 2: остальные флаги доступа.

O_NDELAY Не используется; для совместимости с системой UNIX. O_APPEND Если флажок установлен, то перед каждой операцией записи, указатель файла бу- дет устанавливаться на конец файла. O_CREAT Если файл существует, этот флажок не имеет никакого значения. Если файл не существует, он будет создан, и биты из аргумента mode будут использованы для установки битов-атрибутов файла, как и в функции chmod. O_TRUNC Если файл существует, его длина усека- ется до 0. Атрибуты файла остаются не- изменными. O_EXCL Используется только вместе с O_CREAT. Если файл уже существует, то происходит возврат по ошибке. O_BINARY Данный флаг может быть установлен для гарантированного открытия файла в двоичном режиме. O_TEXT Данный флаг может быть установлен для гарантированного открытия файла в текс- товом режиме.

Эти константы (O_...) определены в файле fcntl.h.

Если ни O_BINARY, ни O_TEXT не указаны, файл отк- рывается в режиме трансляции, соответственно гло- бальной переменной _fmode.

Если в построении параметра access участвует флаг O_CREAT, вам необходимо указать аргумент mode из следующих символических констант, определенных в файле sys\stat.h. -------------------------------------------------- Значение параметра Возможности доступа mode -------------------------------------------------- S_IWRITE Разрешение на запись. S_IREAD Разрешение на чтение. S_IREAD/S_IWRITE Разрешение на чтение/запись. --------------------------------------------------


shflag определяет тип разделения файла, определя- емого параметром path. Символические константы для shflag определены в файле share.h. -------------------------------------------------- Значение shflag Что он делает -------------------------------------------------- SH_COMPAT Устанавливает режим совместимос- ти SH_DENYRW Запрещает доступ для чтения и записи SH_DENYWR Запрещает доступ для записи SH_DENYRD Запрещает доступ для чтения SH_DENYNONE Разрешает доступ для чтения и записи SH_DENYNO Разрешает доступ для чтения и записи --------------------------------------------------

Возвращаемое При успешном завершении sopen возвращает целое значение неотрицательное число handle - логический номер открытого файла. Указатель файла (указатель теку- щей позиции) устанавливается на начало файла. При ошибке функция возвращает значение -1, и перемен- ная errno получает одно из следующих значений:

ENOENT - Маршрут или имя файла не найдены; EMFILE - Слишком много открытых файлов; EACCES - Доступ запрещен; EINVACC - Неверный код доступа.

Переносимость Функция sopen поддерживается на системах UNIX. На версии 7 системы UNIX мнемоника O_тип не опре- делена. Система UNIX SYSTEM 3 пользуется всеми мнемониками O_тип за исключением O_BINARY.

Смотрите также

Пример:

#include

#include

#include

#include

#include

#include

int main(void) { int handle; int status; handle = sopen("c:\\autoexec.bat",O_RDONLY,SH_DENYNO,S_IREAD); if(!handle) { printf("Ошибка sopen\n"); exit(1); } status = access("c:\\autoexec.bat",6); if(status == 0) printf("Разрешены чтение/запись\n"); else printf("Чтение/запись запрещены\n"); close(handle); return 0; }


Sound



     sound

Функция Запускает встроенный динамик PC на генерацию зву- ка указанной частоты.

Синтаксис #include

void sound(unsigned frequency);

Файл, содержащий dos.h прототип

Описание sound запускает встроенный динамик на генерацию звука указанной частоты. Частота определяется па- раметром frequency (в Герцах, т.е. циклах в се- кунду). Для выключения динамика, включенного фун- кцией sound, воспользуйтесь функцией nosound.

Переносимость sound работает только на компьютерах, совместимых с IBM PC. Соответствующая функция есть в Turbo Pascal.

Смотрите также

Пример:

/* Звук частотой 7 Гц в течении 10 секунд Возможно ваш РС не способен генерировать такой звук */

int main(void) { sound(7); delay(10000); nosound(); }



Spawn



     spawn

Функция Создает и запускает дочерний процесс.

Синтаксис #include

#include

int spawnl(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnle(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnlp(int mode, char *pathname, char *arg0, arg1,...,argn, NULL); int spawnlpe(int mode, char *pathname, char *arg0, arg1,...,NULL, char *envp[]); int spawnv(int mode, char *pathname, char*argv[]); int spawnve(int mode, char *pathname, char *argv[], char *envp[]); int spawnvp(int mode, char *pathname, char *argv[]); int spawnvpe(int mode, char *pathname, char *argv[], char * envp[]);

Файл, содержащий process.h прототип

Описание Функции семейства spawn... создают и запускают другие программные файлы, известные под названием "дочерний процесс". Для загрузки и выполнения до- чернего процесса должно быть достаточно памяти.

Значение параметра mode влияет на то, каким обра- зом материнский процесс продолжит свои действия после вызова функции spawn... . Далее перечислены возможные значения аргумента mode:

P_WAIT Ставит родительский процесс в состояние ожидания до тех пор, пока дочерний процесс не завершится.

P_NOWAIT Продолжает работу родительского процесса одновременно с работой дочернего процес- са.

P_OVERLAY Перекрывает дочерним процессом область памяти первоначально занятую родитель- ким процессом. Работает аналогично вы- зову функции exec... .

Примечание. Значение P_NOWAIT в данной версии не поддерживается; использование его приведет к ошибке.

Аргумент pathname представляет собой имя файла дочернего процесса. Функции семейства spawn... осуществляют поиск файла с данным именем, пользу- ясь следующим стандартным алгоритмом DOS:

- Нет расширения или нет точки; осуществляется поиск по точному имени файла, если по такому имени файл не найден, добавляется .COM, и поиск производится снова, если опять не найден, то добавляет .EXE и поиск повторяется;

- Расширение имени присутствует; поиск произво- дится только по точному имени файла;


- Точка присутствует; поиск производится только по имени файла - без расширения.

- Если path не содержит имени директории, то фун- кции spawn... с суффиксом p производят поиск в текущей директории, а затем в директориях, ука- занных в переменной окружения PATH.

Суффиксы, добавляемые к имени функции spawn... (l, v, p, e) отражают некоторые особенности рабо- ты функций:

p - означает, что функция будет искать дочерний процесс в директориях, определяемых перемен- ной операционной среды системы DOS-PATH. Без задания суффикса p функция будет искать файл только в текущей рабочей директории.

l - означает, что аргументы-указатели arg0, arg1, ... argn передаются, как отдельные аргументы. Обычно, суффикс l применяется, когда количес- тво передаваемых аргументов известно заранее.

v - означает, что аргументы-указатели передаются в виде массива указателей: argv[0], ...argv[n]. Обычно суффикс v употребляется при переменном числе аргументов.

e - обозначает, что дочернему процессу может быть передан аргумент envp, что позволяет менять операционную среду дочернего процесса. Без суффикса e дочерний процесс наследует опера- ционную среду родительского процесса.

Каждая функция семейства spawn... должна иметь один из двух суффиксов l или v. Суффиксы p и e необязательны.

Например:

- функция с именем spawnl - это функция семейства spawn..., принимающая отдельные аргументы, осу- ществляющая поиск файла дочернего процесса в корневой или рабочей директории и передающей дочернему процессу операционную среду родитель- ского процесса.

- Функция spawnvpe - это функция семейства spawn..., которая принимает массив аргумен- тов-указателей, применяет параметр среды PATH для поиска файла дочернего процесса и передает ему параметр envp, позволяющий ему изменить свою операционную среду.

Функции семейства spawn... должны передавать до- чернему процессу по крайней мере один аргумент (arg0 или argv[0]). По соглашению данным аргумен- том является копия параметра pathname. (Использо- вание для данного нулевого аргумента других зна- чений не вызовет ошибку). В версиях операционной системы DOS 3.0 и выше поддерживается аргумент pathname. В более ранних версиях не может использоваться значение нулевого аргумента (arg0 или argv[0]).



При использовании суффикса l arg0 обычно адресует pathname, а остальные аргументы arg1,...,argn яв- ляется указателями на символьные строки, реально составляющие список аргументов. Обязательный ад- ресный нуль NULL завершает список аргументов.

При использовании суффикса e, список новых назна- чений операционной среды передается посредством аргумента envp. Данный аргумент представляет со- бой массив указателей, где каждый элемент указы- вает на символьную строку с нулевым окончанием в форме:

envvar = value,

где envvar - это имя переменной операционной сре- ды, а value - это строковое, значение, присваива- емое переменной envvar. Последним элементом мас- сива envp[] является NULL. Когда envp[0] равно NULL, дочерний процесс наследует назначения среды родительского процесса.

Общая длина списка arg0+arg1+...+argn (или argv[0]+argv[1]+...+argv[n]), включая пробелы, разделяющие аргументы, должна быть

#include

#include

int main(void) { int result; clrscr(); result = spawnl(P_WAIT,"tcc.exe",NULL); if(result==-1) { perror("Ошибка spawnl"); exit(1); } return 0; }

Пример 2:

#include

#include

#include

int main(void) { int result; clrscr(); result = spawnle(P_WAIT,"tcc.exe",NULL,NULL); if(result==-1) { perror("Ошибка spawnle"); exit(1); } return 0; }


Sprintf



     sprintf

Функция Производит форматированный вывод в строку.

Синтаксис #include

int sprintf(char *buffer, const char *format[, argument,...]);

Файл, содержащий stdio.h прототип

Описание sprintf получает набор аргументов, применяет к каждому спецификацию формата, содержащуюся в строке формата (format) и выводит сформатирован- ные данные в строку.

sprintf применяет к первому аргументу первую спе- цификацию формата, ко второму - вторую, и т.д. Число спецификаций формата должно соответствовать числу аргументов.

Описание спецификаций формата приведено в разделе посвященном функции printf.

Возвращаемое sprintf возвращает число выведенных байт. Завер- значение шающий нулевой байт не считается. При возникнове- нии ошибки sprintf возвращает EOF.

Переносимость sprintf поддерживается в системах UNIX и стандар- том ANSI C. Определена в стандарте Kernighan & Ritchie.

Смотрите также

Пример:

#include

#include

int main(void) { char buffer[80]; sprintf(buffer,"Аппроксимация Pi = %f\n",M_PI); puts(buffer); return 0; }



Sqrt



     sqrt

Функция Для вещественного аргумента вычисляет квадратный корень.

Синтаксис Вещественная версия Комплексная версия #include #include

double sqrt(double x); complex sqrt(complex x);

Файл, содержащий Вещественная версия Комплексная версия прототип math.h complex.h

Описание sqrt вычисляет положительный квадратный корень от параметра x.

Обработку ошибок для sqrt можно изменить с по- мощью функции matherr.

Для комплексного числа x, sqrt(x) дает комплекс- ный корень, чей аргумент arg, это arg(x)/2;

Комплексный квадратный корень определяется следу- ющим образом:

sqrt(z)=sqrt(abs(z))(cos(arg(z)/2)+isin(arg(z)/2))

Возвращаемое При успешном завершении sqrt возвращает вычислен- значение ное значение: положительный квадратный корень от x.

Если x отрицательно, то переменной errno присваи- вается значение:

EDOM - Ошибка области определения

и возвращает значение 0.

Переносимость sqrt поддерживается в системах UNIX и определена в ANSI C. Комплексная версия требует С++ и непере- носима.

Смотрите также

Пример:

#include

#include

int main(void) { double result; double x = 0.4; result = sqrt(x); printf("Корень квадратный от %1f равен %1f\n",x,result); return 0; }



Srand



     srand

Функция Инициализирует генератор случайных чисел.

Синтаксис #include

void srand(unsigned seed);

Файл, содержащий stdlib.h прототип

Описание Генератор случайных чисел инициализируется с по- мощью вызова функции srand с аргументом 1. Уста- новить новую начальную точку можно указав в ка- честаргумента соответствующее значение.

Возвращаемое Нет. значение

Переносимость srand доступна в системах UNIX и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

#include

int main(void) { int i; time_t t; srand((unsigned)time(&t)); printf("10 случайных чисел от 0 до 99 \n\n"); for (i=0; i



Sscanf



     sscanf

Функция Выполняет форматированный ввод из строки.

Синтаксис #include

int sscanf(const char *buffer, const char *format[, adress,...]);

Файл, содержащий stdio.h прототип

Описание Функция sscanf просматривает набор входных полей, по одному символу, считывая их из строки. Затем каждое поле форматируется в соответствии со спе- цификацией формата, посылаемой sscanf через аргу- мент format. В конце sscanf сохраняет введенные отформатированные поля по адресам, посылаемым в качестве аргументов после format. Число аргумен- тов должно соответствовать числу спецификаций формата.

Описание спецификаций формата приведено в разделе посвященном функции scanf.

sscanf заканчивает просмотр поля перед достижени- ем нормального символа конца поля (пробелб, табу- ляция) или вообще окончить просмотр строки по не- которым причинам. Смотри scanf.

Возвращаемое sscanf возвращает число, соответствующее числу ус- значение пешно обработанных полей, это число не включает в себя поля, которые былы обработаны но не сохране- ны.При попытке чтения за концом строки sscanf возвращает EOF. Если ни одно поле не было сохра- нено, то функция возвращает 0.

Переносимость sscanf доступна в системах UNIX и поддерживается стандартом ANSI C. Она определена в Керниган и Ричи.

Смотрите также

Пример:

#include

char buffer[] = "a 3.14159 12 a-string\n";

int main(void) { char ch; float f; int i; char string[20]; sscanf(buffer,"%c %f %d %s",&ch,&f,&i,string); printf("%c %f %i %s",ch,f,i,string); return 0; }



Stat



     stat

Функция Получает информацию о файле.

Синтаксис #inslude

int stat(char *path, struct stat *buff);

Файл, содержащий sys\stat.h прототип

Описание Функция stat записывает информацию о файле (или директории) в структуре stat.

Аргумент buff адресует структуру stat (определен- ную в файле sys\stat.h). Структура содержит сле- дующие поля:

st_mode битовая маска, дающая информацию о режиме открытия файла.

st_dev идентификатор дисковода содержащего файл.

st_rdev также, как и st_dev.

st_nlink присваевается целая константа 1.

st_size размер открытого файла в байтах.

st_atime ближайшее время открытия файла, во время которого он был модифицирован.

st_mtime также, как и st_atime.

st_ctime также, как и st_atime.

Структура stat содержит на три поля больше, чем перечислено выше, но они содержат данные, которые под управлением MS-DOS не имеют значения.

Битовая маска, дающая информацию о режиме откры- того файла, содержит следующие биты:

Один из следующих битов должен быть выставлен:

/* прим. пер. в S_IFCHR установлен, если параметр handle указывает оригинале нет: */ на устройство (fstat);

S_IFREG установлен, если обычный файл определяет- ся параметром handle (fstat),или парамет- ром path (stat).

S_IFDIR установлен, если параметр path определяет директорию (stat);

Один или оба следующих бита должны быть выставле- ны:

S_IWRITE установлен, если пользователь имеет раз- решение на запись;

S_IREAD установлен, если пользователь имеет раз- решение на чтение.

Для функции stat битовая маска содержит также би- ты пользовательского выполнения; они устанавлива- ются в соответствии с расширением имени открытого файла. Битовая маска также имеет биты чтения/за- писи, они устанавливаются в соответствии с режи- мом доступа к файлу.

Возвращаемое Если информация об открытом файле была успешно по- значение лучена, функция возвращает 0. В случае ошибки (невозможно получить информацию), функция возвра- щает значение -1 и устанавливает переменную errno.


ENOENT - Файл или маршрут не найдены.

Переносимость stat доступна в системах UNIX и поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

#include

#define FILENAME "TEST.$$$"

int main(void) { struct stat statbuf; FILE *stream; /* открыть файл для изменения */ if((stream = fopen(FILENAME,"w+")) == NULL) { fprintf(stderr,"Не могу открыть файл.\n"); return 1; } /* получить информацию о файле */ stat(FILENAME,&statbuf); fclose(stream); /* вывести полученную информацию */ if(statbuf.st_mode & S_IFCHR) printf("Это устройство\n"); if(statbuf.st_mode & S_IFREG) printf("Это файл\n"); if(statbuf.st_mode & S_IREAD) printf("Разрешение на чтение\n"); if(statbuf.st_mode & S_IWRITE) printf("Разрешение на запись"); printf("Метка диска:%c\n",'A'+statbuf.st_dev); printf("Размер в байтах: %ld\n",statbuf.st_size); printf("Время последнего открытия: %s\n", ctime(&statbuf.st_ctime)); return 0; }


Stime



     stime

Функция Устанавливает системное время и дату.

Синтаксис #include

int stime (time_t *tp);

Файл, содержащий time.h прототип

Описание stime устанавливает системное время и дату. tp указывает на значение, содержащее число секунд, прошедшее с 1 января 1970, по Гринвичискому мери- диану.

Возвращаемое stime возвращает 0. значение

Переносимость stime доступна в системах UNIX.

Смотрите также

Пример:

#include

#include

#include

int main(void) { time_t t; struct tm *area; t = time(NULL); area = localtime(&t); printf("Секунд с 1970 года: %ld\n",t); printf("Местное время %s",asctime(area)); t++; area = localtime(&t); printf("Добавили секунду: %s",asctime(area)); t += 60; area = localtime(&t); printf("Добавили минуту: %s",asctime(area)); t += 3600; area = localtime(&t); printf("Добавили час: %s",asctime(area)); t += 86400L; area = localtime(&t); printf("Добавили сутки: %s",asctime(area)); t += 2592000L; area = localtime(&t); printf("Добавили месяц: %s",asctime(area)); t += 31536000L; area = localtime(&t); printf("Добавили год: %s",asctime(area)); return 0; }



Stpcpy



     stpcpy

Функция Функция stpcpy копирует одну символьную строку в другую.

Синтаксис #include

char *stpcpy(char *dest, const char *src);

Файл, содержащий string.h прототип

Описание stpcpy копирует строку src в строку dest вплоть до нулевого символа окончания строки.

Возвращаемое stpcpy возвращает dest + strlen(src). значение

Переносимость stpcpy поддерживается на системах UNIX.

Пример:

#include

#include

int main(void) { char string[10]; char *strl = "abcdefghi"; stpcpy(string,strl); printf("%s\n",string); return 0; }



Strcat



     strcat

Функция Добавляет одну строку к другой.

Синтаксис #include

char *strcat(char *dest, char *src);

Файл, содержащий string.h прототип

Описание strcat добавляет копию одной строки к другой.

Возвращаемое strcat возвращает указатель на соединенные значение строки.

Переносимость strcat поддерживается на системах UNIX и совме- стимых с ANSI C. Она описана в Kernighan и Ritchie.

Пример:

#include

#include

int main(void) { char destination[25]; char *blank = " ", *c = "C++", *turbo = "Turbo"; strcpy(destination,turbo); strcpy(destination,blank); strcpy(destination,c); printf("%s\n",destination); return 0; }



Strchr



     strchr

Функция Ищет в строке первое появление данного символа.

Синтаксис #include

char *strchr(const char *s, int c);

Файл, содержащий string.h прототип

Описание strchr просматривает строку (с начала вперед), производя поиск на заданный символ. Функция strchr реагирует на первое появление символа c в строке s. Нулевое окончание считается частью строки, таким образом, в примере:

strchr(strs,0)

в качестве результата функции возвращается указа- тель на нулевое окончание в строке "strs".

Возвращаемое strchr возвращает указатель на первый встретив- значение шийся в строке str символ ch; если символ ch не появляется в строке str, функция strchr возвраща- ет нуль (NULL).

Переносимость strchr поддерживается на системах UNIX и совме- стимых с ANSI C. Она описана в Kernighan и Ritchie.

Смотрите также

Пример:

#include

#include

int main(void) { char string[15]; char *ptr, c = 'r'; strcpy(string,"This is a string"); ptr = strchr(string,c); if(ptr) printf("Символ %c в позиции %d\n",c,ptr-string); else printf("Символ не найден\n"); return 0; }



Strcmp



     strcmp

Функция Сравнивает одну строку с другой.

Синтаксис #include

int strcmp(char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание strncmp выполняет беззнаковое сравнение строк s1 и s2, начиная с первого символа в каждой строке и продолжая сравнение последующих символов до тех пор, пока не встретятся несовпадающие символы или строки не кончатся.

Возвращаемое strcmp возвращает следующие значения: значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Переносимость strcmp поддерживается на системах UNIX и совме- стимых с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; int ptr; ptr = strcmp(buf2,buf1); if(ptr>0) printf("buf2 больше чем buf1\n"); else printf("buf2 меньше чем buf1\n"); ptr = strcmp(buf2,buf2); if(ptr>0) printf("buf2 больше чем buf3\n"); else printf("buf2 меньше чем buf3\n"); return 0; }



Strcmpi



     strcmpi

Функция Сравнивает строки str1 и str2 без различий ре- гистров.

Синтаксис #include

int strcmpi(const char *s1,const char *s2);

Файл, содержащий string.h прототип

Описание strcmpi выполняет беззнаковое сравнение строк s1 и s2 без различий регистров (анологично stricmp выполняемой как макрокоманда).

Она возвращает значения(0) в зависимости от результата сравнения s1 (или части ее) и s2 (или части ее).

Программа strcmpi анологична stricmp. strcmpi вы- полняется через макрокоманду в string.h и перево- дит вызов с strcmpi в stricmp. Следовательно, ес- ли вы хотите использовать strcmpi, вы должны включить файл string.h , чтобы сделать доступным макрокоманду. Эта макрокоманда совместима с дру- гими компиляторами С.

Возвращаемое strcmpi возвращает следующие значения: (int) значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Смотрите также

Пример:

#include

#include

int main(void) { char *buf1 = "BBB", *buf1 = "bbb"; int ptr; ptr = strcmpi(buf2,buf1); if(ptr>0) printf("buf2 больше чем buf1\n"); if(ptr==0) printf("buf2 равен buf1\n"); if(ptr



Strcoll



     strcoll

Функция Сравнивает две строки.

Синтаксис #include

int strcoll(char *s1,char *s2);

Файл, содержащий string.h прототип

Описание strcoll выполняет сравнение строк s1 и s2 в соот- ветствии со списком, определяемом с помощью setlocale.

Возвращаемое strcoll возвращает следующие значения: значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Смотрите также

Пример:

#include

#include

int main(void) { char *two = "International"; char *one = "Borland"; int check; check = strcoll(one,two); if(check) printf("Строки равны\n"); if(check0) printf("%s идет перед %s\n",two,one); return 0; }



Strcpy



     strcpy

Функция Копирует одну строку в другую.

Синтаксис #include

char *strcpy(char *dest, const char *src);

Файл, содержащий string.h прототип

Описание stpcpy копирует байты из строки src в строку destin и останавливается после передачи нулевого окончания.

Возвращаемое strcpy возвращает dest. значение

Переносимость strcpy поддерживается на системах UNIX и совме- стима с ANSI C.

Пример:

#include

#include

int main(void) { char string[10]; char *strl = "abcdefghi"; strcpy(string,strl); printf("%s\n",string); return 0; }



Strcspn



     strcspn

Функция анализирует строку на первый сегмент, не содер- жащий любого подмножества из данного набора сим- волов.

Синтаксис include

size_t strcspn(const char*s1, const char*s2);

Файл, содержащий string.h прототип

Возвращаемое strcspn возвращает длину первого сегмента строки значение s1, который не содержит ни одного символа из имеющихся в строке s2.

Переносимость strcspn поддерживается на системах UNIX и совме- стима с ANSI C.

Смотрите также

Пример:

#include

#include

#include

int main(void) { char *string1 = "1234567890"; char *string2 = "747DC8"; int length; length = strcspn(string1,string2); printf("Строки пересекаются в позиции %d\n",length); return 0; }



Strdup



     strdup

Функция Копирует строку по новому адресу в памяти.

Синтаксис #include

char *strdup(char *s);

Файл, содержащий string.h прототип

Описание Получает дубль строки str, выделяя пaмять с помощью функции malloc. Пространство, выделенное для копии имеет длину (strlen(str)+1) байтов. Пользователь несет ответственность за освобожде- ние памяти, отведенной для strdup, когда она бо- лее не нужна.

Возвращаемое Возвращает указатель на область памяти, значение содержащую дубль строки str, или NULL, если па- мять не может быть выделена.

Переносимость strdup поддерживается на системах UNIX.

Смотрите также

Пример:

#include

#include

#include

int main(void) { char *dup_str,*string = "abcde"; dup_str = strdup(string); printf("%s\n",dup_str); free(dup_str); return 0; }



Strerror



     strerror

Функция Функция strerror возвращает указатель на строку сообщения об ошибке.

Синтаксис #include

char *strerror(int errnum);

Файл, содержащий string.h, stdio.h прототип

Описание sterror берет целый параметр errnum, номер ошиб- ки, и возвращает указатель на строку сообщения об ошибке, связанную с errnum.

Возвращаемое Функция sterror возвращает указатель на строку, в значение которой находится сконструированное сообщение. Строка строится в буфере типа static и перезапи- сывается при каждом вызове sterror.

Переносимость strerror совместима с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *buffer; buffer = strerror(errno); printf("Ошибка %s\n",buffer); return 0; }



Strftime



     strftime

Функция Форматирует для вывода время.

Синтаксис #include

size_t _cdecl strftime(char *s, size_t maxsize, const char *fmt, const struct tm *t);

Файл, содержащий time.h прототип

Описание strftime форматирует время, передаваемое в аргу- менте t в массив, передваемый в качестве аргумен- та s, в соответствии со спецификациями формата определяемыми в строке fmt. Строка формата состо- ит из набора обычных символов и директив, причем набор может быть нулевым. Аналогично printf ди- рективы состоят из символа '%', за которым следу- ет символ, определяющих подстановку, выполняемую в этом месте. Все обычные символы копируются без изменений. В s передается максимум maxsize симво- лов.

Возвращаемое strftime возвращет значение, определяющее число значение символов, помещенное в s. Если требуется помес- тить в s больше чем maxsize символов, то функция возвращает 0. -------------------------------------------------------------- Спецификатор Подстановка формата --------------------------------------------------------------- %% Символ %. %a Сокращенное название дня недели. %A Полное название дня недели. %b Сокращенное название месяца %B Полное название месяца. %c Дата и время. %d Число (01 до 31) из двух цифр. %H Час из двух цифр (00 - 23). %I Час из двух цифр (01 - 12). %j День года из трех цифр (001 - 366). %m Номер месяца из двух цифр. %M Минуты из двух цифр (00 - 59). %p AM или PM (до или после полудня). %S Секунды из двух цифр (00 - 59). %U Номер недели в году (Воскресенье первый день не- дели), (00 - 52). %w Номер дня недели, причем Воскресенье считается первым днем недели (0 - 6). %W Номер недели в году (Понедельник первый день не- дели), (00 - 52). %x Дата. %X Время. %y Год из двух цифр (без века: 00 - 99). %Y Год с веком. %Z Имя временной зоны, или ничего, если она не уста- новлена. --------------------------------------------------------------------

Переносимость strftime поддерживается стандартом ANSI C.

Смотрите также

Пример:

#include

#include

#include

int main(void)

{ struct tm *time_now; time_t secs_now; char str[80]; tzset(); time(&secs_now); time_now = localtime(&secs_now); strftime(str, 80, "Сейчас %M минут после %I (%Z) %A, %B, %d 19%y", time_now); printf("%s\n",str); return 0; }



Stricmp



     stricmp

Функция Сравнивает две строки без различий регистров.

Синтаксис #include

int stricmp(const char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание stricmp выполняет беззнаковое сравнение строк s1 и s2, начиная с первого символа в каждой строке и, продолжая сравнение последующих символов до тех пор пока не встретятся несовпадающие символы или не кончатся строки.

Сравнение не различает регистры.

Она возвращает значения(0) в зависимости от результата сравнения s1 (или части ее) и s2 (или части ее).

Программа stricmpi анологична strcmpi. strcmpi выполняется через макрокоманду в string.h и пере- водит вызов с strcmpi в stricmp. Следовательно, если вы хотите использовать strcmpi, вы должны включить файл string.h , чтобы сделать доступным макрокоманду.

Возвращаемое stricmp возвращает следующие значения: значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Пример:

#include

#include

int main(void) { char *buf1 = "BBB", *buf1 = "bbb"; int ptr; ptr = stricmp(buf2,buf1); if(ptr>0) printf("buf2 больше чем buf1\n"); if(ptr==0) printf("buf2 равен buf1\n"); if(ptr



Strlen



     strlen

Функция Вычисляет длину строки.

Синтаксис #include ; size_t strlen(const char *s);

Файл, содержащий string.h прототип

Описание strlen вычисляет длину строки s.

Возвращаемое strlen возвращает число символов в строке str, не значение считая нулевое окончание.

Переносимость strlen поддерживается на системах UNIX и опреде- лена в стандарте ANSI C.

Пример:

#include

#include

int main(void) { char *string = "Borland International"; printf("%d\n",strlen(string)); return 0; }



Strlwr



     strlwr

Функция Преобразует буквы верхнего регистра в нижний ре- гистр.

Синтаксис #include

char *strlwr(char *s);

Файл, содержащий string.h прототип

Описание strlwr преобразует буквы верхнего регистра (A-Z) строки s в буквы нижнего регистра (a-z). Других изменений не происходит.

Возвращвемое strlwr возвращает указатель на строку s. значение

Переносимость strlwr уникальна для DOS.

Cмотрите также strupr.

Пример:

#include

#include

int main(void) { char *string = "Borland Internatinal"; printf("Строка до вызова strlwr: %s\n",string); strlwr(string); printf("Строка после вызова strlwr: %s\n",string); return 0; }



Strncat



     strncat

Функция Добавляет часть одной строки к другой.

Синтаксис #include

char * strncat(char *dest, const char *src, size_t maxlen);

Файл, содержащий string.h прототип

Описание strncat копирует maxlen символов строки src в конец dest и затем добавляет нулевой символ. Мак- симальная длина результирующей строки strlen(dest)+maxlen.

Возвращаемое strncat возвращает dest. значение

Переносимость strncat поддерживается на системах UNIX и совме- стимых с ANSI C.

Пример:

#include

#include

int main(void) { char destination[25]; char *source = "States"; strcpy(destination,"United"); strncat(destination,source,7); printf("%s\n",destination); return 0; }



Strncmp



     strncmp

Функция Сравнивает часть одной строки с частью другой.

Синтаксис #include

int strncmp(const char *s1, const char *s2, size_t maxlen);

Файл, содержащий string.h прототип

Описание strncmp делает то же самое сравнение, что и функ- ция strcmp, но просматривает только maxlen симво- лов. Она начинает с первого символа в каждой строке и продолжает сравнение до тех пор пока не обнаружит несовпадающие символы или просмотрит maxlen символов.

Возвращаемое Она возвращает значения(0) в зависимости от значение результата сравнения s1 (или части ее) и s2 (или части ее).

strncmp возвращает следующие значения: < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Переносимость strncmp поддерживается на системах UNIX и совме- стимых с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; int ptr; ptr = strncmp(buf2,buf1,3); if(ptr>0) printf("buf2 больше чем buf1\n"); else printf("buf2 меньше чем buf1\n"); ptr = strncmp(buf2,buf2,3); if(ptr>0) printf("buf2 больше чем buf3\n"); else printf("buf2 меньше чем buf3\n"); return 0; }



Strncmpi



     strncmpi

Eint strcspn(char *str1, char *str2);F

Функция Сравнивает часть одной строки с частью другой без различий регистра.

Синтаксис #include

int strcmpi(const char *s1, const char *s2, size_t n);

Файл, содержащий string.h прототип

Описание strncmpi выполняет беззнаковое сравнение строк s1 и s2, максимальной длиной n байтов, начиная с первого символа в каждой строке и, продолжая сравнение последующих символов до тех пор пока не встретятся несовпадающие символы или не будет просмотрено n символов. Сравнение не чувствитель- но к регистрам. Функция strncmpi анологична strcmpi. strcmpi выполняется через макрокоманду, определенную в string.h и переводит вызов с strcmpi в stricmp. Следовательно, если вы хотите использовать strcmpi, вы должны включить файл string.h, чтобы сделать доступным макрокомнду. Эта макрокоманда совместима с другими компилято- рами С.

Возвращаемое strncmpi возвращает следующие значения: значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Пример:

#include

#include

int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strncmpi(buf2,buf1,3); if(ptr>0) printf("buf2 больше чем buf1\n"); if(ptr



Strncpy



     strncpy

Функция Копирует данное количество байтов из одной строки в другую с усечением или добавлением, если необ- ходимо.

Синтаксис #include

char *strncpy(char *dest, const char *src, int maxlen);

Файл, содержащий string.h прототип

Описание strncpy копирует точно maxlen символов из строки src в строку dest, если потребуется усекая или добавляя нули в dest. Целевая строка dest может не иметь нулевого окончания, если длина строки src - это maxlen или более.

Возвращвемое strncat возвращает dest. значение

Переносимость strncpy поддерживается на системах UNIX и совме- стимых с ANSI C.

Пример:

#include

#include

int main(void) { char string[10]; char *strl = "abcdefghi"; stpncpy(string,strl,3); printf("%s\n",string); return 0; }



Strnicpm



     strnicpm

Функция Сравнивает часть одной строки с другой, без раз- личий регистров.

Синтаксис #include

int strnicmp(const char *s1, const char *s2, size_t maxlen);

Файл, содержащий string.h прототип

Описание strnicmp выполняет знаковое сравнение s1 и s2, максимально maxlen байт, начиная с первого симво- ла в каждой строке и, продолжая сравнение после- дующих символов до тех пор пока не встретятся не- совпадающие символы или не будет достигнут конец строки. Cравнение не чувствительно к регистрам. Она возвращает значения(0) в зависимости от результата сравнения s1 (или части ее) и s2 (или части ее).

Возвращаемое strnicmp возвращает следующие значения: значение < 0 если s1 меньше s2 ==0 если s1 равно s2 > 0 если s1 больше s2

Переносимость strnicmp уникальна для DOS.

Пример:

#include

#include

int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strnicmp(buf2,buf1,3); if(ptr>0) printf("buf2 больше чем buf1\n"); if(ptr



Strnset



     strnset

Функция Изменяет заданное число символов в строке на дан- ный символ.

Синтаксис #include

char *strnset(char *s,int ch, size_t n);

Файл, содержащий string.h прототип

Описание strnset копирует в первые n байт строки s символ ch. Если n>strlen(s), то strlen(str) получает значение n. Она заканчивается, когда n символов уже установлены, или когда найден нулевой символ.

Возвращвемое strnset возвращает s. значение

Переносимость strnset уникальна для DOS.

Пример:

#include

#include

int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz"; char letter = 'x'; printf("Строка до strnset: %s\n",string); strnset(string,letter,13); printf("Строка после strnset: %s\n",string); return 0; }



Stroul



     stroul

Функция strtoul преобразует строку в длинное беззнаковое целое значение по заданному основанию radix.

Синтаксис #include

unsigned long strtoul(const char *s, char **endptr,int radix);

Файл, содержащий stdlib.h прототип

Описание stroul анологична strol за исключением того, что она преобразует строку в беззнаковое длинное це- лое значение, а функция strol в длинное целое. Для более подробной информации обратитесь к опи- санию функции strol.

Возвращаемое stroul возвращает беззнаковое целое значение преоб- значение разованной строки или 0 в случае ошибки.

Переносимость strtoul совместима с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char *string = "87654321", *endptr; unsigned long lnumber; lnumber = strtoul(string,&endptr,10); printf("Строка: %s, число: %lu\n",string,lnumber); return 0; }



Strpbrk



     strpbrk

Функция Ищет в строке первое появление любого символа из заданного набора.

Синтаксис #include

char *strpbrk(const char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание strpbrk просматривает строку s1 в поисках перво- го появление любого символа, имеющегося в строке s2.

Возвращвемое strpbrk возвращает указатель на первое появление значение в строке s1 любого символа из строки s2, если таких символов в строке s1 нет, возвращается зна- чение NULL.

Переносимость strpbrk поддерживается на системах UNIX и совме- стимых с ANSI C.

Пример:

#include

#include

int main(void) { char *string1 = "abcdefghijklmnopqrstuvwxyz"; char *string2 = "onm"; char *ptr; strpbrk(string1,string2); if(ptr) printf("strpbrk нашла первый символ %c\n",*ptr); else printf("strpbrk не нашла символов в строке.\n"); return 0; }



Strrchr



     strrchr

Функция Ищет в строке последнее появление данного символа.

Синтаксис #include

char *strrchr(char *s, int c);

Файл, содержащий string.h прототип

Описание Просматривает строку в обратном направлении, осу- ществляя поиск заданного символа. strrchr находит последнее появление символа c в строке s. Нулевой символ завершения строки считается частью строки.

Возвращаемое Возвращает указатель на последнее появле- значение ние символа c в строке str. Если символ c не найден, возвращается NULL.

Переносимость strrchr поддерживается на системах UNIX и совме- стимых с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char string[15]; char *ptr, c = 'r'; strcpy(string,"This is a string"); ptr = strrchr(string,c); if(ptr) printf("Символ %c в позиции %d\n",c,ptr-string); else printf("Символ не найден\n"); return 0; }



Strrev



     strrev

Функция Обращает (переворачивает) строку.

Синтаксис #include

char *strrev(char *s);

Файл, содержащий string.h прототип

Описание strrev переворачивает (то есть записывает с конца в обратном порядке) все символы в строке, (исклю- чая нулевое окончание). (Например она изменит строку string\0 на строку gnirts\0).

Возвращаемое strrev возвращается указатель на перевернутую значение строку. Ошибочного завершения не бывает.

Переносимость strrev уникальна для DOS.

Пример:

#include

#include

int main(void) { char *forward = "string"; printf("Перед strrev: %s\n",forward); strrev(forward); printf("После strrev: %s\n",forward); return 0; }



Strset



     strset

Функция Устанавливает все символы в строке s равными ука- занному символу.

Синтаксис #include

char *strset(char *s, int ch);

Файл, содержащий string.h прототип

Описание strset устанавливает все символы в строке s в символ ch. Она заканчивается, когда найден нуле- вой символ завершения строки.

Возвращвемое strset возвращает s. значение

Переносимость strset уникальна для DOS.

Смотрите также

Пример:

#include

#include

int main(void) { char string[10] = "123456789"; char symbol = 'c'; printf("Перед strset: %s\n",string); strset(string,symbol); printf("После strset: %s\n",string); return 0; }



Strspn



     strspn

Функция Ищет в строке первый сегмент, являющийся подмно- жеством данного набора символов.

Синтаксис #include

size_t strspn(const char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание strspn находит первый сегмент строки s1, который полностью состоит из символов строки s2.

Возвращаемое strspn возвращает длину первого сегмента строки значение s1, который целиком состоит из символов строки str2.

Переносимость strspn поддерживается на системах UNIX и совме- стима с ANSI C.

Пример:

#include

#include

#include

int main(void) { char *string1 = "1234567890"; char *string2 = "123DC8"; int length; length = strspn(string1,string2); printf("Строки отличаются с позиции: %d\n",length); return 0; }



Strstr



     strstr

Функция Ищет в строке данную подстроку.

Синтаксис #include

char *strstr(const char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание strstr просматривает s1 на первое появление подстроки s1.

Возвращаемое strstr возвращает указатель на элемент в s1, с значение которого начинается подстрока s2. (Указатель на s2 в s1). Если s1 не содержит s2, функция возвращает NULL.

Переносимость strstr поддерживается на системах UNIX и совме- стима с ANSI C.

Пример:

#include

#include

int main(void) { char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1,str2); printf("Подстрока: %s\n",ptr); return 0; }



Strtod



     strtod

Функция Преобразует строку в число двойной точности.

Синтаксис #include

double strtod(const char *s, char **endptr);

Файл, содержащий string.h прототип

Описание strtod преобразует символьную строку s в число двойной точности. Строка s - это последователь- ность символов, которая может быть интерпретиро- вана, как значение двойной точности; Символы дол- жны соответствовать следующему формату:

[ws] [sn] [ddd] [.] [ddd] [fmt[sn]ddd], где

[ws] - необязательный незначащий символ пробела; [sn] - необязательный знак (+ или -); [ddd] - необязательные цифры; [fmt] - необязательные символы e или E; [.] - необязательная десятичная точка.

strtod также распознает +INF и -INF как плюс и минус бесконечность, и +NAN и -NAN как не число.

В качестве примера ниже приведены некоторые сим- вольные строки, которые функция strtod может кон- вертировать в число двойной точности:

+1231.1981 е-1 502.85Е2 -2010.952

strtod прекращает чтение строки на первом встре- тившемся символе, который не может быть интерпре- тирован, как соответствующая часть числа двойной точности.

Если параметр endptr не NULL, функция strtod присваивает endptr указатель на символ, который остановил считывание (*endvar = &stopper). Этот параметр используется для обнаружения ошибок.

Возвращаемое strtod возвращает значение s как число значение двойной точности. В случае переполнения она возв- ращает положительное или отрицательное значение HUGE_VAL.

Переносимость strtod поддерживается на системах UNIX и совме- стима с ANSI C.

Смотрите также

Пример:

#include

#include

int main(void) { char input[80],*endptr; double value; printf("Введите число с плавающей точкой: "); gets(input); value = strtod(input,&endptr); printf("Строка: %s, число: %lf\n",input,value); return 0; }



Strtok



     strtok

Функция Просматривает одну строку на лексемы, которые выделены ограничителями, определенными во второй строке;

Синтаксис #include

char * strtok(char *s1, const char *s2);

Файл, содержащий string.h прототип

Описание strtok рассматривает строку s1, как состоящую из последовательности из нуля или более лексем, вы- деленных с помощью символов из строки str2.

Первый вызов функции strtok возвращает указатель на первый символ первой лексемы в строке s1 и за- писывает нелевой символ в строку s1 непосредст- венно сразу за выделенной лексемой. Последующие вызовы со значением NULL в качестве первого аргу- мента будут обрабатывать строку s1 таким же обра- зом, пока не кончатся все лексемы.

Строка-разделитель s2 от вызова к вызову может меняться.

Возвращаемое strtok возвращает указатель на лексему, находящую- значение ся в s1. Когда закончатся все лексемы, содержащи- еся в строке s1, функция strtok возвратит нулевой указатель (NULL).

Переносимость strtok поддерживается на системах UNIX и совме- стима с ANSI C.

Пример:

#include

#include

int main(void) { char input[16] = "abc,d; char *p; /* strtok помещает нулевое окончание после лексемы */ p = strtok(input,","); if(p) printf("%s\n",p); /* второй вызов возвращает вторую лексему */ p = strtok(NULL,","); if(p) printf("%s\n",p); return 0; }



Strtol



     strtol

Функция Преобразует строку в длинное целое значение.

Синтаксис #include

long strtol(const char *s, char **endptr, int radix);

Файл, содержащий stdlib.h прототип

Описание strtol преобразует символьную строку s к длино- му целому значению. Аргумент s - это последова- тельность символов, которые могут быть интерпре- тированы, как длинное целое; они должны соответс- твовать следующему формату:

[ws] [sn] [0] [x] [ddd] , где

[ws] - необязательный незначащий символ; [sn] - необязательный знак (+ или -); [0] - необязательный нуль (0); [x] - необязательный x или X. [ddd]- необязательные цифры.

strtol прекращает чтение строки на первом симво- ле, который нераспознан.

Если параметр radix лежит в пределах между 2 и 36, длинное целое число выражается по основанию radix. Если radix равно 0, первые несколько сим- волов строки s определяют основание преобразуемо- го значения.

Первый Второй Строка интепретируется, как символ символ 0 1-7 восьмеричное 0 x или X шестнадцатеричное 1-9 ---- десятичное

Если radix = 1, это будет считаться неверным зна- чением. Если radix36, это будет не- верным значением. Любое неверное значение для radix устанавливает результат в 0 и присваивает указателю на следующий символ *endptr - указатель на начало строки. Если подразумевается, что зна- чение s будет интерпретироваться, как восьмирич- ное, любой символ, кроме цифр от 0 до 7, не будет распознаваться. Если подразумевается, что значе- ние s будет интерпретироваться, как десятичное, любой символ, кроме цифр от 0 до 9, не будет рас- познаваться. Если значение s будет интерпретиро- ваться, как число по любому другому основанию, будут распознаваться только те цифры и буквы, ко- торые имеются в числах по данному основанию. (Например, если radix = 5, будут распознаваться только цифры от 0 до 4; если radix = 20, будут распознаваться цифры от 0 до 9 и буквы от А до J). Если endptr не ноль, strol устанавливает *endptr в указатель на символ, который завершает сканирование (*endptr = &stopper).

Возвращаемое strtol возвращает значение преобразованной строки значение или 0 в случае ошибки.

Переносимость strtol поддерживается на системах UNIX и совме- стима с ANSI C.

Смотри также Пример:

#include

#include

int main(void) { char *string = "87654321", *endptr; long lnumber; /* strtol преобразует строку к длинному целому */ lnumber = strtol(string,&endptr,10); printf("Строка: %s, число: %ld\n",string,lnumber); return 0; }



Strupr



     strupr

Функция Преобразует буквы нижнего регистра строки в буквы верхнего регистра.

Синтаксис #include

char *strupr(char *s);

Файл, содержащий string.h прототип

Описание strupr преобразует буквы нижнего регистра в стро- ке s в буквы верхнего регистра. Других изменений не происходит.

Возвращаемое strupr возвращает s. значение

Переносимость strupr уникальна для DOS.

Смотрите также

Пример:

#include

#include

int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz",*ptr; /* преобразовать в символы верхнего регистра */ ptr = strupr(string); printf("%s\n",ptr); return 0; }



Strxfrm



     strxfrm

Функция Копирует часть строки.

Синтаксис #include

size_t strxfrm(char *s1,char *s2,size_t n);

Файл, содержащий string.h прототип

Описание strxfrm копирует не больше n символов из строки s2 в строку s1.

Возвращаемое Функция возвращает число скопированных байт. значение

Смотрите также

Пример:

#include

#include

#include

int main(void) { char *target; char *source = "Frank Borland"; int length; /* выделить место для строки */ target = calloc(80,sizeof(char)); /* скопировать в нее строку и получить ее длину */ length = strxfrm(target,source,80); printf("%s длиной %d байт\n",target,length); return 0; }



Swab



     swab

Функция Функция swab осуществляет обмен байтами.

Синтаксис #include

void swab(char *from, char *to, int nbytes);

Файл, содержащий stdlib.h прототип

Описание Функция swab копирует nbytes байтов из строки from в строку to. Соответствующие четные и нечет- ные байты меняются местами. Эта операция бывает полезна для передачи данных из одной машины к другой с различным порядком байтов. Число nbytes должно быть четным.

Возвращаемое Нет. значение

Переносимость swab поддерживается на системах UNIX.

Пример:

#include

#include

char source[15] = "rFna koBlrna d"; char target[15];

int main(void) { swab(source,target,strlen(source)); printf("Результат: %s\n",target); return 0; }



System



     system

Функция Функция system запускает команду DOS.

Синтаксис #include

int system(const char *command);

Файл, содержащий stdlib.h, process.h прототип

Описание Функция system вызывает файл DOS COMMAND.COM для выполнения команды DOS, командного файла или дру- гих программ вызываемах строкой command из выпол- няемой С программы.

Для поиска и выполнения программа обязательно должна находится в рабочей директории или в одной из директорий перечисленных в строке PATH.

Для поиска файла COMMAND.COM используется пере- менная среды COMSPEC, так что не требуется, чтобы файл COMMAND.COM обязательно находится в рабочей директории.

Возвращаемое Функция system возвращает 0 в случае успеха и -1 значение в случае ошибки.

Переносимость system поддерживается на системах UNIX и совме- стимых с ANSI C. Определена Керниганом и Ритчи.

Смотрите также Функции .., .. .

Пример:

#include

#include

int main(void) { printf("Запуск команды DOS.\n"); system("dir"); return 0; }