1 Содержание 1 Язык С ______________________________________________ 1 1.1 Операции и старшинство их выполнения _______________ 2 1.2 Переменные _________________________________________ 2 1.2.1 Основные типы переменных _____________________ 2 1.2.2 Перечислимый тип ______________________________ 2 1.2.3 Тип структура __________________________________ 2 1.2.4 Тип объединение ________________________________ 3 1.2.5 Пустой тип _____________________________________ 3 1.2.6 Сокращенный тип _______________________________ 3 1.2.7 Модификаторы типов ___________________________ 3 1.2.8 Предельные значения для целочисленных типов - файл limits.h ______________________________________ 3 1.2.9 Константы для вещественных типов - файл float.h __ 3 1.3 Допустимые типы используемых постоянных ___________ 4 1.4 Заголовочные файлы ________________________________ 4 1.5 Препроцессор _______________________________________ 4 1.5.1 Директивы Препроцессора ______________________ 4 Ïàðàìåòðû äèðåêòèâû pragma, ïðåïðîöåññîðà _________ 5 1.5.2 Èäåíòèôèêàòîðà ïðåïðîöåññîðà ïðåäîïðåäåëÿåìûå ïðè êîìïèëÿöèè ________________________________________ 5 1.6 Операторы _________________________________________ 5 1.7 Математические функции - файл math.H ______________ 6 Îøèáêè ìàòåìàòè÷åñêèõ îïåðàöèé _______________________ 7 1.8 Ôóíêöèè äëÿ ðàáîòû ñ äèñêàìè, äèðåêòîðèÿìè è ôàéëàìè __________________________________________ 7 1.8.1 Ôóíêöèè äëÿ ðàáîòû ñ äèñêàìè __________________ 7 1.8.2 Ôóíêöèè äëÿ ðàáîòû ñ äèðåêòîðèÿìè DOS _________ 7 1.8.3 Äîñòóï ê ôàéëàì ________________________________ 8 Äîïóñòèìûå ðåæèìû áóôåðèçàöèè, èñïîëüçóåìûå ôóíêöèåé _setvbuf _________________________________ 9 Êîíñòàíòû äëÿ óñòàíîâêè àòðèáóòîâ ôàéëà ____________ 9 Ðåæèìû äîñòóïà ê ôàéëó, èñïîëüçóåìûå ôóíêöèåé open _ 9 Êîíñòàíòû ñîâìåñòíîãî èñïîëüçîâàíèÿ ________________ 9 Êîäû îøèáîê ïðèñâàèâàåìûå ãëîáàëüíîé ïåðåìåíîé - errno _____________________________________________ 9 Ïîçèöèè ôàéëà, îòíîñèòåëüíî êîòîðûõ ðàñìàòðèâàåòñÿ ñìåùåíèå ___________________________ 10 Êîíñòàíòû ðåæèìîâ ñîçäàíèÿ ôàéëà __________________ 10 Ðåæèìû äîñòóïà ê ôàéëó _____________________________ 10 Êîìàíäû, èñïîëüçóåìûå ôóíêöèåé locking _____________ 10 1.8.4 Ôóíêöèè ðàáîòû ñ ôàéëàìè, èñïîëüçóþùèå ñðåäñòâà DOS ______________________________________ 10 1.8.5 Ôóíêöèè ââîäà-âûâîäà äëÿ ñòàíäàðòíûõ ïîòîêîâ __ 10 1.8.6 Ôóíêöèè ââîäà-âûâîäà äëÿ ïîòîêîâ îòêðûòûõ файлов _________________________________________ 11 Ñèìâîëû óïðàâëåíèÿ ôîðìàòèðîâàíèåì ______________ 11 ESC - ïîñëåäîâàòåëüíîñòè ___________________________ 12 1.8.7 Ôóíêöèè äëÿ ðàáîòû ñ âðåìåííûìè ôàéëàìè ______ 12 1.9 Функции проверки и преобразования символов - файл ctype.h ___________________________________________ 12 1.10 Функции для работы с масивами _____________________ 13 1.11 Функции для работы со строками – файлы string. h, stdlib.h _______________________________ 13 1.12 Ôóíêöèè äëÿ ðàáîòû ñ ïàìÿòüþ ______________________ 14 Çíà÷åíèÿ âîçâðàùàåìûå ôóíêöèÿìè ïðîâåðêè äèíàìè÷åñêîé ïàìÿòè _______________________________ 15 1.13 Функции для работы с терминалом в текстовом режиме - файл conio.h __________________________________________ 15 1.14 Ôóíêöèè ïîääåðæêè ïåðåìåííîãî ÷èñëà ïàðàìåòðîâ - stdarg.h _______________________________________________ 16 1.15 Ôóíêöèè äëÿ ðàáîòû ñ äàòîé è âðåìåíåì _____________ 16 1.16 Специальные функции ______________________________ 16 Êîäû îïåðàöèé êëàâèàòóðû __________________________ 18 Çíà÷åíèå ïàðàìåòðà command äëÿ ôóíêöèè _bios_serialcom ____________________________________ 18 Çíà÷åíèå ïàðàìåòðà byte äëÿ ôóíêöèè _bios_serialcom __ 18 Çíà÷åíèÿ ñëîâà óïðàâëåíèÿ ïàêåòîì ñ ïëàâàþùåé òî÷êîé ____________________________________________ 18 Ñëîâî ñîñòîÿíèÿ ïàêåòà ñ ïëàâàþùåé òî÷êîé __________ 19 Áèòû - ðåãèñòðà ôëàæêîâ ïðîöåññîðà __________________ 19 1.17 Êëþ÷åâûå ñëîâà ____________________________________ 19 1.18 Ãëîáàëüíûå ïåðåìåííûå è êîíñòàíòû _________________ 19 1.19 Ïðîöåññû-ïîòîìêè __________________________________ 20 Ðåæèìû ðàáîòû ïðîöåññà-ïîòîìêà ____________________ 20 1.20 Ñïîñîáû ìíîãîðàçîâîãî èñïîëüçîâàíèÿ ôóíêöèé _______ 20 è MAK - ôàéëû ____________________________________ 20 1.20.1 Áèáëèîòåêè è ñïîñîáû ìíîãîðàçîâîãî èñïîëüçîâàíèÿ ôóíêöèé ____________________________ 20 1.20.2 Ñîçäàíèå è ðàáîòà ñ MAK - ôàéëàìè ___________ 20 Çíà÷åíèÿ âñòðîåííûõ ìàêðîêîìàíä â ïðÿìûõ è êîñâåííûõ ïðàâèëàõ ___________________________ 21 2 Îñîáåííîñòè C++ ___________________________________ 21 2.1 Êðàòêîå îïèñàíèå íîâøåñòâ â Ñ++ ___________________ 21 2.2 Ñòàíäàðòíûå ïîòîêè ââîäà- âûâîäà __________________ 22 2.3 Îïåðàòîðû _________________________________________ 23 2.4 Ñïåöèàëüíûå ôóíêöèè ______________________________ 23 2.5 Êîíñòàíòû _________________________________________ 23 2.6 Êëþ÷åâûå ñëîâà ____________________________________ 23 2.7 ГРАФИЧЕСКАЯ БИБЛИОТЕКА ВС++ ______________ 23 2.7.1 Функции äля управления графической системой ___ 23 2.7.2 Ôóíêöèè äëÿ óñòàíîâêè ïàðàìåòðîâ èçîáðàæåíèÿ _ 24 2.7.3 Функции для получения изображения на экране ___ 24 2.7.4 Ôóíêöèè äëÿ ïîëó÷åíèÿ ïàðàìåòðîâ èçîáðàæåíèÿ _ 25 2.8 КЛАССЫ И КОМПОНЕНТНЫЕ ФУНКЦИИ. БИБЛИОТЕКИ ПОТОКОВОГО ВВОДА-ВЫВОДА В СИ++ _ 26 2.8.1 Êîìïîíåíòíûå ôóíêöèè êëàññà ios ________________ 26 2.8.2 Компонентные функции класса istream ____________ 26 2.8.3 Компонентные функции класса ostream ___________ 27 Флаги класса ios, управляющие форматированием ввода/вывода _________________________________ 27 Константы класса ios для "очистки" флагов форматирования ______________________________ 27 2.8.4 Ôóíêöèè ìàíèïóëÿòîðû ________________________ 27 2.8.5 Параметризованные функции-манипуляторы - файл xomanxp.h ___________________________________ 28 2.8.6 Компонентные функции класса filebuf ____________ 28 2.8.7 Компонентные функции классов ifstream, ofstream, fstream ________________________________ 28 Режимы файла, устанавливаемые параметром mode в функции open () ______________________________ 28 2.9 БИБЛИОТЕЧНЫЕ КЛАССЫ И ИХ КОМПОНЕНТНЫЕ ФУНКЦИИ ___________________________________________ 28 2.9.1 Êîìïîíåíòíûå è äðóæåñòâåííûå ôóíêöèè êëàññà complex __________________________________________ 29 2.9.2 Êîìïîíåíòíûå è äðóæåñòâåííûå ôóíêöèè êëàññà string ____________________________________________ 29 1 Язык С. 1. Îñîáåííîñòüþ ÿçûêà «Ñ», ÿâëÿåòñÿ âîçìîæíîñòü äîñòóïà ê ïåðåìåííîé íå òîëüêî ïî ññûëêå íà ïåðåìåííóþ ïî èìåíè, íî è èñïîëüçîâàíèå ìåõàíèçìà óêàçàòåëåé.  «C» îïðåäåëåíû äâå ñïåöèàëüíûå îïåðàöèè äëÿ äîñòóïà ê ïåðåìåííîé ÷åðåç óêàçàòåëè: îïåðàöèè «&» è «*». Îïåðàöèÿ «*» èñïîëüçóåòñÿ äëÿ èíäèêàöèè ïåðåìåííîé (*ptr), êîòîðàÿ ðàñïîëîæåíà â ïàìÿòè ïî àäðåñó íà êîòîðûé óêàçûâàåò îäíîèìåííàÿ ïåðåìåííàÿ áåç çâåçäî÷êè (ptr óêàçàòåëü). Îïåðàöèÿ «&» èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ àäðåñà ÿ÷åéêè ïàìÿòè êàê îáû÷íîé ïåðåìåííîé (ïåðâîãî áàéòà), òàê è äëÿ îïðåäåëåíèÿ àäðåñà ãäå õðàíåíèòñÿ óêàçàòåëü íà ïåðåìåííóþ(&ptr) , ïðè èñïîëüçîâàíèè ìåõàíèçìà óêàçàòåëåé. a) Ïðèñâàèâàíèå óêàçàòåëþ (àäðåñà ïåðåìåííîé íà êîòîðóþ îí óêàçûâàåò) îïðåäåëåííîãî çíà÷åíèÿ: ïðè îïðåäåëåíèè ïåðåìåííîé int *ptr = (int *)200; â ïðîãðàììå ptr = (int *)200. b) Ïðèñâàèâàíèå çíà÷åíèÿ, íåïîñðåäñòâåííî, ïåðåìåííîé íà êîòîðóþ óêàçûâàåò óêàçàòåëü: *ptr = 300. c) Ðîäîâîé óêàçàòåëü â «C» îñíîâàí íà èñïîëüçîâàíèè óêàçàòåëÿ òèïà (void *) . Êëþ÷åâîå ñëîâî void ãîâîðèò îá îòñóòñòâèè äàííûõ î ðàçìåðå îáúåêòà â ïàìÿòè. Âî âñåõ ñëó÷àÿõ èñïîëüçîâàíèÿ óêàçàòåëÿ, îïèñàííîãî êàê void *, íåîáõîäèìî âûïîëíèòü îïåðàöèþ ÿâíîãî ïðèâåäåíèÿ òèïà óêàçàòåëÿ: unsigned long block = 0xffeeddccL; void *ptr = &block; unsigned char = *(unsigned char *)ptr; long int four_bytes = *( long int *)ptr; d) Îïðåäåëåíèå àäðåñà óêàçàòåëÿ: int *ptr; k = &ptr; e) Óêàçàòåëü íà óêàçàòåëü: int data = 5; int *ptr = &data; == ptr[0]; int **ptr_ptr = &ptr; == ptr_ptr[0][0]; int ***ptr_ptr_ptr = &ptr_ptr; == ptr_ptr_ptr[0][0][0]; *ptr_ptr++ - Èíêðåìåíòèðóåò çíà÷åíèå ptr_ptr óêàçûâàþùåå íà ptr. Ñîäåðæèò çíà÷åíèå ïî èíêðåìåíòèðîâàííîìó àäðåñó ptr_ptr. ptr_ptr++ - Èíêðåìåíòèðóåò çíà÷åíèå ptr_ptr óêàçûâàþùåå íà ptr. Ñîäåðæèò èíêðåìåíòèðîâàííûé ptr_ptr. (*ptr_ptr)++ - Èíêðåìåíòèðóåò çíà÷åíèå ptr óêàçûâàþùåå íà data. Ñîäåðæèò èíêðåìåíòèðîâàííûé ptr. *(*ptr_ptr)++ - Èíêðåìåíòèðóåò çíà÷åíèå ptr óêàçûâàþùåå íà data. Ñîäåðæèò çíà÷åíèå ïî èíêðåìåíòèðîâàííîìó àäðåñó ptr. f) Константный указатель: 2 char *const q; g) Приведение типов: (long)a – Традиционная запись long(a) – Функциональная запись 2. Êàê è âî ìíîãèõ äðóãèõ ÿçûêàõ â «Ñ» ïîääåðæóþòñÿ ìàññèâû âñå ýëåìåíòû êîòîðîãî èìåþò îäèí è òîòæå òèï è ðàñïîëîæåíû â ïàìÿòè äðóã çà äðóãîì. Èìÿ ìàñèâà ÿâëÿåòñÿ óêàçàòåëåì êîíñòàíòîé, ðàâíîé àäðåñó íà÷àëà ìàññèâà.  «C» â îòëè÷èå îò ìíîãèõ äðóãèõ ÿçûêîâ, îòñóòñòâóåò ñïåöèàëüíûé ñòðîêîâûé òèï. Âìåñòî ýòîãî ñòðîêîâûå ëèòåðàëû â «C» ïðåäñòàâëÿþòñÿ â ïàìÿòè ÝÂÌ êàê ìàññèâ ýëåìåíòîâ òèïà char, â êîíöå êîòîðîãî ïîìåùåí символ ‘\0’. a) ßâíîå óêàçàíèå ÷èñëà ýëåìåíòîâ ìàññèâà è ñïèñêà íà÷àëüíûõ çíà÷åíèé: char array[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}; char arrey[] = «ABCD»; char arrey[5] = «ABCD»; char arrey[5] = {‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}; ñ óêàçàòåëåì: char *string = «ABCD»; string = «ABCD»; В связи с высшим приоритетом [] над * определения типов могут иметь следующую запись: int* v[10]; // вектор указателей int (*p)[10]; // указатель на вектор int (*fp)(char,char *); //указатель на функцию b) Îáðàùåíèå ê ýëåìåíòàì ìàññèâà ñ ïîìîùüþ óêàçàòåëÿ: ê îäíîìåðíîìó: *(arrey + i); ê äâóõìåðíîìó: arrey[i][j]; *(arrey[i] + j); *(*(arrey + i) + j); c) Èìÿ äâóõìåðíîãî ìàññèâà ÿâëÿåòñÿ óêàçàòåëåì-êîíñòàíòîé íà ìàñèâ óêàçàòåëåé êîíñòàíò(matrix[2] == &matrix[2][0]), à òàêæå (char *messages[20] == char messages[20][80]): char string[][80]= {«Ïåðâàÿ ñòðîêà», «Âòîðàÿ ñòðîêà», «Ñëåäóþùàÿ ñòðîêà»}; int m[][3] = { {00}, {10, 11}, {20, 21, 22,} }; d) Ìàñèâ óêàçàòåëåé íà ôóíêöèè: int (* fcmp[5])( ) = { cmp_name, cmp_title, cmp_year, cmp_price, cmp_totaly}; fcmp[i](ptr1, ptr2); 1.1 Операции и старшинство их выполнения Символ ++ -() [] -> . :> ++ -! ~ + & * sizeof (type) * / % + << Имя или Значение Ñàìûé âûñîêèé ïðèîðèòåò Пост-приращение Пост-декремент Âûçîâ функции Âûäåëåíèå элеменòà массива Âûäåëåíèå ýëåìåíòà структуðû (îáúåäèíåíèÿ) àäðåñóåìîé (åãî) óêàçàòåëåì Âûäåëåíèå ýëåìåíòà структуðû или îáúåäèíåíèÿ Основа Пример: myseg: > bp Указатель bp действует как смещение в сегмент определенный myseg. Óâåëè÷åíèå íà åäåíèöó Óìåíüøåíèå íà åäåíèöó Логическое îòðèöàíèå Поáèòîâîå îòðèöàíèå (èíâåðñèÿ) Èçìåíåíèå çíàêà (óíàðíûé минус) Одноместный плюс Îïðåäåëåíèå àäðåñà ïåðåìåííîé Îáðàùåíèå ïî àäðåñó ïåðåìåííîé Îïðåäåëåíèå размеðà в байтах Преîáðàçîâàíèå ê типó [ (float) i] Умножение Деление Îïðåäåëåíèå îñòàòêà öåëîãî деления Сумма Разность Сдвиг влево Íàïðàâëåíèå Слева направо >> < <= > >= == != & ^ | && || ?: = *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= , Сдвиг вправо Меньше чем Меньше или равно чем Больше чем Больше или равно чем Равно Не равно Поразрядный И Поразрядный исключающий ИЛИ Поразрядный ИЛИ Логический И Логический ИЛИ Условнàÿ îïåðàöèÿ Пример: (val > = 0)? Val: -Val Если условие истинно, то выражение принимает значение Val. Если не истинно то значение -Val Ïðèñâàèâàíèå Составное ïðèñâàèâàíèå X=X*6 (X*=6) Îïåðàöèÿ запятая Самûé низкèé ïðèîðèòåò Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо Слева направо 1.2 Переменные 1.2.1 Основные типы переменных Èìÿ òèïà char (áàéò) int (2 áàéòà) short (2 áàéòà) long (4 áàéòà) unsigned char unsigned unsigned short unsigned long enum float double long double Другие Имена signed char signed, signed int short int, signed short, signed short int long int, signed long, signed long int none unsigned int unsigned short int unsigned long int none none none none Диапазон изменений -128 äî 127 -32,768 äî 32,767 -32,768 äî 32,767 -2,147,483,648 äî 2,147,483,647 0 äî 255 0 äî 65,535 0 äî 65,535 0 äî 4,294,967,295 -32,768 äî 32,767 3.4E с 38 (7 çíàêîâ) 1.7E с 308 (15 çíàêîâ) 1.2E с 4932 (19 çíàêîâ) 1.2.2 Перечислимый тип - enum Слева направо Слева направо Îïðåäåëÿåò òèï enum è-èëè enum ïåðåìåííóþ. Åñëè ôèãóðíûå ñêîáêè çàäàíû òî êëþ÷åâîå ñëîâî enum îáúÿâëÿåò òèï enum, ñîñòîÿùèé èç íàáîðà èìåíîâàííûõ öåëî÷èñëåííûõ êîíñòàíò. Ïåðåìåííàÿ òèïà enum õðàíèò îäíî èç çíà÷åíèé, îïðåäåëåííûõ òèïîì enum. Òàêèì îáðàçîì, enum ïåðåìåííàÿ âñåãäà èìååò òèï int. Enum ìîæåò èñïîëüçîâàòüñÿ, äëÿ îáúÿâëåíèÿ êîíñòàíò, êîòîðûå ìîãóò èñïîëüçîâàòü èìåíà áåç îáúÿâëåíèÿ ïåðåìåííûõ äëÿ íèõ, êàê ïîêàçàíî â ñëåäóþùåì ïðèìåðå: enum DAYS { saturday, sunday = 10, monday, tuesday, wednesday, thursday, friday } today; enum DAYS yesterday = monday; int tomorrow = wednesday; 1.2.3 Тип структура - struct Слева направо Слева направо Îáúÿâëÿåò òèï ñòðóêòóðû è-èëè ïåðåìåííóþ ñòðóêòóðû. Åñëè çàäàíû ôèãóðíûå ñêîáêè, òî òèï ñòðóêòóðû îïðåäåëåí. 3 Íåèìåíîâàííûå ðàçðÿäíûå ïîëÿ ìîãóò èñïîëüçîâàòüñÿ äëÿ âûðàâíèâàíèÿ. Åñëè ôèãóðíûå ñêîáêè íå çàäàíû òî,êëþ÷åâîå ñëîâî struct èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ ïåðåìåííîé ñòðóêòóðû: struct my_str; // my_str – как прототип, определена позже struct POINT { int x; int y; } here = { 20, 40 }; struct POINT there, *ther1; ther1->x = 2; struct CELL { //Âûáîð êîëè÷åñòâà áèòîâ äëÿ ýëåìåíòîâ ñòðóêòóðû unsigned character : 8; // 00000000 ???????? unsigned foreground : 3; // 00000??? 00000000 unsigned intensity : 1; // 0000?000 00000000 unsigned background : 3; // 0???0000 00000000 unsigned blink : 1; // ?0000000 00000000 unsigned :1 //Неиспользуемое } screen[25][80]; POINT example(POINT there) //Ôóíêöèÿ ñ òèïîì ñòðóêòóðîé { there.x = 3; there.y = 5; }; 1.2.4 Тип объединение - union Îáúÿâëÿåò òèï îáúåäèíåíèå è-èëè ïåðåìåííóþ îáúåäèíåíèÿ. Åñëè ôèãóðíûå ñêîáêè çàäàíû òî, union îáúÿâëÿåò òèï îáúåäèíåíèÿ, ñîñòîÿùèé èç ïîñëåäîâàòåëüíîñòè ïåðåìåííûõ, çíà÷åíèÿ (èçâåñòíûõ êàê ýëåìåíòû îáúåäèíåíèÿ) êîòîðûå ìîãóò èìåòü ðàçëè÷íûå òèïû. Ïåðåìåííàÿ òèïà union ìîæåò ñîäåðæàòü îäèí ýëåìåíò ëþáîãî òèïà, îïðåäåëåííîãî îáúåäèíåíèåì. Ðàçìåðîì îáúåäèíåíèÿ ÿâëÿåòñÿ ðàçìåð ñàìîãî áîëüøîãî òèïà â îáúåäèíåíèè. Ïåðåìåííàÿ ìîæåò áûòü îïðåäåëåíà, óêàçàíèåì åå èìåíè ïîñëå çàêëþ÷èòåëüíîé ôèãóðíîé ñêîáêè. Åñëè ôèãóðíûå ñêîáêè íå äàíû, òî êëþ÷åâîå ñëîâî union èñïîëüçóåòñÿ, äëÿ îïðåäåëåíèÿ ïåðåìåííîé îáúåäèíåíèÿ. Íàïðèìåð, union UNKNOWN { char ch; int i; long l; float f; double d; } var1; // Variable of type UNKNOWN union UNKNOWN var2; // Variable of type UNKNOWN var1.i = 6; // Use variable as integer var2.d = 5.327; // Use variable as double 1.2.5 Пустой тип - void Åñëè èñïîëüçóåòñÿ êàê òèï âîçâðàòà ôóíêöèè òî ôóíêöèÿ íå âîçâðàùàåò çíà÷åíèÿ. Åñëè èñïîëüçóåòñÿ êàê ñïèñîê ïàðàìåòðà ôóíêöèè òî, ôóíêöèÿ íå èñïîëüçóåò âõîäíûõ ïàðàìåòðîâ. Åñëè èñïîëüçóåòñÿ êàê òèï óêàçàòåëÿ òî îïðåäåëåííûé óêàçàòåëü ìîæåò ñîîòâåòñòâîâàòü óêàçàòåëþ ëþáîãî òèïà(ñì. óêàçàòåëè). 1.2.6 Сокращенный тип - typedef Îïèñàíèå typedef èñïîëüçóåòñÿ äëÿ îáúÿâëåíèÿ ñîêðàùåííîé ôîðìû описания сложных типов данных (сопостовление типа с еще одним именем). typedef unsigned long int ULINT; ULINT my_const; 1.2.7 Модификаторы òèïîâ Èìÿ _cs _ds _es _ss _far _huge long _near short signed Íàçíà÷åíèå Ñîçäàåò óêàçàòåëü ñåãìåíòà êîäà. Ñîçäàåò óêàçàòåëü ñåãìåíòà äàííûõ. Ñîçäàåò óêàçàòåëü ñåãìåíòà äîïîëíèòåëüíîé ïàìÿòè. Ñîçäàåò óêàçàòåëü ñòåêîâîãî ñåãìåíòà. Óêàçûâàåò, ÷òî ôóíêöèÿ, îáúåêò äàííûõ ïîñòîÿííî íàõîäèòñÿ â çàäàííîì ïî óìîë÷àíèþ ñåãìåíòå êîäà, äàííûõ. Ôóíêöèè è äàííûå âûçûâàþòñÿ 32-ðàçðÿäíûì àäðåñîì. Ðàçìåð èíäèâèäóàëüíûõ ýëåìåíòîâ äàííûõ ìîæåò ïðåâûøàòü 64ÊÁ. Äàííûå âûçâàþòñÿ 32-ðàçðÿäíûì àäðåñîì (íîðìàëèçîâàííûå). Óêàçûâàåò ÷òî òèï ïåðåìåííîé óäëåíåí. Îïðåäåëÿåò, ÷òî ôóíêöèÿ, îáúåêò äàííûõ ïîñòîÿííî íàõîäÿòñÿ â çàäàííîì ïî óìîë÷àíèþ ñåãìåíòå êîäà è äàííûõ. Ôóíêöèè è äàííûå âûçûâàþòüñÿ 16-ðàçðÿäíûì àäðåñîì, à óêàçàòåëè êîòîðûå îáúÿâëåííû _near - 16ðàçðÿäíîãî çíà÷åíèÿ. Óêàçûâàåò ÷òî òèï ïåðåìåííîé óêîðî÷åí. Óêàçûâàåò ÷òî òèï ïåðåìåííîé ñî çíàêîì. unsigned Óêàçûâàåò ÷òî òèï ïåðåìåííîé áåç çíàêà. 1.2.8 Предельные значения для целочисленных типов - файл limits.h Имя константы Стандартнîе значение Смысл СНAR_В1Т 8 SCHAR_MIH -127 Число битов в байте Минимальное значение для signed char SCHAR_MAX +127 Максимальное значение signed char Максимальное значение unsigned char Минимальное значение для char UCHAR_MA X CHAR_MIN 255 0 SCHAR_MIN CHAR_MAX UCHAR_MA X SCHAR_MAX MB_LEN_MA 1 X SHRT_MIN SHRT_MAX -32767 +32767 Максимальное значение для char Минимальное число байт в много байтовом символе Минимальное значение для short Максимальное значение для short USHRT_MAX 65535 INT_MIN INT_MAX UINT_MAX -32767 +32767 65535 LONG_MIN LONG_MAX ULONG_MA X -2147483647 +2147483647 4294967295 Максимальное значение unsigned short Минимальное значение для int Максимальное значение для int Максимальное значения unsigned int Минимальное значение для long Максимальное значение для long Максимальное значение unsigned long 1.2.9 Константы для вещественных типов файл float. h Имя константы Стандартно FLT_RADIX 2 FLT_DIG 6 FLT_EPSILO 1Е-5 N FLT_MANT_ DIG FLT_MAX 1E+37 FLT_MAX_E XP FLT_MAX_10 38 _EXP FLT_MIN 1E-37 FLT_MIN_EX P FLT_MIN_10_ -37 EXP DBL_DIG 10 DBL_EPSILO 1E-9 N DBL_MANT_ DIG DBL_MAX 1E+37 Смысл Основание экспоненциального представления, например:2,16 Количество верных десятичных цифр Минимальное x, такое, что 1.0 + х != 1.0 Количество цифр по основанию FLT_RADIX в мантиссе Максимальное число с плавающей точкой Максимальное n, такое, что FLT_RADIX N - 1 представимо в виде числа типа float Максимальное целое n, такое, что 10n представимо как float Минимальное нормализованное число с плавающей точкой типа float Минимальное и, такое, что 10n представимо в виде нормализованного числа Минимальное отрицательное целое п, такое, что 10n - в области определения чисел типа float Количество верных десятичных цифр для типа double Минимальное х, такое, что 1.0+ х!=1.0, где х принадлежит типу double Количество цифр по основанию FLT_RADIX в мантиссе для чисел типа double Максимальное число с плавающей 4 DBL_MAX_E XP DBL_MAX_10 +37 _EXP DBL_MIN 1E-37 DBL_MIN_E XP DBL_MIN_10 -37 _EXP точкой типа doubl Максимальное n, такое, что FLT_RADIXn -1 представимо в виде числа типа double Максимальное целое n, такое, что 10n представимо как double Минимальное нормализованное число с плавающей точкой типа double Минимальное n, такое, что 10n представимо в виде нормализованного числа типа doubl Минимальное отрицательное целое n, такое, что 10n - в области определения чисел типа double 1.3 Допустимые типы используемых постоянных Целые константы цифры 0-9;(12, 111, 956) цифры 0-7; (012=10, 011=73, 076=62) цифры 0-9,буквы A-F или a-f (0x12=18, 0x2f=47, 0XA3=163) Длинные целые константы Десятичная 12l=12, 956L=956; Восьмеричные 012l=10, 076L=62; Шестнадцатеричн 0x12l=18, 0XA3=163. ые Константы с плавающей точкой Всегда представляются òèïàìè float è double: 345. = 345; 2.1e5 = 210000; .123E3 = 123; 4037e-5 = .04037 Ñèìâîëüíûå êîíñòàíòû Ñîñòîèò èç îäíîãî ñèìâîëà êîäà ASCII, çàêëþ÷åííîãî â àïîñòðîôû : ’A’; ‘a’; ‘7’; ‘$’. Ñòðîêîâûå êîíñòàíòû Ïðåäñòîâëÿåò ïîñëåäîâàòåëüíîñòü ñèìâîëîâ êîäà ASCII, çàêëþ÷åííîé â êàâû÷êè: «......». Десятичные Восьмеричные Шестнадцатеричн ые 1.4 Заголовочные файлы Èìÿ ôàéëà ASSERT.H ANSI BIOS.H CONIO.H CTYPE.H ANSI DIRECT.H DOS.H ENV.H POSIX ERRNO.H ANSI FCNTL.H POSIX FLOAT.H ANSI GRAPH.H IO.H LIMITS.H ANSI LOCALE.H ANSI MALLOC.H MATH.H ANSI MEMORY.H PGCHART.H PROCESS.H SEARCH.H SETJMP.H ANSI SHARE.H Îñíîâíîå ñîäåðæàíèå Утвердите макрокоманду отладки SIGNAL.H ANSI STDARG.H ANSI STDDEF.H ANSI STDIO.H ANSI STDLIB.H ANSI STRING.H ANSI TIME.H ANSI VARARGS.H SYS\LOCKING .H SYS\STAT.H SYS\TIMEB.H SYS\TYPES.H SYS\UTIME.H Функции манипулирования строками Основные функции времени Функции списка параметров переменной длины Флажки, используемые для блокирования функций Файл состояния структура и функции Временные функции Файл состояния и типы времени Utime функции 1. Äëÿ ïåðåâîäà íà äðóãóþ ñòðîêó èñïîëáçååòñÿ « ;\ »: #define FILLSCREAN(color) _AX = 0x0600;\ _CX = 0x0000;\ _DX = 0x184f;\ _BH = color;\ geninterrupt(0x10); 2. Äëÿ îáúåäèíåíèÿ ôîðìàëüíûõ ïàðàìåòðîâ èñïîëüçóþòñÿ ñèìâîëû « ## »: #define var( i , j ) ( i##j ) // var( x , 6 ) = x6 3. Äëÿ ïðåîáðàçîâàíèÿ ôàêòè÷åñêîãî ïàðàìåòðà â ñòðîêó èñïîëüçóåòñÿ ñèìâîë « # » êîòîðûé ïîìåùÿåòñÿ ïåðåä ôîðìàëüíûì ìàêðîïàðàìåòðîì: #define TRACE(flag) printf(#flag "=%d\n", flag) 1.5.1 Директивы Препроцессора Èìÿ #define #elif, #if Управление каталогами MS-DOS функции интерфейса Содержит прототипы для окружений строковых функций. Errno переменные определения Флажки, используемые в функциях open и sopen Константы, необходимые математическим функциям Графика Низкого уровня и подпрограммы шрифтов Обрабатывающий файл и низкоуровневый ввод - вывод Диапазоны целых чисел и символьных типов #else Функции Локализации #ifdef Флажки, используемые в sopen Стандартный файл ввода - вывода Обычно используемые библиотечные функции 1.5 Препроцессор BIOS сервисные функции Подпрограммы Ввода - вывода Символьная классификация Функции распределения памяти Математические подпрограммы с плавающей запятой Подпрограммы манипуляции с буфером Графика представления Подпрограммы управления процессом Поиск и сортировка функций Функции setjmp и longjmp Константы, используемые для сигнальных функций Макрокоманды для переменной длины функций списка параметров Обычно используемые типы данных и значения #endif #error #ifndef #include #line Íàçíà÷åíèå #define ident ident1; Заменяет все последующие îïðåäåëåíèÿ <ident> íà ëåêñåìó <ident1> (ñîâîêóïíîñòü ëåêñåì). #if expresion #elif expresion1 #endif Проверяет выражение <expresion>, связанное с директивами #if, или #elif , åñëè âûðàæåíèå истинно (отличный от нуля), то âûïîëíÿþòñÿ ñëåäóþùèå ñòðîêè äî äèðåêòèâû óñëîâèÿ èëè êîíöà óñëîâèé. Äèðåêòèâà #elif ÿâëÿåòñÿ ñîâìåùåíèåì äèðåêòèâ #else è#if. Если имеется #else, òî íèæåñòîÿùèå ñòðîêè âûïîëíÿþòñÿ êîãäà выражение в #if или #elif имеåт нулевое значение. Неëüçÿ использовать â êà÷åñòâå óñëîâèÿ оператор sizeof, составные типы, float или enum типы. Íèæåñòîÿùèå ñòðîêè âûïîëíÿþòñÿ åñëè выражение в #if или #elif имеåт нулевое значение Óêàçûâàåò íà êîíåö óñëîâíîãî êîìïèëèðîâàíèÿ #error ñîîáùåíèå Çàñòàâëÿåò êîìïèëÿòîð îòîáðàæàòü <ñîîáùåíèå> íà stderr ñ âîçâðàòîì êîäà îòëè÷íîãî îò íóëÿ, ïîñëå çàâåðøåíèÿ êîìïèëÿöèè. Ïîñëå âñòðå÷è êîìïèëÿòîðîì äèðåêòèâû #error, îí ïðîñìàòðèâàåò îñòàëüíóþ ÷àñòü ïðîãðàììû íà ñèíòàêñè÷åñêèå îøèáîêè, áåç ôîðìèðîâàíèÿ îáúåêòíîãî ôàéëà. #ifdef <identifier> Âûïîëíÿåò ïîñëåäóþùèå ñòðîêè äî #endif, åñëè <identifier> áûë ðàíåå îïðåäåëåí. #ifndef <identifier> Âûïîëíÿåò ïîñëåäóþùèå ñòðîêè äî #endif, åñëè <identifier> íå áûë ðàíåå îïðåäåëåí. #include <filename> Âñòàâëÿåò ñîäåðæèìîå ôàéëà <filename> â òåêóùèé ôàéë. Åñëè ïóòü ê èìåíè ôàéëà âêëþ÷åí â äâîéíûå êàâû÷êè, òî ïîèñê ïðîèçâîäèòüñÿ âíóòðè òåêóùåãî êàòàëîãà. #line n file 5 #pragma #undef Изменяет внутренний номер строки компилятора на <n>, à òàêæå изменяет внутреннее имя файла на <file>. Текущий номер строки и имя файла доступны через êîíñòàíòû ïðåïðîöåññîðà __ LINE __ и __ FILE. #pragma directives Èíñòðóêòèðóåò êîìïèëÿòîð, î âûïîëíåíèå ìàøèííî ñïåöèôè÷åñêèõ âîçìîæíîñòåé, îïðåäåëåííûõ ïàðàìåòðîì <directives> (òàáëèöà À19). #undef identifier Óäàëÿåò òåêóùåå îïðåäåëåíèå <identifier>, êîòîðûé áûë ïðåäâàðèòåëüíî îïðåäåëåí äèðåêòèâîé #define. Òàáëèöà À19 - Ïàðàìåòðû äèðåêòèâû pragma, ïðåïðîöåññîðà Èìÿ Ôóíêöèè anon_str #pragma anon_struct on (off) uct Âêëþ÷àåò âûêëþ÷àåò èñïîëüçîâàíèå àíîíèìíûõ ñòðóêòóð â êëàññàõ. argsused Îòêëþ÷àåò ïðåäóïðåæäàþùåå ñîîáùåíèå. Ïñåâäîêîììåíòàðèé argsused èñïîëüçóåòñÿ òîëüêî ìåæäó îïðåäåëåíèÿìè ôóíêöèé , ÷òî ïðèâîäèò ê âîçäåéñòâèþ òîëüêî íà ñëåäóþùóþ ôóíêöèþ. exit #pragma exit <function_name> [priority] Óêàçûâàåò íà ôóíêöèþ êîòîðàÿ äîëæíà âûïîëíèòñÿ ïåðåä çàâåðøåíèåì main - ôóíêöèè. Ôóíêöèÿ íå äîëæíà èìåòü íå âõîäíûõ íå âûõîäíûõ ïàðàìåòðîâ. hdrfile #pragma hdrfile "filename.SYM" Óñòàíàâëèâàåò èìÿ ôàéëà, ãäå Borland C++ äîëæåí ñîõðàíÿòü ïðåä-êîìïèëèðóåìûå çàãîëîâêè (ïî óìîë÷àíèþ - TCDEF.SYM). Äëÿ èçìåíåíèÿ èìåíè ôàéëà ìîæíî èñïîëüçîâàòü îïöèþ êîìïèëÿòîðà êîìàíäíîé ñòðîêè -H = èìÿ ôàéëà. hdrstop #include <vcl.h> // Общий файл çàãàëîâêà #pragma hdrstop // Завершить список здесь #include "Unit1.h" // Специфический файл заголовка Çàâåðøàåò ñïèñîê çàãîëîâî÷íûõ ôàéëîâ, êîòîðûå ïîäëåæàò precompilation. Èñïîëüçóåòñÿ, äëÿ óìåíüøåíèÿ îáúåìà äèñêîâîãî ïðîñòðàíñòâà, èñïîëüçóåìîãî ïîä ïðåäêîìïèëèðóåìûå çàãîëîâêè. intrinsic #pragma intrinsic [-]function-name Ðàçðåøàåò èëè (-) çàïðåùàåò âñòðàèâàíèå ôóíêöèé ñ ïîìîùüþ êëþ÷åâîãî ñëîâà inline. Êîìïèëÿòîð çàìåíÿåò èìÿ ôóíêöèè <function> íà <_function_>. inline Ñîîáùàåò êîìïèëÿòîðó, ÷òî èñõîäíûé òåêñò ñîäåðæèò âñòðîåííûå óòâåðæäåíèÿ àññåìáëåðà. message #pragma message( "Compiling " __FILE__ ) Ïîñûëàåò ñîîáùåíèå ñòàíäàðòíîìó âûâîäó áåç çàâåðøåíèÿ òðàíñëÿöèè option #pragma option [options...] Èñïîëüçóåòñÿ äëÿ âêëþ÷åíèÿ îïöèé êîìïèëÿòîðà êîìàíäíîé ñòðîêè, ïðèìåíèòåëüíî ê âàøåé ïðîãðàììå. pack Ïîäîáíî èñïîëüçîâàíèþ #pragma option cî ñïåöèàëüíîé -a îïöèåé êîìïèëÿòîðà è n – âûðàâíèâàíèå áàéòîâ, êîòîðîå îïðåäåëÿåò, êàê êîìïèëÿòîð âûðàâíèâàåò äàííûå ïðè ñîõðàíåííèè â ïàìÿòè. Ìîæåò òàêæå èñïîëüçîâàòüñÿ ñ, âòàëêèâàíèåì è âûòàëêèâàíèåì ïàðàìåòðîâ. #pragma pack(n) #pragma option -an #pragma pack(push, n) #pragma option push -an #pragma pack(pop) #pragma option pop saveregs Ãàðàíòèðóåò, ÷òî huge ôóíêöèÿ íå áóäåò èçìåíÿòü çíà÷åíèé ðåãèñòðàòîðîâ ïðîöåññîðà. Ïîìåñòèòå ýòó äèðåêòèâó ïåðåä îïðåäåëåíèåì ôóíêöèè. startup #pragma startup <function_name> [priority] Óêàçûâàåò íà ôóíêöèþ êîòîðàÿ äîëæíà âûïîëíèòñÿ ñðàçó ïîñëå çàïóñêà main - ôóíêöèè. Ôóíêöèÿ íå äîëæíà èìåòü íå âõîäíûõ íå âûõîäíûõ ïàðàìåòðîâ. Warn #pragma warn +xxx, -xxx, and .xxx Èçìåíÿåò ñîñòîÿíèå èíäèâèäóàëüíûõ ïðåäóïðåæäàþùèõ ñîîáùåíèé. +xxx Âêëþ÷àåò ïðåäóïðåæäåíèå xxx -xxx Âûêëþ÷àåò ïðåäóïðåæäåíèå xxx .xxx Ïåðåêëþ÷àåò ñîñòîÿíèå äëÿ ïðåäóïðåæäåíèÿ xxx 1.5.2 Èäåíòèôèêàòîðà ïðåïðîöåññîðà ïðåäîïðåäåëÿåìûå ïðè êîìïèëÿöèè. Èìÿ __DATE__ Çíà÷åíèå Îïðåäåëåí êàê ñòðîêîâûé ëèòåðàë, ñîäåðæàùèé äàòó êîìïèëÿöèè ïðîãðàììû. __FILE__ __TIME__ __TURBOC__ __cplusplus _TCPLUSPLUS __COMPACT__ __HUGE__ __LARGE__ __MEDIUM__ __SMALL__ __TINY__ __CDECL__ __PASCAL__ __STDC__ Îïðåäåëåí êàê ñòðîêîâûé ëèòåðàë, ñîäåðæàùèé èìÿ êîìïèëèðóåìîãî ôàéëà. Îïðåäåëåí êàê ñòðîêîâûé ëèòåðàë, ñîäåðæàùèé âðåìÿ íà÷àëà êîìïèëÿöèè ïðîãðàììû. Îïðåäåëåí êàê íîìåð âåðñèè êîìïèëÿòîðà Îïðåäåëåíî ðàâíûì êàê <1> äëÿ C++. Îïðåäåëåíî êàê öåëàÿ êîíñòàíòà, ñîäåðæàùàÿ âåðñèþ C++. Êîìïàêòíàÿ ìîäåëü ïàìÿòè (M_I86CM) Î÷åíü áîëüøàÿ Áîëüøàÿ (M_I86LM) Ñðåäíÿÿ (M_I86MM) Ìàëàÿ (M_I86SM) Î÷åíü ìàëàÿ Ìàêðî, îïðåäåëåííîå ðàâíûì 1 - óêàçûâàåò íà òî, ÷òî ïðè âûçîâå ôóíêöèé èñïîëüçóåòñÿ ïðèíÿòûé â Ñè ïîðÿäîê ïåðåäà÷è ïàðàìåòðîâ. Ìàêðî, îïðåäåëåííîå ðàâíûì 1 - óêàçûâàåò íà òî, ÷òî ïðè âûçîâå ôóíêöèé èñïîëüçóåòñÿ ïðèíÿòûé â Pascal ïîðÿäîê ïåðåäà÷è ïàðàìåòðîâ. Óñòàíîâëåíî â 1, åñëè èñïîëüçóþòñÿ òîëüêî êëþ÷åâûå ñëîâà ANSI - ñòàíäàðòà. 1.6 Îïåðàòîðû Èìÿ break case continue default do else for goto if longjmp return Çíà÷åíèå Ïðåêðàùàåò âûïîëíåíèå áëèæàéøåãî âëîæåííîãî âíåøíåãî îïåðàòîðà do, for, switch, èëè while. Îöåíèâàåò <âûðàæåíèå> è âûïîëíÿåò ëþáîå óòâåðæäåíèå, ñâÿçàííîå ñ <ïîñòîÿííîéâûðàæåíèåì>. Åñëè íå èìååòñÿ íèêàêîãî ñîîòâåòñòâèÿ ñ ïîñòîÿííûì âûðàæåíèåì, óòâåðæäåíèå, ñâÿçàííîå ñ çàäàííûì ïî óìîë÷àíèþ êëþ÷åâûì ñëîâîì âûïîëíÿåòñÿ. Åñëè çàäàííîå ïî óìîë÷àíèþ êëþ÷åâîå ñëîâî íå èñïîëüçóåòñÿ, óïðàâëåíèå ïåðåõîäèò ê óòâåðæäåíèþ ïîñëå áëîêà ïåðåêëþ÷àòåëÿ. Ïåðåäàåò óïðàâëåíèå â íà÷àëî îïåðàòîðà öèêëà do, for, èëè while âûçûâàÿ ñëåäóþùóþ èòåððàöèþ. Îöåíèâàåò <âûðàæåíèå> è âûïîëíÿåò ëþáîå óòâåðæäåíèå, ñâÿçàííîå ñ <ïîñòîÿííîéâûðàæåíèåì>, êîòîðûå ñîîòâåòñòâóþò ïàðàì íà÷àëüíîãî âûðàæåíèÿ. Åñëè íå èìååòñÿ íèêàêîãî ñîîòâåòñòâèÿ ñ ïîñòîÿííûì âûðàæåíèåì òî óòâåðæäåíèå, ñâÿçàííîå ñ çàäàííûì ïî óìîë÷àíèþ êëþ÷åâûì ñëîâîì âûïîëíÿåòñÿ. Åñëè çàäàííîå ïî óìîë÷àíèþ êëþ÷åâîå ñëîâî íå èñïîëüçóåòñÿ, óïðàâëåíèå ïåðåõîäèò ê óòâåðæäåíèþ ïîñëå áëîêà ïåðåêëþ÷àòåëÿ do îïåðàòîð while(âûðàæåíèå); Âûïîëíÿåò <îïåðàòîð>, ïîêà <âûðàæåíèå> èñòèííî. Óñëîâèå ïðîâåðÿåòñÿ â êîíöå öèêëà. Âûïîëíÿåò <âûðàæåíèå1>, åñëè <âûðàæåíèå> èñòèííî (îòëè÷íî îò íóëÿ); åñëè else ïðèñóòñòâóåò, è <âûðàæåíèå> - ëîæíî (íóëü), âûïîëíÿåòñÿ <âûðàæåíèå2>. Ïîñëå âûïîëíåíèÿ <âûðàæåíèå1> èëè <âûðàæåíèå2>, óïðàâëåíèå ïåðåõîäèò ê ñëåäóþùåìó óòâåðæäåíèþ. for(init-expr; cond-expr; increment) îïåðàòîð; Âûïîëíÿåò <îïåðàòîð>, ïîêà èíèöèàëèçèðîâàííîå ÷èñëî <init-expr>, íàä êîòîðûì ïðîèçâîäèòñÿ îïåðàöèÿ <increment>, óäîâëåòâîðÿåò óñëîâíîìó âûðàæåíèþ <cond-expr>. Óïðàâëåíèÿ áåçóñëîâíî ïåðåäàåòñÿ íà îïåðàòîð ñ ìåòêîé <èìÿ:>. if (âûðàæåíèå) âûðàæåíèå1; [else âûðàæåíèå2;] Âûïîëíÿåò <âûðàæåíèå1>, åñëè <âûðàæåíèå> èñòèííî (îòëè÷íî îò íóëÿ); åñëè else ïðèñóòñòâóåò, è <âûðàæåíèå> - ëîæíî (íóëü), âûïîëíÿåòñÿ <âûðàæåíèå2>. Ïîñëå âûïîëíåíèÿ <âûðàæåíèå1> èëè <âûðàæåíèå2 >, óïðàâëåíèå ïåðåõîäèò ê ñëåäóþùåìó îïåðàòîðó. void longjmp(jmp_buf env, int value); Ïåðåäàåò óïðàâëåíèå ïî àäðåñó <env> ñ ïîðÿäêîâûì íîìåðîì <value>. Ïðåêðàùàåò âûïîëíåíèå òåêóùåé ôóíêöèè è âîçâðàùàåò óïðàâëåíèå âûçûâàþùåé ïðîãðàììå, ñ âîçìîæíîñòüþ ïåðåäà÷è çíà÷åíèÿ âûðàæåíèÿ. 6 setjmp switch while int setjmp(jmp_buf env); Çàïîìèíàåò â <env> àäðåññ òåêóùåãî ìåñòà â ïðîãðàììå äëÿ äàëüíåéøåãî âîçâðàòà ê íåìó ïîñðåäñòâîì longjmp. Ôóíêöèÿ âîçâðàùàåò ïîðÿäêîâûé íîìåð ñîõðàíåííîãî àäðåñà íà÷èíàÿ ñ «0». switch(âûðàæåíèå){ case êîíñòàíòà1: âûðàæåíèå1; [break;] case êîíñòàíòà(n): âûðàæåíèå(n); [break;] [default: âûðàæåíèå(n+1);] } Ñðàâíèâàåò <âûðàæåíèå> ñ êîíñòàíòàìè âî âñåõ âàðèàíòàõ case è âûïîëíÿåò îïåðàòîð ñâÿçàííûé ñ <ïîñòîÿííîé-âûðàæåíèåì>. Åñëè îòñóñòâóåò ñîîòâåòñòâèÿ ñ ïîñòîÿííûõ ñ âûðàæåíèÿìè òî âûïîëíÿåòñÿ óòâåðæäåíèå, ñâÿçàííîå ñ êëþ÷åâûì ñëîâîì default. Åñëè êëþ÷åâîå ñëîâî default íå èñïîëüçóåòñÿ òî óïðàâëåíèå ïåðåõîäèò ê óòâåðæäåíèþ ïîñëå áëîêà ïåðåêëþ÷àòåëÿ. while(âûðàæåíèå) îïåðàòîð; Âûïîëíÿåò <îïåðàòîð>, ïîêà <âûðàæåíèå> èñòèííî. 1.7 Математические функции - файл math. H Функция abs ANSI acos ANSI asin ANSI atan ANSI atan2 ANSI cabs ceil ANSI cos ANSI cosh ANSI div ANSI exp ANSI fabs ANSI floor ANSI fmod ANSI frexp ANSI frexpl hypot ANSI Прототип и краткое описание действий int abs(int i); Возвращает абсолютное значение целого аргумента i. double acos(double х); Функция арккосинуса. Значение аргумента должно находиться в диапазоне от-1 до +1. double asin(double х); Функция арксинуса. Значение аргумента должно находиться в диапазоне от -1 до +1 double atan(double х); Функция арктангенса. double atan2(double у, double х); Функция арктангенса от значения у/х. double cabs(struct complex znum); Вычисляет абсолютное значение комплексного числа znum. Определение структуры (типа) complex - в файле math.h. double ceil(double value); Îêðóãëåíèå ÷èñëà ñ ïëàâàþùåé òî÷êîé <value> äî áëèæàéøåãî öåëîãî. double cos(double х); Функция косинуса. Угол (аргумент) задается в радианах double cosh(double х); Возвращает значение гиперболического косинуса <х>. div_t div(int numer, int denom); Âûïîëíÿåò äåëåíèå <numer> íà <denom>. Ðåçóëüòàò âîçâðàùàåòñÿ â âèäå ñòðóêòóðû div_t. double exp(double x); Вычисляет значение еx (экспоненциальная функция). double fabs(double x); Возвращает абсолютное значение вещественного аргумента х двойной точности. double floor(double x); Находит наибольшее целое, не превышающее значения х. Возвращает его в форме doubl. double fmod (double x, double у); Возвращает остаток от деления нацело х на у. double frexp(double x, int *expptr); Ôóíêöèÿ âîçâðàùàåò ìàíòèñó è ýêñïîíåíòó <expptr> ÷èñëà <x>. long double frexpl(long double x, int *expptr);  îòëè÷èå îò frexp ýòà ôóíêöèÿ ðàáîòàåò ïåðåìåííûìè òèïà long double. ñ double hypot(double x, double у); Вычисляет гипотенузу z прямоугольного треугольника по значениям катетов x, у (z2 = x2 + у2) labs ANSI long labs(long x); Возвращает абсолютное значение целого аргумента long x. ldexp ANSI double Idexp(double v, int n); Возвращает значение выражения v*2n. ldiv ANSI ldiv_t ldiv(long int numer, long int denom); Âîçâðàùàåò ÷àñíîå è îñòàòîê îò äåëåíèÿ öåëîãî ÷èñëà <numer> íà <denom>. log ANSI double log(double x); Возвращает значение натурального логарифма (ln x). log10 ANSI double log10(double x); Возвращает значение десятичного логарифма (log10 x). _lrotl unsigned long _lrotl(unsigned long val, int count); Ñäâèãàåò âëåâî ÷èñëî <val> íà <count> áèòîâ. _lrotr unsigned long _lrotr(unsigned long val, int count); Ñäâèãàåò âïðàâî ÷èñëî <val> íà <count> áèòîâ. _matherr double _matherr(_mexcep why, char *fun, double *arg1p, double *arg2p, double retval); Ôóíêöèÿ âûçûâàåòñÿ âñÿêèé ðàç, êîãäà ïðè âûïîëíåíèè âû÷èñëåíèé ñ ïëàâàþùåé òî÷êîé îáíàðóæèâàåòñÿ îøèáêà êîòîðàÿ ïîìåùàåòñÿ â why (òàáëèöà À22). Ïîëå fun ñîäåðæèò óêàçàòåëü íà ñòðîêó èìåíè ôóíêöèè , ñòîëêíóâøåéñÿ ñ îøèáêîé è àðãóìåíòàìè <arg1p> è <arg2p>. Ýòà ôóíêöèÿ âûçûâàåò ïîëüçîâàòåëüñêóþ ôóíêöèþ îáðàáîòêè îøèáîê matherr() êîòîðàÿ ìîæåò óñòàíàâëèâàòü òî÷êó âûçîâà <retval> (â ìàòåìàòè÷åñêóþ ôóíêöèþ). matherr int matherr(struct expection *error_info); Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ îáðàáîòêè îøèáîê, êîòîðîé èç ôóíêöèè _matherr ïåðåäàåòñÿ óêàçàòåëü error_info íà ñòðóêòóðíóþ ïåðåìåííóþ ïî øàáëîíó struct expection. Ôåíêöèÿ äîëæíà âîçâðàùàòü <0> åñëè ïðîáëåìà íå ìîæåò áûòü óñòðàíåíà èëè èíîå çíà÷åíèå êîòîðîå ÷åðåç ïîëå retval ôóíêöèè _mather âåðíåòñÿ â ìàòåìàòè÷åñêóþ ôóíêöèþ. max type max(type a, type b); Âîçâðàùàåò áîëüøèé èç àðãóìåíòîâ <a> è <b>. min type min(type a, type b); Âîçâðàùàåò ìåíüøèé èç àðãóìåíòîâ <a> è <b>. modf ANSI double modf(double x, double *intptr); Âîçâðàùàåò äðîáíóþ ÷àñòü ÷èñëà <x> è ïðèñâàèâàåò öåëóþ ÷àñòü óêàçàííîé ïåðåìåííîé <intptr>. modfl long double modf(long double x, long double *intptr);  îòëè÷èå îò modf ýòà ôóíêöèÿ ðàáîòàåò ïåðåìåííûìè òèïà long double. ñ poly double poly(double x, int n, double c[ ]); Вычисляет значение полинома: c[n]xn + c[n - 1]xn-1 + ... + c[1]x + c[0] pow ANSI double pow (double x, double y); Возвращает значение хy т.е. x в степени у. pow10 double pow10(int p); Возвращает значение 10p. rand ANSI int rand(void); Âîçâðàùàåò ñëó÷àéíîå öåëîå ÷èñëî â èíòåðâàëå îò 0 äî RAND_MAX (îïðåäåëåííîãî â stdlib.h) random int random(int cel); Âîçâðàùàåò ñëó÷àéíîå öåëîå ÷èñëî â èíòåðâàëå îò 0 äî <cel>. randomiz void randomize(void); e Èñïîëüçóåòñÿ äëÿ îòáîðà ñëó÷àéíûõ ÷èñåë èñïîëüçóÿ òåêóùåå âðåìÿ íà ÷àñàõ ïðîöåññîðà _rotl unsigned long _rotl (unsigned long value, int count); Ïîáèòîâûé öèêëè÷åñêèé ñäâèã â ëåâî <value> íà <count> áèòîâ _rotr unsigned long _rotr (unsigned long value, int count); Ïîáèòîâûé öèêëè÷åñêèé ñäâèã â ïðàâî <value> íà <count> áèòîâ 7 getfat * [dos.h] sin ANSI double sin(double x); Функция синуса. Угол (аргумент) задается в радианах. sinh ANSI double sinh(double x); Возвращает значение гиперболического синуса для x. sqrt ANSI double sqrt(double x); Возвращает положительное корня от х. srand ANSI void srand(unsigned seed); Функция óñòàíîâêè íà÷àëüíîãî çíà÷åíèÿ <seed> äëÿ генератора случайных чисел (rand). tan ANSI double tan(double x); Функция тангенса. радианах. tanh ANSI double tanh(double x); Возвращает гиперболического тангенса для x. Угол значение (аргумент) квадратного задается в Òàáëèöà À22 - Îøèáêè ìàòåìàòè÷åñêèõ îïåðàöèé Êîíñòàíòà Çíà÷åíèå DOMAIN Îøèáêà äèàïàçîíà çàäàíèÿ àðãóìåíòà SING Òî÷êà ñèíãóëÿðíîñòè ( ïëþñ èëè ìèíóñ áåñêîíå÷íîñòü) OVERFLOW Ïåðåïîëíåíèå UNDERFLO Ïîòåðÿ çíà÷èìîñòè (îòðèöàòåëüíîå W ïåðåïîëíåíèå) TLOSS Ïîëíàÿ ïîòåðÿ çíà÷èìîñòè PLOSS ×àñòè÷íàÿ ïîòåðÿ çíà÷èìîñòè 1.8 Ôóíêöèè äëÿ ðàáîòû ñ äèñêàìè, äèðåêòîðèÿìè è ôàéëàìè 1.8.1 Ôóíêöèè äëÿ ðàáîòû ñ äèñêàìè abswrite * [dos.h] biosdisk * [bios.h] _dos_getdi skfree [dos.h] _dos_getd rive [dos.h] _dos_setdr ive [dos.h] 1.8.2 Ôóíêöèè äëÿ ðàáîòû ñ äèðåêòîðèÿìè значение * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ Ôóíêöèÿ absread * [dos.h] void getfat(unsigned drive, struct fatinfo *fat); Ôóíêöèÿ âîçâðàùàåò ñòðóêòóðó <fatinfo> äëÿ äèñêà <drive>. Ñòðóêòóðà ñîäåðæèò èíôîðìàöèþ î FAT. getfatd * void getfatd(struct fatinfo *fat); [dos.h] Ôóíêöèÿ âîçâðàùàåò ñòðóêòóðó <fatinfo> äëÿ òåêóùåãî äèñêà . Ñòðóêòóðà ñîäåðæèò èíôîðìàöèþ î FAT. named_bio int named_bios_disk(struct diskinfo_t *info); s_disk * Ïîäîáíà ôóíêöèè biosdisk êðîìå òîãî ÷òî âñÿ [bios.h] èíôîðìàöèÿ ââîäèòñÿ è âûâîäèòñÿ ÷åðåç óêàçàòåëü íà ñòðóêòóðó <info>. * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ Прототип и краткое описание действий int absread (int drive, int num_sec, long start_sec, void *buffer); Ôóíêöèÿ ñ÷èòûâàåò ñ äèñêà <drive> <num_sec> ñåêòîðîâ, íà÷èíàÿ ñ <start_sec>, â áóôåð óêàçàííûé <buffer>. int abswrite (int drive, int num_sec, long start_sec, void *buffer); Ôóíêöèÿ çàïèñûâàåò íà äèñêà <drive> <num_sec> ñåêòîðîâ, íà÷èíàÿ ñ <start_sec>, èç áóôåðà óêàçàííîãî <buffer>. int biosdisk(int operation, int drive, int head, int track, int sec, int sec_count, void *buff); Óíèâåðñàëüíàÿ ôóíêöèÿ âûïîëíÿåìàÿ îïåðàöèÿ êîòîðîé óêàçûâàåòñÿ â <operation>.  ïàðàìåòðå <drive> óêàçûâàåòñÿ íîìåð óñòðîéñòâà (1-‘A’, 2-‘B’, C-0x80, D-0x81 ...).  <head> - íîìåð ãîëîâêè.  <track> - íîìåð äîðîæêè.  <sec> - íîìåð ñåêòîðà.  <sec_count> - êîëè÷åñòâî ñåêòîðîâ. Ïàðàìåòð <buff> - óêàçàòåëü íà áóôåð ñîäåðæàùèé ñ÷èòàííûå èëè çàïèñûâàåìûå äàííûå.  ñëó÷àå îøèáêè âîçâðàùàåòñÿ íåíóëåâîé êîä îøèáêè. unsigned _dos_getdiskfree(unsigned drive, struct diskfree_t *diskspace); Ôóíêöèÿ âîçâðàùàåò ñòðóêòóðó <diskfree_t> äëÿ äèñêà <drive>. Ñòðóêòóðà ñîäåðæèò èíôîðìàöèþ î ñâîáîäíîé ïàìÿòè. void _dos_getdrive(unsigned *drive); Ïðèñâàèâàåò íîìåð òåêóùåãî óñòðîéñòâà ïåðåìåííîé <drive>, ïðè÷åì íîìåð 1 ñîîòâåòñòâóåò устройству ‘A’. void _dos_setdrive(unsigned drive, unsigned *numdrives); Ôóíêöèÿ ïðåäíîçíà÷åíà äëÿ óñòàíîâêè òåêóùåãî äèñêà <drive>. Êðîìå òîãî ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî äèñêîâûõ óñòðîéñòâ â ñèñòåìå <numdrives>. Ôóíêöèÿ chdir POSIX 1003.1 closedir POSIX 1003.1 ftw getcwd POSIX 1003.1 mkdir POSIX 1003.1 opendir POSIX 1003.1 readdir POSIX 1003.1 rewinddir rmdir POSIX 1003.1 Íàçíà÷åíèå int chdir(char *dirname); Èçìåíÿåò òåêóùóþ äèðåêòîðèþ íà óêàçàííóþ <dirname>. void closedir(DIR *directory); Çàêðûâàåò äèðåêòîðèþ îïèñàíóþ â ñòðóêòóðå <directory>. int ftw(char *path, int(*func)(), int depth); Сканирует дерево директорий начиная с path. В процессе сканирования вызываеться функция пользователя func для каждого элемента. Depth – максимальное число используемых функцией дескрипторов. char *getcwd(char *buffer, int size); Возвращает имя текущуй рабочей директории – в buffer размером size, иначе возвращает адрес буфера с путем если buffer = NULL. int mkdir(char *dirname); Ñîçäàåò ïîääèðåêòîðèþ ñ ïîëíûì ïóòåì <dirname> [mkdir(«C:\\DATA»)]. DIR *opendir(char dir_name); Ôóíêöèÿ âîçâðàùàåò óêàçàòåëü íà ñòðóêòóðó DIR äëÿ îòêðûâàåìîé äèðèêòîðèè ñ ïîëíûì ïóòåì <dir_name>. struct dirent readdir(DIR *dir_point); Ôóíêöèÿ âîçâðàùàåò ïðî÷èòàííóþ çàïèñü äèðåêòîðèè <dir_point> â âèäå ñòðóêòóðû dirent. void rewinddir(DIR *dir_point); Óñòàíàâëèâàåò óêàçàòåëü ñîäåðæèìîãî äèðåêòîðèè <dir_point> íà ïåðâóþ çàïèñü ÷òî ïîçâîëÿåò ïåðå÷èòàòü ñîäåðæèìîå ñíà÷àëà. int rmdir(char *dirname); Óäàëåíèå ïîääèðåêòîðèè ñ ïîëíûì ïóòåì <dirname>. [rmdir(«C:\\DATA»)]. 1.8.3 Äîñòóï ê ôàéëàì Ôóíêöèÿ access POSIX 1003.1 _chmod chmod POSIX 1003.1 chown *NIX Прототип и краткое описание действий int access(char *pathname, int mode); Îïðåäåëÿåò âîçìîæíîñòü âûïîëíåíèÿ òðåáóåìîãî äîñòóïà <mode> ê ôàéëó <pathname>. Ïàðàìåòð <mode> çàäàåò ðåæèì äîñòóïà: 0 - Ïðîâåðêà, ñóùåñòâóåò ëè ôàéë; 2 - Ïðîâåðêà íàëè÷èÿ äîñòóïà íà çàïèñü; 4 - Ïðîâåðêà íàëè÷èÿ äîñòóïà íà ÷òåíèå; 6 - Ïðîâåðêà ðàçðåøåíèÿ íà ÷òåíèå/çàïèñü. int _chmod(char *filename, int operation [, int attribute]); Óñòîíàâëèâàåò èëè ïîëó÷àåò àòðèáóò <attribute> äîñòóïà ê ôàéëó <filename>. <attribute>: FA_ARCH, FA_DIREC, FA_HIDDEN, FA_LABEL, FA_RONLY, FA_SYSTEM. <operation> - îïðåäåëÿåò óñòàíîâêó èëè ïîëó÷åíÿ àòðèáóòà ôàéëà (0 - âîçâðàùàåò òåêóùèé àòðèáóò, 1 - óñòàíàâëèâàåò óêàçàííûé àòðèáóò). int chmod(char *filename, int pmode); Óñòàíàâëèâàåò ðåæèì äîñòóïà <pmode> (òàáëèöà À2) äëÿ ôàéëà <filename>. int chown(char *name,int owner, int group); Изменение владельца файла name на владельца owner группы пользователей group. 8 chroot *NIX chsize close POSIX 1003.1 creat POSIX 1003.1 creatnew * _dos_get fileattr _dos_setf ileattr dup POSIX 1003.1 dup2 POSIX 1003.1 eof fclose ANSI fcloseall fcntl fdopen POSIX 1003.1 ferror ANSI filelength fopen ANSI freopen ANSI _fsopen _fullpath ioctl *NIX link POSIX int chroot(char *pathname); Изменение точки корневого каталога для процесса на pathname. int chsize(int handle, long size); Ôóíêöèÿ óñòàíàâëèâàåò ðàçìåð <size> ôàéëà <handle>. int close(int handle); Çакрывает файл <handle>. Или уменьшает счетчик ссылок если его используют другие процессы. int creat(chsr *filename, int pmode); Ôóíêöèÿ ñîçäàåò ôàéë <filename> ñ ðåæèìîì ñîçäàíèÿ <pmode> (òàáëèöà À2). int creatnew(char *pathname, int attr); Ñîçäàåò ôàéë ñ èìåíåì <filename> è àòðèáóòàìè <attr> (òàáëèöà À7), åñëè ôàéë åùå íå ñóùåñòâóåò. int _dos_getfileattr(char *pathname, unsigned *attrib); Ïîëó÷åíèå àòðåáóòà <attrib> (òàáëèöà À7) ôàéëà <pathname>. int _dos_setfileattr(char *pathname, unsigned *attrib); Óñòàíîâêà àòðèáóòà <attrib> (òàáëèöà À7) äëÿ ôàéëà <pathname>. int dup(int handle); Êîïèðóåò èäåíòèôèêàòîð îòêðûòîãî ôàéëà <handle> в минимальный свободный номер дескриптора. int dup2(int source, int target); Ïåðåíàçíà÷àåò èäåíòèôèêàòîð ôàéëà <target> â èäåíòèôèêàòîð <source>. int eof(int handle); Возвращает ‘1’, если достигнут конец файлà, определенного идентификатором <handle>, иначе ‘0’. int fclose(FILE *ïîòîê); Ôóíêöèÿ çàêðûâàåò îòêðûòûé <ïîòîê>. int fcloseall(void); Ôóíêöèÿ çàêðûâàåò âñå îòêðûòûå ôàéëû. int fcntl (int fildes, int cmd, int arg); Выполняет управляющую операцию cmd (А24), с аргументами arg, над открытым файлом fildes. FILE *fdopen(int handle,char *type); Ôóíêöèÿ ñâÿçûâàåò ïîòîê ââîäà-âûâîäà ñ èäåíòèôèêàòîðîì <handle> îòêðûòîãî ôàéëà â ðåæèìå <type> (òàáëèöà À1), òàêèì îáðàçîì ïîçâîëÿÿ ôàéëó áûòü îòêðûòûì äëÿ íèçêî óðîâíåâîãî ââîäà-âûâîäà , êîòîðûé áóôåðèçèðîâàí è ôîðìàòèðîâàí. Ïðè óñïåøíîì âûïîëíåíèè âîçâðàùàåòñÿ óêàçàòåëü íà ïîòîê. int ferror(FILE *stream); Ïðîâåðÿåò íàëè÷èå îøèáêè ÷òåíèÿ/çàïèñè â ôàéëå <stream>.  ñëó÷àå îøèáêè âîçâðàùàåòñÿ çíà÷åíèå «èñòèíà», ïîêà â ïðîãðàììå íå áóäåò âûäàíà ìàêðîêîìàíäà clearerr. long filelength(int handle); Ïðè óñïåøíîì çàâåðøåíèè âîçâðàùàåòñÿ ðàçìåð ôàéëà <handle>. FILE *fopen(char *èìÿ_ôàéëà, char *ðåæèì); Ôóíêöèÿ, îòêðûâàåò ïîòîê ââîäà-âûâîëà ñ ôàéëîì, îïðåäåëåííûì <èìåíåì_ôàéëà> â ðåæèìå <ðåæèì> (òàáëèöà À1). FILE *freopen (char *èìÿ_ôàéëà, char ðåæèì, FILE *ïîòîê); Ôóíêöèÿ çàêðûâàåò ôàéë, â íàñòîÿùåå âðåìÿ ñâÿçàííûé ñ <ïîòîêîì> è ïåðåíàçíà÷àåò <ïîòîê> ê ôàéëó, îïðåäåëåííîìó <èìåíåì_ôàéëà> â ðåæèìå <ðåæèì> (òàáëèöà À1). Ôóíêöèÿ freopen îáû÷íî èñïîëüçóåòñÿ, ÷òîáû ïåðåíàçíà÷èòü ôàéëû stdin, stdout, è stderr ê ôàéëàì, îïðåäåëåííûì ïîëüçîâàòåëåì. FILE *_fsopen(char *filename, char *mode, int shflag); Îòêðûâàåò ôàéë <filename> ñ ðåæèìàìè: äîñòóïà <mode> (òàáëèöà À1) è ðàçäåëåíèÿ <shflag> (òàáëèöà À6).Ôóíêöèÿ âîçâðâùàêò óêàçàòåëü íà ôàéëîâûé ïîòîê äîñòóïíûé îäíîâðåìåííî íåñêîëüêèì ïðîãðàìàì. char *_fullpath(char *buff, char *pathname, size_t maxlen); Ôóíêöèÿ ïîìåùàåò ïîëíîå èìÿ ôàéëà â <buff> äëÿ âõîäíîãî èìåíè ôàéëà <pathname>, ïðè ìàêñèìàëüíîì ÷èñëå ñèìâîëîâ â áóôåðå <maxlen>. int ioctl(int fildes, int comand, …[char *arg]); Выполнить над дескриптором файла fildes команду comand (А24) с аргументами arg. int link(char *source, char *target); Создание жесткой ссылку target на файл source. lock * locking lseek POSIX 1003.1 fseek ANSI _makepa th mkfifo *NIX mknod *NIX mount *NIX open POSIX 1003.1 pathconf fpathconf *NIX pclose *NIX pipe *NIX popen *NIX read POSIX 1003.1 readv readlink POSIX remove ANSI rename ANSI rewind ANSI _searche nv searchpa th int lock(int handle, long st_pos, long byte_count); Áëîêèëóåò ó÷àñòîê ôàéëà <handle> ðàçìåðîì <byte_count> íà÷èíàÿ ñ ïîçèöèè <st_pos>. Ôàéë äîëæåí áûòü îòêðûò sopen â ðåæèìå ðàçäåëåííîãî äîñòóïà. int locking(int handle, int mode, long nbytes); Áëîêèëóåò ó÷àñòîê ôàéëà <handle> ðàçìåðîì <nbytes> íà÷èíàÿ ñ òåêóùåé ïîçèöèè â ðåæèìå áëîêèðîâêè <mode> (òàáëèöà À9). long lseek(int handle, long offset, int origin); int fseek (FILE *ïîòîê, long offset, int origin); Óñòàíîâèòü óêàçàòåëü ôàéëà handle, ïîòîê â ïîçèöèþ îïðåäåëåííóþ ïîçèöèåé ôàéëà <origin> (òàáëèöà À5) è ñìåùåíèåì <offset> â áàéòàõ îò íåå. Возвращает текущую позицию. void _makepath(char *path, char *drive, char *dir, char *fname, char *ext); Âûäåëÿåò èç ïîëíîãî èìåíè ôàéëà <path> èíôîðìàöèþ î: äèñêå <drive>, ïîääèðåêòîðèè <dir>, èìåíè <fname> è ðàñøèðåíèå ôàéëà <ext>. int mkfifo(char *pathname, mode_t mode); Создает именованный канал pathname с правами доступа mode. int mknod(char *name,int type_perm,int dev); Создает в системе специальный файл name, с типом и доступом type_perm, а dev указывает старший и младший номера устройства для блочных и символьных специальных файлов. int mount(char *sp_name, char *dr_name, int option); Монтирует специальную файловую систему sp_name как dr_name c опциями option. int open(const char *filename, int oflag [, int pmode]); Открывает файл, на которûé указывает <filename>, в режиме äîñòóïà <oflag> (òàáëèöå À4) и ðåæèìå ñîçäàíèÿ <pmode> (òàáëèöà À2).  ñëó÷àå îøèáêè errno ïðèíèìàåò îäíî èç çíà÷åíèé òàáëèöè À3. long int pathconf(char *pathname, int name); long int fpathconf(int filedes, int name); Запрос ограничения name у файла pathname, filedes. int pclose(FILE *hd); Закрыть канал hd, открытый popen. void pipe(fd2 *fdptr); (fd2=int[2];) Создает канал fdptr первое число нандлер для чтения, второе, для записи. FILE *popen ( char * command, char *type ); Открытие канала с системной командой command c доступом (А1). int read(int handle, void *buffer, unsigned count); int readv(int hd, struct iovec *vector, unsigned count); Ôóíêöèÿ ñ÷èòûâàåò èç ôàéëà îïðåäåëåííîãî èäåíòèôèêàòîðì <handle> ÷èñëî áàéòîâ <count> â áóôåð <buffer>. int readlink(char *sympath, char *buffer, size_t bufsize); Чтение содержимого файла символьной ссылки sympath в буфер buffer длинной bufsize. Читаеться указатель на файл. int remove(char *filename); Óäàëåíèå ôàéëà <filename>. int rename(char *old_name, char *new_name); Ôóíêöèÿ ïåðåèìåíîâàíèÿ èëè ïåðåñûëêè ôàéëà <old_name> â <new_name>. void revind (FILE *ïîòîê); Ôóíêöèÿ óñòàíàâëèâàåò óêàçàòåëü ôàéëà, ñâÿçàííûé ñ <ïîòîêîì> â íà÷àëî ôàéëà.Ôóíêöèÿ rewind î÷èùàåò êîíåö ôàéëà è èíäèêàòîðû îøèáîê äëÿ ïîòîêà. Âû ìîæåòå òàêæå èñïîëüçîâàòü ôóíêöèþ rewind äëÿ î÷èñòêè áóôåðà êëàâèàòóðû (stdin). char *_searchenv(char *file, char *varname, char *pathname); Ïðîñìàòðîâàåò äèðåêòîðèè, óêàçàííûå â ïåðåìåííîé ñðåäû <varname>, äëÿ ïîèñêà ôàéëà <file>. Åñëè ôàéë íàéäåí, òî ôóíêöèÿ êîïèðóåò ïîëíîå èìÿ ôàéëà â áóôåð <pathname> è âîçâðàùàåò óêàçàòåëü íà ýòó ïåðåìåííóþ. char *searchpath(char *file); Âîçâðàùàåò ïîëíûé ïóòü ê èñêîìîìó ôàéëó <file> åñëè îí íàéäåí. Ïîèñê ïðîèçâîäèòñÿ ïî ïåðåìåííîé ñðåäû PATH. 9 select *NIX int select(int n, fd_set *rdfds, fd_set *wdfds, fd_set *edfds, timeval *timeout); Переводит процесс в ожидание событий по n дескрипторам на время timeout. По каким дескрипторам ожидать, устанавливается в битовых полях rdfds – есть готовые данные, wdfds – возможна запись, edfds – существуют исключительные условия. При выходе по событию устанавливаються биты соответствующих дескрипторов. Для работ с битами используються макросы: void FDZERO(fd_set *fdset)- Инициализация; void FD_CLR( int fd, fd_set *fdset) – Сброс бита; void FD_SET(int fd,fd_set *fdset) – Установка бита; void FD_ISSET(int fd, fd_set *fdset) – Проверка бита setbuf void setbuf(FILE *ïîòîê, char *áóôåð); ANSI Ôóíêöèÿ íàçíà÷àåò íîâûé áóôåð <áóôåð> äëÿ îòêðûòîãî ôàéëà <ïîòîê>. Åñëè <áóôåð> - NULL, òî äàííûå íå áóôåðèçèðóþòñÿ. setmode int setmode(int handle, int mode); Èçìåíåíèå ðåæèìà <mode> (òàáëèöà À4) îáðàáîòêè ôàéëà <handle>. setvbuf int setvbuf(FILE *ïîòîê, char *áóôåð, int ðåæèì, int ANSI ðàçìåð); Ôóíêöèÿ íàçíà÷àåò íîâûé áóôåð <áóôåð> ðàçìåðîì<ðàçìåð> äëÿ îòêðûòîãî ôàéëà <ïîòîê> c ðåæèìîì <ðåæèì> (òàáëèöà À8). Åñëè <áóôåð> NULL, òî äàííûå íå áóôåðèçèðóþòñÿ. sopen int sopen(char *filename, int oflag, int shflag [, pmode]); Îòêðûâàåò ôàéë <filename> ñ ðåæèìàìè: äîñòóïà <oflag> (òàáëèöà À4), ñîçäàíèÿ <pmode> (òàáëèöà À2) è ðàçäåëåíèÿ <shflag> (òàáëèöà À6). Îòêðûòûé ôàéë äîñòóïåí îäíîâðåìåííî íåñêîëüêèì ïðîãðàìàì ( ïðîãðàììà SHARE). _splitpat void _splitpath(char *path, char *drive, char *dir, char h *fname, char *ext); Îïðåäåëÿåò èç ïîëíîãî èìåíè ôàéëà <path>: äèñê <drive>, ïîääèðåêòîðèþ <dir>, èìÿ <fname> è ðàñøèðåíèå ôàéëà <ext>. stat int stat(char *pathname, struct stat *buffer); fstat int fstat(int handle, struct stat *buffer); POSIX Ôóíêöèÿ âîçâðàùàåò ïàðàìåòðû ôàéëà pathname, 1003.1 handle â ñòðóêòóðó òèïà stat buffer. statvfs int statvfs(char *path, struct statvfs *buf); fstatvfs int fstatvfs(int fd, struct statvfs *buf); *NIX Возвращает информацию о файловой системе path, fd в буфер buf; simlink int simlink(char *source, char *target); POSIX Создание символьную ссылку target на файл source. sync void sync(void); fsync int fsync(int filedes); *NIX Сброс на диск всего буфера памяти и только части касающейся filedes. Для sync - ставит в планировщик для сброса, а для fsync – не выходит пока не запишет. tell long tell(int handle); ftell long ftell(FILE *stream); Âîçâðàùàåò ïîëîæåíèå, òåêóùåé ïîçèöèè óêàçàòåëÿ (îò íà÷àëà), äëÿ ôàéëà îïðåäåëåííîãî èäåíòèôèêàòîðì handle, stream. umask int umask(int pmode); POSIX Ôóíêöèÿ äàåò âîçìîæíîñòü èçìåíèòü ðåæèì 1003.1 <pmode> (òàáëèöà À2) äîñòóïà ê îòêðûâàåìûì â äàëüíåéøåì ôàéëàì. unlink int unlink(char *n_file); *NIX Удаление ссылки n_file. umount void umount(char *sp_name); *NIX Демонтирует специальную файловую систему sp_name write int write(int handle, void *buffer, unsigned count); POSIX int writev(int hd, struct iovec *vector, unsigned count); 1003.1 Ôóíêöèÿ çàïèñûâàåò â ôàéë îïðåäåëåííûé writev ??? èäåíòèôèêàòîðì <handle> ÷èñëî áàéòîâ <count> èç áóôåðà <buffer>. Ïðè óñïåøíîì âûïîëíåíèè ôåíêöèÿ âîçâðàùàêò êîëè÷åñòâî çàïèñàíûõ áàéòîâ. * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ Таблица А24 – Допустимые команды ioctl Êîманда Çíà÷åíèå F_DUPFD Создать новый дескриптор для данного файла. F_GETFD Получить значение флага "закрыть при выполнении вызова exec". F_SETFD Установить значение флага "закрыть при выполнении вызова exec" равным значению младшего бита (0 или 1) аргумента arg. Получить флаги статуса данного файла. Установить флаги статуса данного файла. Получить характеристики первой блокировки мешающей установить новую блокировку, задаваемую структурой типа flock с адресом arg. F_SETLK Установить или снять блокировку сегмента файла в соответствии со значением структуры типа flock, на которую указывает аргумент arg. F_SETLKW Отличается от F_SETLK только тем, что при неудачной попытке установить блокировку на чтение или запись процесс переходит в состояние ожидания. TCGETA Получить информацию о терминале в структуру termio. TCSETAF Установить настройки терминала из структуры termio. TIOCGWI Получить размер экрана. NSZ F_GETFL F_SETFL F_GETLK Òàáëèöà À8 - Äîïóñòèìûå ðåæèìû áóôеðèçàöèè, èñïîëüçóåìûå ôóíêöèåé _setvbuf Êîíñòàíòà Çíà÷åíèå _IOFBF Ïîëíàÿ áóôåðèçàöèÿ. Ïðè ââîäå, êîãäà áóôåð ïóñò, ñëåäóþùàÿ îïåðàöèÿ ñ÷èòûâàíèÿ ïûòàåòñÿ åãî çàïîëíèòü. Ïðè âûâîäå äàííûå íå çàïèñûâàþòñÿ íà äèñê, ïîêà áóôåð íå çàïîëíèòñÿ. _IOLBF Áóôåðèçàöèÿ ïî ñòðîêàì. Ïðè ââîäå, êîãäà áóôåð ïóñò, ñëåäóþùàÿ îïåðàöèÿ ñ÷èòûâàíèÿ ïûòàåòñÿ åãî çàïîëíèòü. Ïðè âûâîäå äàííûå íå çàïèñûâàþòñÿ íà äèñê, ïîêà áóôåð íå çàïîëíèòñÿ èëè ïîêà íå âñòðåòèòñÿ êîíåö ñòðîêè. _IONBF Áóôåðèçàöèÿ îòìåíÿåòñÿ. Ïðîãðàììà âûïîëíÿåò ïðÿìîé ââîä-âûâîä. Òàáëèöà À7 - Êîíñòàíòû äëÿ óñòàíîâêè àòðèáóòîâ ôàéëà Êîíñòàíòà Çíà÷åíèå _A_ARCH Àðõèâíûé ôàéë _A_HIDDEN Ñêðûòûé ôàéë _A_NORMAL Íîðìàëüíûé _A_RONLY Òîëüêî ÷òåíèå _A_SUBDIR Àðõèâíàÿ äèðåêòîðèÿ _A_SYSTEM Ñèñòåìíûé ôàéë _A_VOLID Ìåòêà òîìà äèñêà Àòðèáóòû äëÿ ôàéëîâûõ ïîòîêîâ FA_RDONLY Ôàéë òîëüêî äëÿ ÷òåíèÿ FA_HIDDEN Ñêðûòûé ôàéë FA_SYSTEM Ñèñòåìíûé ôàéë Òàáëèöà À4 - Ðåæèìû äîñòóïà ê ôàéëó, èñïîëüçóåìûå ôóíêöèåé open Ðåæèì Çíà÷åíèå O_RDONLY Òîëüêî ÷òåíèå O_WRONLY Òîëüêî çàïèñü O_RDWR ×òåíèå è çàïèñü O_NDELAY Файл открываеться без ожидания несущей (èñïîëüçóåòñÿ UNIX) O_NONBLOCK Не блокировать программу O_APPEND Óêàçàòåëü ôàéëà íàñòðàèâàåòñÿ íà îïåðàöèè äîáàâëåíèÿ (óñòàíàâëèâàåòñÿ íà êîíåö ôàéëà) O_CREAT Создавать файл при его отсутствии. O_TRUNC Óíè÷òîæåíèå ñîäåðæèìîãî ñóùåñòâóþùåãî ôàéëà O_EXCL Åñëè óêàçàíî O_CREAT è ôàéë ñóùåñòâóåò, òî âîçâðàùàåòñÿ îøèáêà O_BINARY Ðåæèì «äâîè÷íûé ôàéë» O_TEXT Ðåæèì «òåêñòîâûé ôàéë» Òàáëèöà À6 - Êîíñòàíòû ñîâìåñòíîãî èñïîëüçîâàíèÿ Êîíñòàíòà Çíà÷åíèå SH_COMPAT Óñòàíîâêà ñîâìåñòèìîãî ðåæèìà SH_DENYRW Îòðèöàåò äîñòóï ê ôàéëó íà ÷òåíèå è çàïèñü SH_DENYWR Îòðèöàåò äîñòóï ê ôàéëó íà çûïèñü SH_DENYRD Îòðèöàåò äîñòóï ê ôàéëó íà ÷òåíèå SH_DENYNO Ðàçðåøàåò äîñòóï ê ôàéëó íà ÷òåíèå è çàïèñü O_NOINHERIT Файл не унаследовал дочерний процесс(только _dos_open) 10 Òàáëèöà A3 - Êîäû îøèáîê ïðèñâàèâàåìûå ãëîáàëüíîé ïåðåìåíîé errno Êîíñòàíòà Çíà÷åíèå E2BIG Ñëèøêîì äëèííûé ñïèñîê àðãóìåíòîâ EACCES Îøèáêà äîñòóïà ê ôàéëó EBADF Íåâåðíûé èäåíòèôèêàòîð ôàéëà ECONTRL Îøèáêà â óïðàâëÿþùèõ áëîêàõ ïàìÿòè ECURDIR Ïîïûòêà óäàëåíèÿ òåêóùåé äèðåêòîðèè EDEADLOCK Ôàéë íå ìîæåò áûòü çàáëîêèðîâàí ïîñëå 10 ïîïûòîê EDOM Àðãóìåíò íàðóøàåò îáëàñòü äîïóñòèìûõ çíà÷åíèé EEXIST Ôàéë ñóùåñòâóåò EFAULT Íåðàñïîçíàâàåìàÿ îøèáêà EINVACC Íåâåðíûé êîä äîñòóïà EINVAL Íåïðàâåëüíûé àðãóìåíò EINVDAT Íåäåéñòâèòåëüíûå äàííûå äëÿ àðãóìåíòà EINVDRV Íåäåéñòâèòåëüíàÿ ñïåöèôèêàöèÿ óñòðîéñòâà EINVENT Íåäåéñòâèòåëüíàÿ ñðåäà EINVFMT Íåäåéñòâèòåëüíûé ôîðìàò àðãóìåíòà EINVFNC Íåäåéñòâèòåëüíûé íîìåð ôóíêöèè EINVMEM Óêàçàí íåäåéñòâèòåëüíûé áëîê ïàìÿòè ENFILE Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ ENMFILE Íåò áîëåå ôàéëîâ ENODEV Íåò òàêîãî óñòðîéñòâà ENOENT Ôàéë èëè äèðåêòîðèÿ íåäåéñòâèòåëåí ENOEXEC Îøèáêà ôîðìàòà â EXEC ENOFILE Ôàéë èëè äèðåêòîðèÿ îòñóòñòâóþò ENOMEM Íåäîñòàòî÷íî ïàìÿòè ENOPATH Ìàðøðóò íå íàéäåí ENOTSAM Óñòðîéñòâî íå ÿâëÿåòñÿ òåì æå ñàìûì ERANGE Ðåçóëüòàò ôóíêöèè - âíå ãðàíèö äîïóñòèìûõ çíà÷åíèé EXDEV Ïåðåêðåñòíî ñâÿçàííîå óñòðîéñòâî ZERO Îøèáêà íóëÿ Òàáëèöà À5 - Ïîçèöèè ôàéëà, îòíîñèòåëüíî êîòîðûõ ðàñìàòðèâàåòñÿ ñìåùåíèå. Êîíñòàíòà Çíà÷åíèå SEEK_CUR Îòíîñèòåëüíî òåêóùåé ïîçèöèè SEEK_SET Îòíîñèòåëüíî íà÷àëà ôàéëà SEEK_END Îòíîñèòåëüíî êîíöà ôàéëà Òàáëèöà À2 - Êîíñòàíòû ðåæèìîâ ñîçäàíèÿ ôàéëà Íàèìåíîâàíèå Îïèñàíèå S_IWRITE Ñîçäàíèå ôàéëà äëÿ îïåðàöèè çàïèñè S_IREAD Ñîçäàíèå ôàéëà äëÿ îïåðàöèè ÷òåíèÿ S_IRUSR Владелец имеет доступ для чтения S_IWUSR Владелец имеет доступ для записи S_IXUSR Владелец может выполнять файл S_IRGRP Группа имеет доступ для чтения S_IWGRP Группа имеет доступ для записи S_IXGRP Группа может выполнять файл S_IROTH Другие пользователи имеет доступ для чтения S_IWOTH Другие пользователи имеет доступ для записи S_IHOTH Другие пользователи может выполнять файл S_ISUID Задать user-id при выполнении S_ISGID Задать group-id при выполнении S_ISVTX Сохранить сегмент кода (бит фиксации) S_IFBLK Блочное устройство (060000) S_IFCHR Симольное устройство (020000) Òàáëèöà Òèï ñòðîêè "r" "w" "a" A1 - Ðåæèìû äîñòóïà ê ôàéëó open/sopen Îïèñàíèå ýêâèâàëåíòíîå çíà÷åíèå O_RDONLY Открытие ôàéëà для чтения. O_WRONLY (îáû÷íî Îткрытие пустого файла O_WRONLY | для записи. Если данный файл O_CREAT | O_TRUNC) существует, содержèìîå уничтожается. O_WRONLY | Открывает для записи в O_APPEND (обычно конец файла (доáàâëåíèå); O_WRONLY | создает файл если он O_CREAT | отсутствует. O_APPEND) "r+" O_RDWR "w+" O_RDWR (обычно O_RDWR | O_CREAT | O_TRUNC) "a+" Открытие файла для чтения и записи. Открывает пустой файл для чтения и записи. Если данный файл существует, содержèìîå уничтожается. Тот же что и "a", однако ðàçðåøàåòñÿ чтение. O_RDWR | O_APPEND (обычно O_RDWR | O_APPEND | O_CREAT) Äîïîëíèòåëüíûå ñèìâîëû "t" èëè "b" äîáàâëÿåìûå ê çíà÷åíèÿì, ïåðå÷èñëåííûì âûøå â ñòðîêó <ðåæèì> "t" O_TEXT Открывает в текстîâîì (транслируемîì) режимå. В этом режиме, перевод строки и возврат каретки (CR-LF) транслируется в одиночныìè переводàìè строки (LF) на вводе, à символы LF транслируются в CR-LF на выводе. Êðîìå òîãî CTRL + Z интерпретируется как символ конца файла на вводе. В файлах, открытых для чтения или чтения / записи, fopen проверяет íà CTRL + Z в конце файла, и удаляет его. . "b" O_BINARY Открывается в двоичном (не транслируемом) режиме. Вышеупомянутые трансляции подавлены. Если t или b не данû в типе òî режим трансляции определÿåòñÿ переменной заданнîé ïо умолчанию. Òàáëèöà À9 - Êîìàíäû, èñïîëüçóåìûå ôóíêöèåé locking Êîíñòàíòà Çíà÷åíèå LK_LOCK Áëîêèðîâàíèå óêàçàííîé îáëàñòè. Åñëè áëîêèðîâàíèå íåóñïåøíî, ôóíêöèÿ åæåñåêóíäíî, â òå÷åíèè 10ñ ïûòàåòñÿ ïîâòîðíî âûïîëíèòü áëîêèðîâàíèå. LK_RLCK Òî æå ñàìîå, ÷òî è LK_LOCK LK_NBLCK Áëîêèðîâàíèå óêàçàííîé îáëàñòè. Åñëè áëîêèðîâàíèå íåóñïåøíî, íåìåäëåííî âîçâðàùàåòñÿ îøèáêà. LK_NBRLCK Òî æå ñàìîå, ÷òî è LK_NBLCK LK_UNLCK Ðàçáëîêèðîâàíèå ðàíåå çàáëîêèðîâàííîé îáëàñòè. 1.8.4 Ôóíêöèè ðàáîòû ñ ôàéëàìè, èñïîëüçóþùèå ñðåäñòâà DOS Ôóíêöèÿ _dos_creat _dos_close _dos_getfti me _dos_open _dos_read _dos_setfti me _dos_write Íàçíà÷åíèå unsigned _dos_creat(char *filename, unsigned attrib, int *handle); Ñîçäàåò ôàéë ñ èìåíåì <filename> ñ àòðèáóòîì <attrib>.  <handle> âîçâðàùàåòñÿ èäåíòèôèêàòîð ôàéëà. unsigned _dos_close(int handle); Çàêðûòèå ôàéëà <handle>. unsigned _dos_getftime(int handle, unsigned *date, unsigned *time); Ïîëó÷åíèå äàòû <date> (0-4 äåíü; 5-8 ìåñÿö; 9-15 ãîä ìèíóñ 1980) è âðåìåíè <time> (0-4 ñåêóíäû/2; 510 ìèíóòû; 11-15 ÷àñû) ïîñëåäíåãî èçìåíåíèÿ ôàéëà <handle>. unsigned _dos_open(char *filename, unsigned mode, int *handle); Îòêðûâàåò ïîòîê <handle> äëÿ ôàéëà <filename> ñ ðåæèìîì <mode> (òàáëèöà À4 ,À7). unsigned _dos_read(int handle, void _far *buffer, unsigned count, unsigned *nread); ×èòàåò èç ïîòîêà <handle> â áóôåð <buffer> ÷èñëî áàéòîâ <count> íà÷èíàÿ ñ óêàçàòåëÿ òåêóùåãî áàéòà <nread>. unsigned _dos_setftime(int handle, unsigned date, unsigned time); Óñòàíîâêà äàòû <date> (0-4 äåíü; 5-8 ìåñÿö; 9-15 ãîä ìèíóñ 1980) è âðåìåíè <time> (0-4 ñåêóíäû/2; 510 ìèíóòû; 11-15 ÷àñû) äëÿ ôàéëà <handle>. unsigned _dos_write(int handle, void _far *buffer, unsigned count, unsigned *nwrite); Çàïèñóåò â ïîòîê <handle> èç áóôåðà <buffer> ÷èñëî áàéòîâ <count> íà÷èíàÿ ñ óêàçàòåëÿ òåêóùåãî áàéòà <nwrite>. 11 utime int utime(char *filename, struct utimbuf *times); Функция utime устанавливает измененное время <times> для файла, определенного <filename>. 1.8.5 Ôóíêöèè ââîäà-âûâîäà äëÿ ñòàíäàðòíûõ ïîòîêîâ Прототип и краткое описание действий int fgetchar(void); Считывает очередной символ из стандартного входного файла (stdin). Îò getchar îòëè÷àåòñÿ òåì ÷òî ýòî скорее функциÿ чем макрокомандà. fputchar int fputchar(int c ); Записûâает символ <с> в стандартный файл вывода (stdout). Îò putchar îòëè÷àåòñÿ òåì ÷òî ýòî скорее функциÿ чем макрокомандà. getch int getch(void); Считывает один символ с клавиатуры без отображения на экране è áóôåðèçàöèè. getchar int getchar(void); Считывает очередной символ из стандартного входного файла (stdin). getche int getche(void); Считывает один символ с клавиатуры без áóôåðèçàöèè. gets char *gets(char *s); Считывает строку <s> из стандартного входного файла (stdin). perror int perror(char *str); ANSI Выдает сообщение об ошибке с учетом ошибки errno и строки str. printf int printf(char *format [, argument, ...]); Функция форматированного вывода в файл stdout. putch int putch(int с); Íåïîñðåäñòâåííûé (áûñòðûé) âûâîä символà <с> íà ýêðàí. putchar int putchar(int с); Записûâает символ <с> в стандартный файл вывода (stdout). puts int puts(const char *s); Записывает строку <s> в стандартный файл вывода (stdout). feof fgetc Функция fgetchar scanf int scanf(char *format[, argument, ...]); Функция форматированного ввода из файла stdin. sprintf int sprintf(char *s, char * format [, argument, ...]); Функция форматированной записи в строку <s>. sscanf int sscanf(char *s,char *format [, address, . . . ]) ; Функция форматированного чтения из строки <s>. ungetch int ungetch(int с); Возвращает символ <с> в стандартный файл ввода stdin, заставляя его быть следующим считываемым символом. 1.8.6 Ôóíêöèè ââîäà-âûâîäà äëÿ ïîòîêîâ îòêðûòûõ ôàéëîâ Функция clearerr getc getw Прототип и краткое описание действий void clearerr(FILE *string); Ôóíêöèÿ ñáðàñûâàåò èíäèêàòîð îøèáîê è èíäèêàòîð êîíöà ôàéëà äëÿ ïîòîêà <string>. Åñëè èíäèêàòîð îøèáîê äëÿ ïîòîêà óñòàíîâëåí, òî îïåðàöèè ñ ýòèì ïîòîêîì ïðîäîëæàþò âîçâðàùàòü çíà÷åíèå îøèáêè, ïîêà íå âûçûâóòñÿ clearerr, fseek, fsetpos èëè rewind. int getc(FILE *ïîòîê) ; Ïîäïðîãðàììà getc ÷èòàåò ñèìâîë èç <ïîòîêà> è êîððåêòèðóåò ñâÿçàííûé ñ íèì óêàçàòåëü ôàéëà, äëÿ óêàçàíèÿ íà ñëåäóþùèé ñèìâîë. int getw(FILE *stream); Ïîäïðîãðàììà getw ÷èòàåò ñëîâî èç <ïîòîêà> è êîððåêòèðóåò ñâÿçàííûé ñ íèì óêàçàòåëü ôàéëà, äëÿ óêàçàíèÿ íà ñëåäóþùèé ñèìâîë. fflush fgets fileno fprintf fputs fread fwrite fscanf ungetc fputc putc putw int feof(FILE *stream); Ìàêðîêîìàíäà, îïðåäåëÿåò: áûë ëè äîñòèãíóò êîíåö ïîòîêà <stream>. Åñëè êîíåö ôàéëà äîñòèãíóò, òî îïåðàöèè ÷òåíèÿ âîçâðàùàþò èíäèêàòîð êîíöà ôàéëà, ïîêà ïîòîê íå áóäåò çàêðûò èëè ïîêà íå âûçûâóòñÿ rewind, fsetpos, fseek, èëè clearerr. int fgetc(FILE *ïîòîê); функция fgetc читает одиночный символ c текущей позиции файла, связанного с <потоком>. Символ преобразуется и возвращается как int. Затем функция увеличивает указатель файла. Îò getc îòëè÷àåòñÿ òåì ÷òî ýòî скорее функциÿ чем макрокомандà. int fflush(FILE *stream); Ôóíêöèÿ ïðèâîäèò ê ïðèíóäèòåëüíîìó âûâîäó äàííûõ èç áóôåðà â ïàìÿòè â ôàéë <stream> íà äèñêå. char *fgets(char *ñòðîêà, int n, FILE *ïîòîê); ôóíêöèÿ ÷èòàåò ñòðîêó èç âõîäíîãî <ïîòîêà> è ñîõðàíÿåò ee â <ñòðîêå>. Ñèìâîëû ÷èòàþòñÿ íà÷èíàÿ ñ òåêóùåé ïîçèöèè ïîòîêà âêëþ÷àÿ ñèìâîë (\n) äî êîíöà ïîòîêà èëè ïîêà ïðî÷èòàííîå ÷èñëî ñèìâîëîâ ðàâíî <n> -1. Ïðî÷èòàííûå ñèìâîëû ñîõðàíÿþòñÿ â <ñòðîêå> ñ äîáàâëåíèåì ñèìâîëà (\0). ñèìâîë newline, ïðè ÷òåíèè, âêëþ÷àåòñÿ â ñòðîêó. Åñëè <n> (ðàçìåð áóôåðà) ðàâåí 1, <ñòðîêà> ïóñòà (" "). int fileno(FILE *stream); Ìàêðîêîìàíäà, âîçâðàùàåò äåñêðèïòîð ôàéëà, â íàñòîÿùåå âðåìÿ ñâÿçàííûé ñ ïîòîêîì <stream>. int fprintf(FILE *str, char *format[, argument]...); Ôóíêöèÿ îññóùåñòâëÿåò ôîðìàòèðîâàííûé âûâîä â ôàéë <str>. int fputs(char *ñòðîêà, FILE *ïîòîê); Êопиðóåò <строкó> â выõодíîé <поток> íà÷èíàÿ ñ текущей позиции. Символ пробела (\0) не копирóåòñÿ. int fread(char *buf, int size, int n, FILE *stream); Ôóíêöèÿ ÷èòàåò <n> áëîêîâ ðàçìåðîì <size> áàéò èç âõîäíîãî ïîòîêà <stream> â áóôåð <buf>. Åñëè ïîòîê îòêðûò â òåêñòîâîì ðåæèìå, òî ïàðà carriagereturn->line-feed çàìåíÿþòñÿ íà îäèíî÷íóþ line-feed int fwrite(char *buf, int size, int n, FILE *stream); Ôóíêöèÿ çûïèñóåò <n> áëîêîâ ðàçìåðîì <size> áàéò â âûõîäíîé ïîòîê <stream> èç áóôåðà <buf>. Åñëè <ïîòîê> îòêðûò â òåêñòîâîì ðåæèìå, êàæäûé âîçâðàò êàðåòêè çàìåíÿåòñÿ íà ïàðó carriage-return>line-feed. int fscanf(FILE *stream, char *format [,argument]...); Функция форматированного ввода из файлîâîãî ïîòîêà <stream>. int ungetc(int c, FILE *ïîòîê); ôóíêöèÿ ïîìåùàåò ñèìâîë <c> îáðàòíî â <ïîòîê> è î÷èùàåò èíäèêàòîð êîíöà ôàéëà. Ïîñëåäóþùàÿ îïåðàöèÿ ÷òåíèÿ íà ïîòîêå íà÷èíàåòñÿ ñ <c>. Ôóíêöèÿ ungetc âîçâðàòèò çíà÷åíèå îøèáêè, åñëè íè÷òî íå ÷èòàëîñü èç <ïîòîêà>, èëè åñëè <c> íå ìîæåò áûòü ïîìåùåí îáðàòíî. Ñèìâîëû, ïîìåùåííûå â ïîòîê ungetc ìîãóò áûòü óíè÷òîæåíû, åñëè fflush, fseek, fsetpos, èëè rewind âûçûâàëèñü ïðåæäå, ÷åì ñèìâîë ÷èòàëñÿ èç ïîòîêà. int fputc(int c, FILE *ïîòîê); Ôóíêöèÿ çàïèñûâàåò îäèíî÷íûé ñèìâîë <c> ê âûõîäíîìó <ïîòîêó> ñ òåêóùåé ïîçèöèè. Îò putc îòëè÷àåòñÿ òåì ÷òî ýòî скорее функциÿ чем макрокомандà. int putc(int c, FILE *ïîòîê); Ïîäïðîãðàììà putc çàïèñûâàåò îäèíî÷íûé ñèìâîë <c> â âûõîäíîé ïîòîê íà÷èíàÿ ñ òåêóùåé ïîçèöèè. int putw(int word, FILE *stream); Ïîäïðîãðàììà putc çàïèñûâàåò ñëîâî <c> â âûõîäíîé ïîòîê <stream> íà÷èíàÿ ñ òåêóùåé ïîçèöèè. Òàáëèöà À18 - Ñèìâîëû óïðàâëåíèÿ ôîðìàòèðîâàíèåì Ýëåìåí ò Ïðîèçâîäèìûé ýôôåêò â ñòðîêå: ñïåöèôè- %[ôëàãè][øèðèíà][.òî÷íîñòü][F | N | h | l ]<òèï> êàöèè Ôëàãè 0 Для чисел ширина поля будет заполнена слева нулями Ïðîèçâîäèòñÿ âûðàâíèâàíèå âûâîäèìîãî ÷èñëà ïî ëåâîìó êðàþ â ïðåäåëàõ âûäåëåííîãî ïîëÿ. Ïðàâàÿ ñòîðîíà âûäåëåííîãî ïîëÿ äîïîëíÿåòñÿ ïðîáåëàìè. + Выводится знак числа символом ‘-‘ или ‘+’ * Îáîçíà÷àåò ïðîïóñê ïðè ââîäå ïîëÿ, îïðåäåëåííîãî 12 äàííîé ñïåöèôèêàöèåé. Ââåäåííîå çíà÷åíèå íå ïðèñâàèâàåòñÿ íè êàêîé ïåðåìåííîé. Ïðîáåë Âûâîäèòñÿ ïðîáåë ïåðåä ïîëîæèòåëüíûì ÷èñëîì è знак ‘-‘ перед отрицательным. # Âûâîäèòñÿ èäåíòèôèêàòîð ñèñòåìû ñ÷èñëåíèÿ äëÿ öåëûõ: - 0 ïåðåä ÷èñëîì â âîñüìåðè÷íîé ñ/c; - 0õ èëè 0Õ â øåñíàäöàòåðè÷íîé ñ/c; - íè÷åãî äëÿ ÷èñåë â äåñÿòè÷íîé ñ/c. Âûâîäèòñÿ äåñÿòè÷íàÿ òî÷êà äëÿ ÷èñåë òèïà float. Øèðèíà (âîçäåéñòâóåò òîëüêî íà âûâîä) n Îïðåäåëÿåò ìèíèìàëüíóþ øèðèíó ïîëÿ â <n> ñèìâîëàõ. Åñëè ïîñëå ïðåîáðàçîçîâàíèÿ øèðèíû íåäîñòàòî÷íî, âûâîäèòñÿ ñòîëüêî ñèìâîëîâ, ñêîëüêî åñòü, ñ äîïîëíåíèåì ïðîáåëàìè. 0n Âñå òîæå , íî ïîçèöèè ñëåâà äëÿ öåëîãî ÷èñëà äîïîëíÿþòñÿ íóëÿìè. * ×èñëî âûâîäèìûõ ñèìâîëîâ îïðåäåëÿåòñÿ çíà÷åíèåì ñîîòâåòñòâóþùåé ïåðåìåííîé. Òî÷íîñòü (âîçäåéñòâóåò òîëüêî íà âûâîä) Íè÷åãî Òî÷íîñòü ïî óìîë÷àíèþ .0 Äëÿ d, i, o, u, x - òî÷íîñòü ïî óìîë÷àíèþ. Äëÿ e, E, f – äåñÿòè÷íàÿ òî÷êà îòñóòñòâóåò .n Äëÿ e, E, f íå áîëåå <n> çíàêîâ ïîñëå òî÷êè * Ñëåäóþùèé àðãóìåíò èç ñïèñêà àðãóìåíòîâ òî÷íîñòü Ìîäèôèêàòîð (âîçäåéñòâóåò òàì, ãäå ïðèìåíèìî) h Перед d, i, o, u, x, X àðãóìåíò ÿâëÿåòñÿ short int l Перед d, i, o, u, x, X àðãóìåíò ÿâëÿåòñÿ long int Перед e, E, f, g, G àðãóìåíò ÿâëÿåòñÿ double (òîëüêî äëÿ scanf) L Длиное двойной точности F Указатель (FAR) N Указатель (NEAR) Ïîëå îáðàçåö - %[*][øèðèíà] [îáðàçåö] Îïðåäåëÿåò ìíîæåñòâî ñèìâîëîâ, èç êîòîðûõ ìîæåò ñîñòîÿòü вводимая строка. Если в образце стоит символ ‘^’, то вводится áóäóò âñå ñèìâîëû êðîìå ïåðå÷èñëåííûõ : [a-z],[A-F0-9] ; [^0-9] Òèï ïåðåìåííîé: char c Ïðè ââîäå - ÷èòàåòñÿ è ïåðåäàåòñÿ ïåðåìåííîé îäèí áàéò. Ïðè âûâîäå - áàéò ïåðåìåííîé ïðåîáðàçóåòñÿ ê òèïó char è çàïèñóåòñÿ â âûõîäíîé ïîòîê. Òèï ïåðåìåííîé : int d Äåñÿòè÷íîå int ñî çíàêîì i Äåñÿòè÷íîå int ñî çíàêîì o Âîñüìåðè÷íîå int áåç çíàêà u Äåñÿòè÷íîå int áåç çíàêà x Øåñòíàäöàòåðè÷íîå int áåç çíàêà (0 - f) X Øåñòíàäöàòåðè÷íîå int áåç çíàêà (0 - F). Ïðè ââîäå ðàçëè÷èå x è X íå îêàçûâàåò íèêàêîãî ýôôåêòà. n Указатель NEAR (только смещение) p Указатель FAR (сегмент[селектор]:смещение) Òèï ïåðåìåííîé : float f Çíà÷åíèå ñî çíàêîì â ôîðìå [-]dddd.dddd e Çíà÷åíèå ñî çíàêîì â ôîðìå [-]d.dddde[+ | -]ddd E Çíà÷åíèå ñî çíàêîì â ôîðìå [-]d.ddddE[+ | -]ddd Ïðè ââîäå íåò ðàçëè÷èÿ ìåæäó e è E g Значение со знаком в формате ‘e’ или ‘f’ в зависимости îò çíà÷åíèÿ è ñïåöèôèöèðîâàííîé òî÷íîñòè G Значение со знаком в формате ‘E’ или ‘F’ в çàâèñèìîñòè îò çíà÷åíèÿ è ñïåöèôèöèðîâàííîé òî÷íîñòè. Ïðè ââîäå íåò ðàçëè÷èÿ ìåæäó g è G Òèï ïåðåìåííîé : CHAR * s Ïðè ââîäå ïðèíèìàåò ñèìâîëû áåç ïðåîáðàçîâàíèÿ äî тех пор, пока не встретится ‘\n’ или пока не äîñòèãíóòà ñïåöèôèöèðîâàííàÿ òî÷íîñòü.  программу передаются символы до ‘\n’ или пробела. Ïðè âûâîäå âûäàåò â ïîòîê âñå ñèìâîëû äî òåõ ïîð, пока не встретится ‘\0’ или не достигнута ñïåöèôèöèðîâàííàÿ òî÷íîñòü Òàáëèöà À20 - Escape-последовательности C Seq Имя Seq Имя \a Предупреждение \v Вертикальная табуляция (звонок) \b Возврат на один \' Одиночная кавычка символ \f Перевод страницы \" Двойная кавычка \n Íîâàÿ ñòðîêà \\ Наклонная черта влево \r Возврат каретки \t Горизонтальная табуляция null, пустой символ, целое значение 0 \0 \ddd Символ ASCII, îïèñàííûé восьмеричнûм êîäîì \xdd Символ ASCII, îïèñàííûé шестнадцатеричнûм êîäîì 1.8.7 Ôóíêöèè äëÿ ðàáîòû ñ âðåìåííûìè ôàéëàìè Функция creattemp mktemp rmtmp tmpfile tempnam tmpnam Прототип и краткое описание действий int creattemp(char *path, int attr); Ôóíêöèÿ âîçâðàùàå èäåíòèôèêàòîð ñîçäàííîãî â äèðåêòîðèè <path> âðåìåííîãî ôàéëà ñ àòðèáóòàìè <attr> (òàáëèöà À7). char *mktemp(char *template); Âîçâðàùàåò óíèêàëüíîå èìÿ ôàéëà ñãåíåðèðîâàííîå â ñîîòâåòñòâèè ñ øàáëîíîì <template>. Ïàðàìåòð <template> èìååò ôîðìó: baseXXXXXX, ãäå <base> - ÷àñòü íîâîãî èìåíè ôàéëà, îáåñïå÷åííîãî ïîëüçîâàòåëåì, è X ìåòêè çàïîëíèòåëè, êîòîðûå mktemp çàïîëíÿåò öèôðàìè. (t012345) int rmtmp(void); Óäàëåíèå âðåìåííûõ ôàéëîâ. FILE *tmpfile(); Ôóíêöèÿ ñîçäàåò âðåìåííûé ôàéë è âîçâðàùàåò óêàçàòåëü íà åãî ïîòîê. Åñëè ôàéë íå ìîæåò áûòü îòêðûò, tmpfile âîçâðàùàåò ÍÓËÅÂÎÉ óêàçàòåëü. Ýòîò âðåìåííûé ôàéë àâòîìàòè÷åñêè óäàëÿåòñÿ ïðè îáû÷íîì çàâåðøåíèè ïðîãðàììû. Âðåìåííûé ôàéë îòêðûâàåòñÿ â ðåæèìå w + b. char *tempnam(char *dir, char *prefix); Âîçâðàùàåò óêàçàòåëü íà âðåìåííûé ôàéë ñîçäàííûé â êàòàëîãå <dir> â ñîîòâåòñòâèå ñ ïðåôèêñîì <prefix>, êîòîðûé îïðåäåëÿåò ïåðâóþ ÷àñòü èìåíè ôàéëà è íå ìîæåò ñîäåðæàòü áîëåå 5 ñèìâîëîâ. char *tmpnam(char *string); Ãенерирует временное имя файла, которое может использоваться для открытия временного файла без записи поверх существующего файла. Это имя сохраняется в <string>. 1.9 Функции проверки и преобразования символов - файл ctype.H Функция Прототип и краткое описание действий isalnum ANSI isalpha ANSI isascii ANSI iscntrl ANSI isdigit ANSI isgraph ANSI islower ANSI int isalnum(int с); Дает значение не нуль, если <с> - код буквы или цифры (А - Z, a -z, 0 - 9), и нуль - в противном случае. int isalpha(int с); Дает значение не нуль, если <с> - код буквы (А - Z, а z), и нуль -в противном случае. int isascii(int с); Дает значение не нуль, если <с> есть код ASCII, т.е. принимает значение от 0 до 127, в противном случае нуль. int iscntrl(int с); Дает значение не нуль, если <с> - управляющий символ с кодами 0х00 - OxOlF или Ox7F, и нуль - в противном случае. int isdigit(int с); Дает значение не нуль, если <с> - цифра (0 - 9) в коде ASCII, и нуль - в противном случае. int isgraph(int с); Дает значение не нуль, если <с> - видимый (изображаемый) символ с кодом (0х21 - Ох7Е), и нуль в противном случае. int islower(int с); Дает значение не нуль, если <с> - код символа на нижнем регистре (а - z), и нуль - в противном случае. 13 isprint ANSI ispunct ANSI isspace ANSI isupper ANSI isxdigit ANSI toascii ANSI tolower toupper ANSI int isprint(int с); Дает значение не нуль, если <с> - печатный символ с кодом (0х20 - Ох7Е), и нуль - в противном случае. int ispunct(int с); Дает значение не нудь, если <с> - символ-разделитель (соответствует iscntrl или isspase), и нуль - в противном случае. int isspace(int с); Дает значение не нуль, если <с> - обобщенный пробел: пробел, символ табуляции, символ новой строки или новой страницы, символ возврата каретки (0х09 OxOD, 0х20), и нуль - в противном случае. int isupper(int с); Дает значение не нуль, если <с> - код символа на верхнем регистре (А - Z), и нуль - в противном случае. int isxdigit(int с); Дает значение не нуль, если <с> код шестнадцатеричной цифры (0 - 9, А - F, а - f), и нуль - в противном случае. int toascii(int с); Преобразует целое число <с> в символ кода ASCII, обнуляя все биты, кроме младших семи. Результат от 0 до 127. int tolower(int с); Преобразует код буквы <с> к нижнему регистру, остальные коды не изменяются. int toupper(int с); Преобразует код буквы <с> к верхнему регистру, остальные коды не изменяются. atof ANSI double atof(char *str); Преобразует строку <str> в вещественное число типа double. atoi ANSI int atoi(char *str); Преобразует строку <str> в десятичное целое число int. atol ANSI long atol(char *str); Преобразует строку <str> в длинное десятичное целое число long int. ecvt char* ecvt(double value, int ndig, int *dec, int *sign); Ïðåîáðàçóåò ÷èñëî <value> â ñòðîêó ñèìâîëîâ ñîäåðæàùóþ ndig ñèìâîëîâ öèôð. Ïîëîæåíèå äåñÿòè÷íîé òî÷êè îò ïåðâîé öèôðû ÷èñëà âîçâðàùàåòñÿ â ïåðåìåííîé, íà êîòîðóþ óêàçûâàåò dec. Çíàê ÷èñëà âîçâðàùàåòñÿ â ïåðåìåííîé, íà êîòîðóþ óêàçûâàåò sign. fcvt char *fcvt(double value, int ndig, int *dec, int *sign); Èäåíòè÷íà ecvt, íî îêðóãëÿåò ïðåîáðàçóåìîå çíà÷åíèå äî çàäàííîãî ÷èñëà öèôð è dec óêàçûâàåò íà ïåðåìåííóþ êîòîðàÿ ñîäåðæåò êîëè÷åñòâî öèôð ïîñëå äåñÿòè÷íîé òî÷êè. gcvt char *gcvt(double value, int ndig, char *buf); Ïðåîáðàçóåò ÷èñëî ñ ïëàâàþùåé òî÷êîé òèïà double â ñòðîêó ñèìâîëîâ, âêëþ÷àÿ ñèìâîë äåñÿòè÷íîé òî÷êè è èñïîëüçóÿ ñïåöèôèöèðîâàííîå ÷èñëî öèôð è ïîìåùàåò ñôîðìèðîâàííóþ ñòðîêó â áóôåð. itoa char *itoa(int v, char *str, int baz); Преобразует целое <v> в строку <str>. При изображении числа используется основание <baz> (2 < baz < 36). Для отрицательного числа и <baz> = 10 первый символ - "минус" (-). ltoa char *ltoa(long v, char *str, int baz); Преобразует длинное целое <v> в строку <str>. При изображении числа используется основание <baz> (2 < baz < 36). strcat ANSI char *strcat(char *sp, char *si); Приписывает строку <si> к строке <sp> (конкатенация строк). 1.10 Функции для работы с масивами Функция bsearch lfind lsearch qsort Прототип и краткое описание действий void bsearch(void *key, void *base, unsigned num, unsigned width, int (*compare)(void *key, void *elem)); Ôóíêöèÿ âîçâðàùàåò óêàçàòåëü íà èñêîìîå çíà÷åíèÿ <key> èç ìàñèâà <base> ñ êîëè÷åñòâîì ýëåìåíòîâ â ìàñèâå <num> è áàéòîâ â ýëåìåíòå <width> ïðè óäà÷íîì ïîèñêå. Ïàðàìåòð compare óêàçàòåëü íà äðóãóþ ôóíêöèþ ñðàâíèâàþùóþ ýëåìåíòû ìàñèâà <key> è <elem>. Ïðîèçâîäèò äâîè÷íûé ïîèñê. void lfind(void *key, void *base, unsigned num, unsigned width, int (*compare)(void *key, void *elem)); Ôóíêöèÿ âîçâðàùàåò óêàçàòåëü íà èñêîìîå çíà÷åíèÿ <key> èç ìàñèâà <base> ñ êîëè÷åñòâîì ýëåìåíòîâ â ìàñèâå <num> è áàéòîâ â ýëåìåíòå <width> ïðè óäà÷íîì ïîèñêå. Ïàðàìåòð compare óêàçàòåëü íà äðóãóþ ôóíêöèþ ñðàâíèâàþùóþ ýëåìåíòû ìàñèâà <key> è <elem>. void lsearch(void *key, void *base, unsigned num, unsigned width, int (*compare)(void *key, void *elem)); Ôóíêöèÿ âñòàâëÿåò èñêîìîå çíà÷åíèÿ <key> â ìàñèâ <base> ñ êîëè÷åñòâîì ýëåìåíòîâ â ìàñèâå <num> è áàéòîâ â ýëåìåíòå <width> ïðè íåóäà÷íîì ïîèñêå. Ïàðàìåòð compare óêàçàòåëü íà äðóãóþ ôóíêöèþ ñðàâíèâàþùóþ ýëåìåíòû ìàñèâà <key> è <elem>. void qsort(void *base, size_t num, size_t width, int (*compare)(void *elem1, void *elem2)); Ôóíêöèÿ ñîðòèðóåò ìàñèâû <base> âñåõ òèïîâ ñ êîëè÷åñòâîì ýëåìåíòîâ â ìàñèâå <num> è áàéòîâ â ýëåìåíòå <width> ñ èñïîëüçîâàíèåì àëãîðèòìà áûñòðîé ñîðòèðîâêè. Ïàðàìåòð compare óêàçàòåëü íà äðóãóþ ôóíêöèþ ñðàâíèâàþùóþ ýëåìåíòû ìàñèâà <elem1> è <elem2>. 1.11 Функции для работы со строками файлы string. h, stdlib. H Функция Прототип и краткое описание действий strchr ANSI strcmp ANSI char *strchr(char *str, int с); Ищет в строке <str> первое вхождение символа <с>. int strcmp(char *str1, char *str2); Сравнивает строки <strl> и <str2>. Результат отрицателен, если strl < str2; равен нулю, если atrl == str2 и положителен, если strl > str2 (сравнение беззнаковое). strcmpi int strcmpi(char *str1, char *str2); Èäåíòè÷íà stricmp. strcpy char *strcpy(char *sp, char *si); ANSI Копирует байты строки <si> в строку <sр>. strcspn int strcspn(char *str1, char *str2); ANSI Определяет длину первого сегмента строки <str1>, содержащего символы, не входящие во множество символов строки <str2>. streql * int streql (char *str1, char *str2); Ñðàâíåíèå äâóõ ñòðîê. Åñëëè îíè ýêâèâàëåíòíû òî 1 èíà÷å 0 strdup char *strdup(const char *str); Выделяет память и переносит в нее копию строки <str>. strerror char *sterror(int errnum); Âîçâðàùàåò ïî çàäàííîìó íîìåðó ñèñòåìíîé îøèáêè <errnum> óêàçàòåëü íà ñòðîêó òåêñòà ñîîáùåíèÿ îá îøèáêå _strerror char *_strerror(const char *s); Âîçâðàùàåò óêàçàòåëü íà ñòðîêó, îáðàçîâàííóþ îáúåäèíåíèåì ïðîèçâîëüíîé ñòðîêè <s> è ñîîáùåíèÿ îá îøèáêå â áèáëèîòå÷íîé ôóíêöèè. stricmp int stricmp(const char *s1,const char *s2); Сравнивает строкó <s1> и строкó <s2>, не делая различия регистров. strieql int strieql (char *str1, char *str2); Ñðîâíèâàåò ñòðîêè áåç ó÷åòà ðåãèñòðà. 14 strlen ANSI _fstrlen unsigned strlen(char *str); Вычисляет длину строки <str>. size_t _fstrlen(const char *string); Вычисляет длину строки <str> заданной far-óêàçàòåëåì . strlwr char *strlwr(char *str); Преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра. strncat char *strncat(char *sp, char *si, int kol); Приписывает <kol> символов строки <si> к строке <sp> ANSI (конкатенация). strncmp int strncmp(char *str1, char *str2, int kol); ANSI Сравнивает части строк <str1> и <str2>, причем рассматриваются первые <kol> символов. Результат отрицателен, если <str1> < <str2>; равен нулю, если <str1> = <str2> и положителен, если <str1> > <str2>. strncpy char *strncpy(char *sp, char *si, int kol); ANSI Копирует <kol> символов строки <si> в строку <sp> ("хвост" отбрасывается или дополняется пробелами). strnicmp, char *stricmp(char *str1, char *str2, int kol); Сравнивает strncmpi не более <kol> символов строки <str1> и строки str2, не делая различия регистров (см. функцию strncmp()). strnset char *strnset(char *str, int c, int kol); Заменяет первые <kol> символов строки <str> символом <с>. strpbrk char *strpbrk(char *str1, char *str2); ANSI Ищет в строке <str1> первое появление любого из множества символов, входящих в строку <str2>. strrchr char *strrchr(char *str, int с); ANSI Ищет в строке <str> последнее вхождение символа <с>. strrev charr *strrev(char *string); Îáðàùåíèå ïîðÿäêà ñëåäîâàíèÿ ñèìâîëîâ ñòðîêè <string>. strset int strset(char *str, int с); Заполняет строку <str> заданным символом <с>. strspn int strspn(char *str1, char *str2); ANSI Определяет длину первого сегмента строки <str1>, содержащего только символы, из множества символов строки <str2>. strstr char *strstr(const char *str1, const char *str2); ANSI Ищет в строке <str1> подстроки <str2>. Возвращает указатель на тот элемент в строке <str1>, с которого начинается подстрока <str2>. strtod double *strtod(const char *str, char **endptr); ANSI Преобразует символьную строку <str> в число двойной точности. Если <endptr> не равен nULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки <str>. strtok char *strtok(char *str1, const char *str2); ANSI Ищет в строке <str1> лексемы, выделенные символами из второй строки. strtol long *strtol(const char *str, char **endptr, int baz); Преобразует символьную строку <str> к значению ANSI "длинное число" с основанием <baz> (2 < baz < 36). Если <endptr> не равен NULL, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки <str>. strupr char *strupr(char *str); Преобразует буквы нижнего регистра в строке <str> в буквы верхнего регистра. strxfrm size_t strxfrm (char *str1, char *str2, size_t count); Òðàíñôîðìèðóåò n ñèìâîëîâ ñòðîêè <str2> â ñòðîêó <str1>. ultoa char *ultoa(unsigned long v, char *str, int baz); Преобразует беззнаковое длинное целое <v> в строку <str>. * - Îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ 1.12 Ôóíêöèè äëÿ ðàáîòû ñ ïàìÿòüþ Функция Прототип и краткое описание действий alloca biosmem ory * _bios_me msize brk * sbrk * calloc ANSI coreleft FP_OFF FP_SEG farcalloc * farfree farmalloc * farrealloc free ANSI halloc heapchec k * heapchec kfree, heapfillfr ee * heapchec knode * void *alloca(size_t size); Возвращает указатель на блок âûäåëåííîé èç îáëàñòè ñòåêà ïамяти длиной <size> байт. При неудачном завеðøении возвращает значение NULL. Ïðåäíîçíà÷åíà äëÿ âðåìåííîãî âûäåëåíèÿ îáëàñòè ïàìÿòè; íà âðåìÿ äåéñòâèÿ îòäåëüíîé ôóíêöèè. int biosmemory(void); Âîçâðàùàåò ðàçìåð îñíîâíîé ïàìÿòè (â Êá). unsigned _bios_memsize(void); Âîçâðàùàåò ðàçìåð îñíîâíîé ïàìÿòè (â Êá). int brk(void *addr); int sbrk(ind delta); Ïîçâîëÿåò èçìåíèòü размер ðàçäåëåíèÿ ñåãìåíòà данных и динамической области путем указания адреса конца addr для brk или количества байт delta в sbrk. void *calloc(size_t n, size_t m); Возвращает указатель на начало âûäåëåííîé области динамически распределенной памяти для размещения <n> элементов по <m> байт каждый. При неудачном завершении возвращает значение NULL. unsigned coreleft (void); - для моделей памяти tiny, small, medium. long coreleft (void) ;-для других моделей памяти. Возвращает значение объема неиспользованной памяти, функция уникальная для DOS, где приняты упомянутые модели памяти. unsigned FP_OFF(void far *addr); Âîçâðàùàåò ñìåùåíèå èç äëèííîãî àäðåñà <addr>. unsigned FP_SEG(void far *addr); Âîçâðàùàåò ñåãìåíò èç äëèííîãî àäðåñà <addr>. void far *calloc(unsigned long n, unsigned long m); Возвращает указатель на начало âûäåëåííîé области динамически распределенной памяти для размещения <n> элементов по <m> байт каждый, ìèíóÿ îãðàíè÷åíèå 64êá. При неудачном завершении возвращает значение NULL. void farfree(void far *block); Освобождает ранее выделенный блок динамически распределяемой памяти с адресом первого байта <block> çàäàííîãî äàëüíèì óêàçàòåëåì (âûäåëåííûé ôóíêöèåé farmalloc èëè farcalloc). void far *farmalloc(unsigned long numb); Возвращает указатель на блок âûäåëåííîé динамически распределяемой памяти длиной <numb> байт, ìèíóÿ îãðàíè÷åíèå 64êá. При неудачном завеðøении возвращает значение NULL. void far * farrealloc(void far *oldblock, unsigned lons n); Изменяет размер ранее выделенной динамической памяти с адресом начала <oldblock> до размера <n> байт. Если <oldblock> равен NULL, то функция выполняется как farmalloc(). void free(void *b1); Освобождает ранее выделенный блок динамически распределяемой памяти с адресом первого байта <bl> (âûäåëåííûé ôóíêöèåé malloc èëè calloc). void huge *halloc(long num, size_t size); Возвращает указатель на начало âûäåëåííîé области ïàмяти для размещения <n> элементов по <m> байт каждый, ñóïåðáîëüøîãî ìàñèâà (áîëåå 64 êá). При неудачном завершении возвращает значение NULL. int heapcheck(void); Ôóíêöèÿ âîçâðàùàåò ðåçóëüòàò (òàáëèöà À13) àíàëèçà êàæäîãî ýëåìåíòà äèíàìè÷åñêîé ïàìÿòè. int heapcheckfree(unsigned value); int heapfillfree(unsigned value); Ôóíêöèÿ âîçâðàùàåò ðåçóëüòàò (òàáëèöà À13) çàïîëíåíèÿ ñâîáîäíîé äèíàìè÷åñêîé ïàìÿòè çíà÷åíèÿìè <value> äëÿ ïîñëåäóþùåãî êîíòðîëÿ. int heapchecknode(void *block); Ôóíêöèÿ âîçâðàùàåò (òàáëèöà À13) ðåçóëüòàò òåñòèðîâàíèÿ ðàíåå âûäåëåííîãî áëîêà ïàìÿòè <block>. 15 heapwalk hfree inport (inp) inportb (inpw) malloc ANSI mmap mmap64 *NIX mman.h memccpy memchr ANSI mеmсmр ANSI memcpy ANSI memicmp memmove ANSI memset ANSI movedat a movmem int heapwalk(struct _HEAPINFO *info); Âûâîäèò â ñòðóêòóðó <info> èñïîëüçóåìîñòü è çàíÿòîñòü êàæäîãî ýëåìåíòà äèíàìè÷åñêîé ïàìÿòè. void hfree(void huge *memblock); Освобождает ранее выделенный блок памяти ñóïåðáîëüøîãî ìàñèâà (halloc) с óêàçàòåëåì íà первûé байт <memblock>. int intport(int addr); char inportb(int addr); Âîçâðàùàåò ñëîâî èç ïîðòà <addr>. void *malloc(size_t s); Возвращает указатель на блок âûäåëåííîé динамически распределяемой памяти длиной <s> байт. При неудачном завеðøении возвращает значение NULL. void *mmap(void *addr, size_t length, int protection, int flags, int filedes, off_t offset); void *mmap(void *addr, size_t length, int protection, int flags, int filedes, off64_t offset); Возвращает адрес отображенного файла filedes длиной length, начиная со смещения offset. Адрес отображения можно задать addr. Права доступа определяеться protection: PROT_READ – Разрешено чтение из памяти; PROT_WRITE – Разрешена запись в память; PROT_EXEC – Разрешено выполнение в памяти; PROT_NONE – Доступ к памяти запрещен. Поле flags определяет доступность изменений в памяти файла другим процессам: MAP_SHARED – изменения записываються в файл и видны другим процессам; MAP_PRIVATE – изменения не записываються в файл и не видны другим процессам. void *memccpy(void *dest, void *src, int c, unsigned count); Êîïèðóåò ìàñèâ ñèìâîëîâ <count> èç îáëàñòè ïàìÿòè <dest> â <src>. Åñëè ïðè êîïèðîâàíèå âñòðå÷àåòñÿ ñèìâîë <c> òî êîïèðîâàíèå ïðåêðîùàåòñÿ è ôóíêöèÿ âîçâðàùàåò óêàçàòåëü íà ñëåäóþùèé ñèìâîë, èíà÷å âîçâðàùàåòñÿ NULL. void *memchr(const void *s, int c, size_t n); Возвращает указатель на первый искомый символ <c> в буфере <s>, если он обнаружен в первых <n> байтах. int memcmp(void *s1, void *s2, unsigned n); Сравнивает посимвольно две îбласти памяти <s1> и <s2> длиной <n> байт. Возвращает значение меньше нуля, если <s1> < <s2>, нуль, если <s1> = <s2> и больше нуля, если <s1> > <s2>. void *memcpy(const void *p, const void *i, size_t n); Копирует блок длиной <n> байт из области памяти <i> в область памяти <р>. int memicmp (void *s1, void *s2, size_t n); Подобна memcmp, за тем исключением, что игнорируются различия между буквами верхнего и нижнего регистра. void *memmove (void *dest, conat void *src, int n); Копирует блок длиной <n> байтов из <src> в <dest>. Возвращает указатель <dest>. Âûïîëíÿåò êîðåêòíîå êîïèðîâàíèå ïðè ïåðåêðûòèå îáëàñòåé ïàìÿòè. void *memset (void *s, int с, size_t n); Записывает во все байты <c> â областü памяти íà÷èíàÿ ñ <s> è ðàçìåðîì <n> áàéò. Âîçâðàùàåòñÿ óêàçàòåëü íà íà÷àëî çàäàííîãî ó÷àñòêà ïàìÿòè. void movedata(unsigned srcseg, unsigned srcoff, unsigned dstseg, unsigned dstoff, size_t n); Копирует <n> байтов из буфера источника (<srcseg> - сегмент; <srcoff> - смещение) в буфер приемника (<dstseg> - сегмент; <dstoff> - смещение). void movmem(void *src, void *dest, unsigned length); Аналогична функции memmove. Не входит в стандарт ANSI. mprotect mremap msync munmap setmem MK_FP * outport (outp) outportb (outpw) peek * peekb * poke * pokeb * realloc segread swab int mprotect(void *addr, size_t len, int prot); Устаналивает способ доступа к памяти addr длиной len в prot. void *mremap(void *old_addr, size_t old_size, size_t new_size, unsigned long flags); Переопределяет виртуальную область памяти выделеную mmap с адресом old_addr и размером old_size на размер new_size. Значение MREMAP_MAYMOVE поля flags указывает на необходимость индикации если операция не может быть выполнена с текущем виртуальным адресом. Возвращает новое значение адреса. int msync(void *start, size_t len, int flags); Производит сброс изменений из области памяти start длиной len смапеной из файла на этот файл в режиме flags: MS_ASYNC – заплонировать обновление, и вернуть управление. MS_SYNC – запросить обновления и подождать; MS_INVALIDATE – оставить другим ?. int munmap(void *address, size_t length); Отменить отображение области памяти address длинной length на файл. void setmem(void *dest, unsigned lenght, char value); Аналогична функции memset. Не входит в стандарт ANSI. void far *MK_FP(unsigned segment, unsigned offset); Âîçâðàùàåò far óêàçàòåëü íà äëèííûé àäðåñ ñîñòîÿùèé èç ñåãìåíòà <segment> è ñìåùåíèÿ <offset>. void outport(int addr, int value); Ïîìåùàåò áàéò <value> â ïîðò <addr>. void outportb(int addr, unsigned char value); Ïîìåùàåò ñëîâî <value> â ïîðò <addr>. int peek(unsigned s, unsigned с); Возвращает целое значение (слово), записанное в сегменте <s> со смещением <с>. char peekb(unsigned s, unsigned с); Возвращает один байт, записанный в сегменте <s> со смещением <с>, т.е. по адресу s:с. void poke(unsigned s, unsigned с, int v); Помещает значение <v> в слово сегмента <s> со смещением <с>, т.е. по адресу s:с. void pokeb(unsigned s, unsigned с, char v) ; To же, что и poke, но помещает один байт <v> по адресу s:с. void *realloc(void *b1, unsigned ns); Изменяет размер ранее выделенной динамической памяти с адресом начала <b1> до размера <ns> байт. Если <b1> равен NULL, то функция выполняется как malloc(). void segread(struct SREGS *segregs); Âîçâðàùàåò â ñòðóêòóðó <segregs> çíà÷åíèÿ ñåãìåíòíûõ ðåãèñòðîâ: ES, CS, SS, DS. void swab(char *src, char *dest, int n); Ïåðåñòàíàâëèâàåò ñèìâîëüíóþ ñòðîêó ñìåæíûõ áàéòîâ ðàçìåðîì <n> c àäðåñîì <src> â ïàìÿòü ñ àäðåñîì <dest>. * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ Òàáëèöà À13 - Çíà÷åíèÿ âîçâðàùàåìûå ôóíêöèÿìè ïðîâåðêè äèíàìè÷åñêîé ïàìÿòè Êîíñòàíòà Çíà÷åíèå _BADNODE Áëîê íå íàéäåí _BADVALUE Îáíàðóæåíî ïîñòîðîííåå çíà÷åíèå _FREEENTRY Áëîê íå çàíÿò _HEAPCORRUPT Íàðóøåíèå â äèíàìè÷åñêîé ïàìÿòè _HEAPEMPTY Íåò äèíàìè÷åñêîé ïàìÿòè _HEAPOK Äèíàìè÷åñêàÿ ïàìÿòü â ïîðÿäêå _USEDENTRY Áëîê èñïîëüçóåòñÿ 1.13 Функции для работы с терминалом в текстовом режиме - файл conio. H Функция Прототип и краткое описание действий 16 clreol * void clreol(void); Стирает символы от позиции курсора до конца строки в текстовом окне. clrscr * void clrscr(void); Очищает экран. , cgets char *cgets(char *str); ÷èòàåò c áóôåðà êëîâèàòóðû строку <str>. Âûïîëíÿåòñÿ áûñòðåå ÷åì ôóíêöèÿ gets. ñprintf int cprintf (char *format [, argument, ...]); Вûâодит форматированную строку в текстовое окно, [созданное функцией window ()]. Âûïîëíÿåòñÿ áûñòðåå ÷åì ôóíêöèÿ printf. ñputs int cputs(char *str) ; Âûâîä ñòðîêè <str> íà ýêðàí íåïîñðåäñòâåííî. Âûïîëíûåòñÿ áûñòðåå ÷åì puts. ñscanf int cscanf (char *format [, address, ...]); Функциÿ ввода-вывода информации, которàÿ используются при работе с терминалом в текстовом режиме. Âûïîëíÿåòñÿ áûñòðåå ÷åì ôóíêöèÿ scanf. delline * void delline(void); Удаляет строку в текстовом окне (где находится курсор). gotoxy * void gotoxy(int х, int у); Перемещает курсор в позицию текстового окна с координатами (х, у). highvideo * void highvideo(void); Повышает яркость символов, выводимых после нее на экран. insline * void insline(void); Âñòàâëÿåò ïóñòóþ ñòðîêó, ðàçáèâàÿ ïðè ýòîâ òåêóùóþ ñòðîêó â ïîçèöèè êóðñîðà. movetext * int movetext(int x0,int y0,int xl,int y2,int x,int y); Переносит текстовое окно в область экрана, правый верхний угол которой имеет координаты (х, у). Координаты угловых точек окна - (хО, уО), (х1, у1). normvideo * void normvideo(void); Устанавливает нормальную яркость выводимых на экран символов. textattr * void textattr(int newattr); Устанавливает атрибуты (фон, цвет) символов, выводимых на экран. textbackgrou void textbackground(int с); nd * Устанавливает цвет фона по значению параметра <с>. textcolor * void textcolor(int с); Устанавливает цвет символов по значению параметра <с>. textmode * void textmode(int m); Переводит экран в текстовый режим по значению параметра m. wherex * int wherex(void); Возвращает значение горизонтальной координаты курсора. wherey * int wherey (void); Возвращает значение вертикальной координаты курсора. window * void window(int x0,int y0,int x1,int y1); Создает текстовое окно по координатам угловых точек (х0,у0),(х1,у1). * - Ôóíêöèÿ îòñóòñòâóåò â QC-25 1.14 Ôóíêöèè ïîääåðæêè ïåðåìåííîãî ÷èñëà ïàðàìåòðîâ - stdarg.h Ôóíêöèÿ va_arg Прототип и краткое описание действий type va_arg( va_list arg_ptr, type ); Çíà÷åíèå ïàðàìåòðà òèïà <type> âûáèðàåòñÿ èç ñòåêà <arg_ptr>, ïî îäíîìó çà êàæäîå îáðàùåíèå ê va_end vfprintf vprintf vsprintf va_start ôóíêöèè. Ìàêðîêîìàíäà <va_arg> ìîæåò èñïîëüçîâàòüñÿ ëþáîå ÷èñëî ðàç äëÿ îòûñêàíèÿ ïàðàìåòðîâ â ñïèñêå. void va_end( va_list arg_ptr ); Ïðèñâàèâàåò àðãóìåíòó-óêàçàòåëþ < arg_ptr> çíà÷åíèå çàïðåùàþùåå åãî ïîñëåäóþùåå èñïîëüçîâàíèå (áåç ïîâòîðíîé èíèöèàëèçàöèè va_start). vfprintf(FILE *stream, const char *format, va_list arg); Записывает выход под управлением format и arg в файл stream. vprintf(const char *format, va_list arg); Записывает выход под управлением format и arg в стандартный выход. vsprintf(char *s, const char *format, va_list arg); Записывает выход под управлением format и arg в строку s. void va_start( va_list arg_ptr, prev_param ); Ïðèñâàèâàíèå óêàçàòåëþ < arg_ptr> àäðåñà ïåðâîãî ïàðàìåòðà â ñòåêå âõîäíûõ ïàðàìåòðîâ <prev_param>.<arg_ptr> äîëæåí èìåòü òèï va_list. Ïàðàìåòð <prev_param> äîëæåí îáÿçàòåëüíî èìåòü òèï ïàðàìåòðà ââîäèìîãî ïåðâûì â ñïèñêå ïàðàìåòðîâ. Íàïðèìåð: int function (int prev_param, ...); double function (char *prev_param, ...); - äëÿ ñòðîê òèïà ôóíêöèè printf 1.15 Ôóíêöèè äëÿ ðàáîòû ñ äàòîé è âðåìåíåì Функция Прототип и краткое описание действий alarm *NIX unsigned alarm (unsigned sec); Устанавливает будильник на время sec. После истечения этого времени процесу посылается сигнал SIGALRM. char *asctime(struct tm *timeptr); Âîçâðàùàåò â ôîðìàòå äàòó è âðåìÿ, ïîëó÷åííóþ ñ ïîìîùüþ time <timer>. long biostime(int operation, long newtime); Ôóíêöèÿ âûïîëíÿåò îïåðàöèþ <operation> (0 - ×òåíèå òåêóùåãî çíà÷åíèÿ òàéìåðà; 1 - Óñòàíîâêà íîâîãî çíà÷åíèÿ òàéìåðà â òàêòàõ <newtime>). long bios_timeofday(unsigned operation, long *ticks); Ôóíêöèÿ âûïîëíÿåò îïåðàöèþ <operation> (_TIME_GETCLOCK - ×òåíèå òåêóùåãî çíà÷åíèÿ òàéìåðà; _TIME_SETCLOCK - Óñòàíîâêà íîâîãî çíà÷åíèÿ òàéìåðà â òàêòàõ <ticks>). clock_t clock(void); Âîçâðàùàåò âðåìÿ ðàáîòû ïðîãðàììû îò íà÷àëà ïðîãðàììû èëè îò ïîñëåäíåãî èñïîëüçîâàíèÿ ýòîé ôóíêöèè â òàêòàõ (18.2 òàêòà íà ñåêóíäó). Äëÿ ïîëó÷åíèÿ â ñåêóíäàõ íåîáõîäèìî ðåçóëüòàò ðàçäåëèòü íà êîíñòàíòó CLK_TCK (CLOCKS_PER_SEC). int clock_getres(clockid_t clk_id, struct timespec *res); Получить разрешение часов clk_id в структуру res. int clock_gettime (clockid_t clk_id, struct timespec *tp); Получить значение часов clk_id в структуру tp. int clock_settime (clockid_t clk_id, struct timespec *tp); Установить значение часов clk_id из структуры tp. char *ctime(time_t timer); Âîçâðàùàåò â ñèìâîëüíîì ôîðìàòå äàòó è âðåìÿ, ïîëó÷åííóþ ñ ïîìîùüþ time <timer>. void delay(unsigned х) ; Приостанавливает выполнение программы на <х> мсек. double difftime(time_t timer1, time_t timer0); Âîçâðàùàåò ðàçíîñòü çíà÷åíèé âðåìåíè <timer1> è <timer0> â âèäå ÷èñëà ñ ïëàâàþùåé òî÷êîé. void _dos_getdate(struct dosdate_t *date); Ïîìåùàåò ñèñòåìíóþ äàòó â ñòðóêòóðó <date>. void _dos_gettime(struct dostime_t *time); Ïîìåùàåò ñèñòåìíîå âðåìÿ â ñòðóêòóðó <time>. unsigned _dos_setdate(struct dosdate_t *date); Ïåðåóñòîíàâëèâàåò ñèñòåìíóþ äàòó â <date>. unsigned _dos_settime(struct dostime_t *time); Ïåðåóñòîíàâëèâàåò ñèñòåìíîå âðåìÿ â <time>. long dostounix(struct date *dos_date, struct time *dos_time); Âîçâðàùàåò ïðåîáðàçîâàííûå ñòðóêòóðû òèïà <date> è <time> â ôîðìàòå UNIX. asctime ANSI biostime * bios_time ofday clock ANSI clock_get res clock_get time clock_set time ctime delay * difftime ANSI _dos_get date _dos_get time _dos_set date _dos_sett ime dostouni x 17 ftime getdate * gettime * gmtime ANSI localtime ANSI mktime ANSI profil setdate * setitimer getitimer *NIX settime * sleep * usleep nanosleep stime * _strdate strftime ANSI POSIX void ftime(struct timeb *timeptr); Ïîìåùàåò èíôîðìàöèþ î ÷àñîâîì ïîÿñå â ñòðóêòóðó <timeptr>. void getdate(struct date *currrent); Ïîìåùàåò ñèñòåìíóþ äàòó â ñòðóêòóðó <current>. void gettime(struct time *currrent); Ïîìåùàåò ñèñòåìíîå âðåìÿ â ñòðóêòóðó <current>. struct tm *gmtime(time_t *timer); Ïðåîáðàçóåò ïîëó÷åííîå ñ ïîìîùüþ time âðåìÿ <timer> â ñòðóêòóðó òèïà tm ñ âðåìåíåì ïî Ãðèíâè÷ó. Äëÿ óñòàíîâêè âðåìåíè â ñîîòâåòñòâèè ñ òåêóùèì ÷àñîâûì ïîÿñîì è ñ ó÷åòîì ïåðåõîäà íà ëåòíåå âðåìÿ èñïîëüçóþòñÿ ãëîáàëüíûå ïåðåìåííûå: timezone è daylight. struct tm *localtime(time_t *timer); Ïðåîáðàçóåò ïîëó÷åííîå ñ ïîìîùüþ time âðåìÿ <timer> â ñòðóêòóðó òèïà tm. Äëÿ óñòàíîâêè âðåìåíè â ñîîòâåòñòâèè ñ òåêóùèì ÷àñîâûì ïîÿñîì è ñ ó÷åòîì ïåðåõîäà íà ëåòíåå âðåìÿ èñïîëüçóþòñÿ ãëîáàëüíûå ïåðåìåííûå: timezone è daylight. time_t mktime(struct tm *timeptr); Ïðåîáðàçóåò äàòó è âðåìÿ <timeptr> â ñåêóíäû îò 1/1/70. void profil (char *buff, int bufsiz, int offset, int scale); Подготовка временного профиля программы. Значения активности области программы начиная с offset длиной bufsiz*sizeof(int) помещяються в buff размером bufsiz*scale. Коэффициент scale необходимо считать беззнаковой денормализованная двоичной дробью с фиксированной точкой, стоящей слева от границы полуслова. (0FFFF = 1; 07FFF = 2; 03FFF = 4;01FFF = 8 ….) Анализ производиться в каждом такте часов. void setdate(struct time *current); Ïåðåóñòîíàâëèâàåò ñèñòåìíóþ äàòó â <current>. int getitimer(int which, struct itimerval *value); int setitimer(int which, struct itimerval *value, struct itimerval *ovalue); Получить и установить значение value интервального таймера which. Старое значение таймера сохраняеться в ovalue. Типы таймеров which: ITIMER_REAL – декр. в РВ и вызывает SIGALARM ITIMER_VIRTUAL – декр. только при выполнении процесса и вызывает SIGVTALRM; ITIMER_PROF - при выполнении процесса и при выполнении системы на защите процесса, вызывает SIGPROF. void settime(struct time *current); Ïåðåóñòîíàâëèâàåò ñèñòåìíîå âðåìÿ â <current>. void sleep(unsigned seconds); void usleep(unsigned long usec); int nanosleep(struct timespec *req, struct timespec *rem); Ôóíêöèÿ çàäàåò èíòåðâàë ïàóçû seconds â ñåêóíäàõ, usec в микросекундах и req в наносекундах. В rem помещаеться реально прошедшее время. int stime(time_t *seconds); Óñòàíàâëèâàåò âðåìÿ â ñåêóíäàõ <seconds> îò ïîëóíî÷è 1/1/1970. char *_strdate(char *datestr); Ïîìåùàåò òåêóùóþ äàòó â <datestr> â ñèìâîëüíîì âèäå. size_t strftime(char *string, size_t maxsize, char format, struct tm *timeptr); Âûâîäèò äàòó è âðåìÿ <timeptr> â ñòðîêó <string> ñ ìàêñèìàëüíûì ÷èñëîì ñèìâîëîâ <maxsize> â ôîðìàòèðîâàííîì âèäå <format>: %% - Ñèìâîë %; %a - Íàçâàíèå äíÿ íåäåëè (ñîêðàùåíèå); %A - Íàçâàíèå äíÿ íåäåëè (ïîëíîå); %b - Íàçâàíèå ìåñÿöà (ñîêðàùåíèå); %B - Íàçâàíèå ìåñÿöà (ïîëíîå); %ñ - Äàòà è âðåìÿ; %d - Äåíü ìåñÿöà (2 öèôðû: 01 - 31); %H - ×àñû (2 öèôðû: 00 - 23); %I - ×àñû (2 öèôðû: 01 - 12); %j - Äåíü (3 öèôðû, þëèàíñêèé); %m - Ìåñÿö (äåñÿòè÷íîå ÷èñëî 1 - 12); %M - Ìèíóòû (2 öèôðû: 00 - 59); %p - Îáîçíà÷åíèå ÀÌ (ïîñëå ïîëóíî÷è) èëè ÐÌ (äî); %S - Ñåêóíäû (2 öèôðû: 00 - 59); %U - Íîìåð íåäåëè (2 öèôðû: 00 - 53, 1-é äåíü âîñêð); _strtime time ANSI timer_cre ate timer_del ete timer_set time timer_get time timer_get overrun times *NIX tzset %w - Äåíü íåäåëè (0 = Âîñêðåñåíüå, 6 = Ñóááîòà); %W - Íîìåð íåäåëè (2 öèôðû: 00 - 53, 1-é äåíü - ïîí); %x - Äàòà; %X - Âðåìÿ; %y - Ãîä (2 öèôðû: 00 - 99); %Y- Ãîä (4 öèôðû); %Z - Èìÿ ÷àñîâîãî ïîÿñà. char *_strtime(char *timestr); Ïîìåùàåò òåêóùåå âðåìÿ â <timestr> â ñèìâîëüíîì âèäå. time_t time(time_t *timer); Возвращает òåêóùóþ äàòó (ñ 00:00:00 1/1/1970) è âðåìÿ (ñåê). А также помещает в <timer>. int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timer_id); Создать новый интервальный таймер. int timer_delete(timer_t *timer_id); Удалить интервальный таймер. int timer_settime(timer_t *timer_id, int flags, struct itimerspec *value, struct itimerspec *ovalue); Установка значения value интервального таймера timer_id. ovalue – содержит старое значение. int timer_gettime(timer_t *timer_id, struct itimerspec *value); Получить значения value интервального таймера timer_id. int timer_getoverrun(timer_t *timer_id); Получить количество перегрузок таймера timer_id. long times (struct tms *buffer); Получение информации о времени выполнения процесса и порожденных процессов в buffer. struct tms { time_t tms_utime; // время процесса в режиме задачи time_t tms_stime; // время процесса в режиме ядра time_t tms_cutime; // время потомков в режиме задачи time_t tms_cstime; // время потомков в режиме ядра }; void tzset(void); Ôóíêöèÿ ïðèñâàèâàåò ïîäõîäÿùåå çíà÷åíèå ãëîáîëüíûì ïåðåìåííûì timezone (÷àñîâîé ïîÿñ), daylight (ïåðåõîä íà ëåòíåå âðåìÿ), tzname (çíà÷åíèå ïåðåìåííîé ñðåäû TZ). * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ 1.16 Специальные функции Функция atexit Прототип и краткое описание действий int atexit(void (*function) (void)); Âûçûâàåò äàííóþ <function> ïîñëåäîâàòåëüíîñòü ôóíêöèé (äî 32) ïî îêîí÷àíèè ðàáîòû. Âûçûâàåìûå ôóíêöèè íå ìîãóò èìåòü ïàðàìåòðû. bdos int bdos(int dosfunc, unsigned dosdx, unsigned dosal); (dos.h) Ôóíêöèÿ âîçâðàùàåò ðåãèñòð AX ïîñëå âûïîëíåíèÿ ôóíêöèè DOS ñ íîìåðîì <dosfunc> è âõîäíûìè ïàðàìåòðàìè â ðåãèñòðàõ DX <dosdx> è AL <dosal> (ïðåðûâàíèå INT21H). bios_equipl unsigned bios_equiplist(void); ist Âîçâðàùàåò öåëîå ÷èñëî áåç çíàêà, áèòû êîòîðîãî (bios.h) èìåþò ñëåäóþùåå ïðåäíàçíà÷åíèå: 1) ïðèñóòñòâèå ãèáêîãî äèñêà; 2) ïðèñóòñòâèå ñîïðîöåññîðà; 3,4) Ïàìÿòü; 5,6) 01 = 40 õ 25 ìîíîõðîìíûé 10 = 80 õ 25 öâåòíîé 11 = 80 õ 25 ìîíîõðîìíûé; 7,8) Êîëè÷åñòâî ãèáêèõ äèñêîâ; 9,10) Êîëè÷åñòâî ïîñëåäîâàòåëüíûõ ïîðòîâ; 11) Ïðèñóòñòâèå èãðîâîãî àäàïòåðà; 12,13) Êîëè÷åñòâî ïðèíòåðîâ. _bios_keyb unsigned _bios_keybrd(unsigned command); rd Âûïîëíÿåò îïåðàöèÿ <command> (òàáëèöà À10) äëÿ (bios.h) ðàáîòû ñ êëàâèàòóðîé. 18 biosprint * int biosprint(int command, int byte, int port_number); (bios.h) Ôóíêöèÿ ðàáîòû ñ ïðèíòåðîì ÷åðåç ïîðò <port_number> (0 - LPT1; 1 - LPT2). Âûïîëíÿåò êîìàíäó <command> (0 - Ïå÷àòü çàäàííîãî áàéòà; 1 Èíèöèàëèçàöèÿ ïîðòà ïðèíòåðà; 2 - ×òåíèå ñòàòóñà ïðèíòåðà). Ïðè âûâîäå íà ïå÷àòü ïå÷àòàåòñÿ ñèìâîë <byte>. bios_serial unsigned bios_serialcom(int command, int port, char byte); com Ôóíêöèÿ âûïîëíÿåò êîìàíäû <command> (òàáëèöà (bios.h) À11) ïðè ðàáîòå ñ COM - ïîðòîì <port> (0 - COM1; 1 – COM2). Ïàðàìåòð <byte> çàäàåò ëèáî ïåðåäàâàåìûé áàéò, ëèáî íåêîòîðóþ õàðàêòåðèñòèêó ðàáîòû ïîðòà (òàáëèöà À12). Íåçàâèñèìî îò êîìàíäû, áèòû ñòàðøåãî áàéòà âîçâðàùàåìîãî çíà÷åíèÿ èìåþò ñëåäóþùåå ïðåäíàçíà÷åíèÿ (ïî íîìåð áèòîâ): 8 - Äàííûå ãîòîâû; 9 - Îøèáêà ïåðåïîëíåíèÿ; 10 - Îøèáêà ÷åòíîñòè; 11 - Îøèáêà êîäèðîâàíèÿ; 12 - Îáíàðóæåíèå îáðûâà; 13 - Ïåðåäàþùèé ðåãèñòð-çàùåëêà ïóñòîé; 14 - Ïåðåäàþùèé ðåãèñòð ñäâèãà ïóñòîé; 15 - Îòñóòñòâèå ïåðåñûëêè; 0 - Íå ãîòîâ ê ïåðåäà÷å; 1 - Íå ãîòîâ ê ðàáîòå; 2 - Âûçîâ íå ïðèíèìàåòñÿ; 3 - Óðîâåíü ëèíåéíîãî ñèãíàëà íå ñîîòâåòñòâóåò; 4 - Ãîòîâ ê ïåðåäà÷å; 5 - Ãîòîâ ê ðàáîòå; 6 - Âûçîâ ïðèíèìàåòñÿ; 7 - Ïîëó÷åí ëèíåéíûé ñèãíàë êàíàëà äàííûõ. _chain_inte void _chain_interrupt(void far *handler)()); rrupt * Âûïîëíÿåò ïåðâîíî÷àëüíóþ ïðîãðàììó ïðåðûâàíèÿ (dos.h) <handler> ñðàçó ïîñëå çàâåðøåíèÿ íîâîé. _cexit void _cexit(void); Âîñòîíàâëèâàåò: âåêòîð ïðåðûâàíèÿ ñâÿçàííûé ñ CtrlBreak, àäðåñà ïîäïðîãðàììû îáðàáîòêè çàâåðøåíèÿ âûïîëíÿåìîé ïðîãðàììû, à òàêæå àäðåñà ïðîãðàììû îáðàáîòêè êðåòè÷åñêèõ îøèáîê. _clear87 unsigned int _clear87(void); Âîçâðàùàåò òåêóùåå è ñáðàñûâàåò â íóëü ñëîâî ñîñòîÿíèÿ ïàêåòà ñ ïëàâàþùåé òî÷êîé (òàáëèöà À16). _control87 unsigned _control87(unsigned new, unsigned mask); Óñòàíàâëèâàåò íîâîå çíà÷åíèå ñëîâà óïðàâëåíèÿ ïàêåòîì ñ ïëàâàþùåé òî÷êîé (òàáëèöà À16); ñ ìàñêîé <mask> èçìåíÿåìûõ áèòîâ (1 - áèò èçìåíÿåòñÿ íà ñîîòâåòñòâóþùèé èç <new>) ctrlbrk * void ctrlbrk(int (*handler)(void)); Îïèñûâàåò ôóíêöèþ <handler> êàê ïîäïðîãðàììó îáðàáîòêè ïðåðûâàíèÿ îò Ctrl-Break. country * struct COUNTRY *country(int code, struct COUNTRY *info); (dos.h) Ôóíêöèÿ óñòàíàâëèâàåò òåêóùèé êîä ñòðàíû <code>, åñëè <info> = -1, èíà÷å ñòðóêòóðà çàïîëíÿåòñÿ òåêóùèìè õàðàêòåðèñòèêàìè. dosexterr int dosexterr(struct DOSERROR *errorinfo); (dos.h) Ôóíêöèÿ âîçâðàùàåò ñòðóêòóðó DOSERROR ñîäåðæàùóþ ïîäðîáíóþ èíôîðìàöèþ îá îøèáêå â ïðåäøåñòâóþùåé ôóíêöèè. _dos_getve void interrupt(*_dos_getvect(unsigned intnum))(); ct (dos.h) Âîçâðàùàåò àäðåñ ïðîãðàììû îáðàáîòêè ïðåðûâàíèÿ ñîîòâåòñòâóþùèé íîìåðó ïðåðûâàíèÿ <intnum>. _dos_setve void _dos_setvect(unsigned intnum, void ct (dos.h) interrupt(*handler)()); Óñòàíàâëèâàåò ïðåðûâàíèå <intnum> íà ïîäïðîãðàììó îáðàáîòêè ïðåðûâàíèÿ <handler>. _disable void _disable(void); (dos.h) Çàïðåò íà ïðåðûâàíèÿ. _enable void _enable(void); (dos.h) Ñíÿòèå çàïðåòà íà ïðåðûâàíèå. exit void exit(int status); Âîçâðàùàåò çíà÷åíèå <status> ïðè çàâåðøåíèè ïðîãðàììû. Ïðè âûõîäå ñ ïîìîùüþ _exit íå çàêðûâàþòñÿ îòêðûòûå ôàéëû. _fpreset void _fpreset(void); Ïîâòîðíî èíèöèàëèçèðóåò ïàêåò ñ ïëàâàþùåé òî÷êîé. geninterrup t * getcbrk * (dos.h) void geninterrupt(int interrupt); Ãåíåðèðóåò ïðåðûâàíèå ñ íîìåðîì <interrupt>. int getcbrk(void); Âîçâðàùàåò 1, åñëè òåêóùèé ðåæèì ïðîâåðêè Ctrl-Break ðàñøèðåííûé, èíà÷å 0. getdta char *getdta(void); (dos.h) Âîçâðàùàåò äëèííûé (32 áèòà) óêàçàòåëü òåêóùåé îáëàñòè ïåðåñûëêè íà äèñêå. getenv char *getenv(char *varname); ANSI Âîçâðàùàåò óêàçàòåëü íà èñêîìûé ýëåìåíò <varname> (stdlib.h) ïåðåìåííîé ñðåäû. Берет из char **envirom. getpass * char *getpass(const char *prompt); (get_passw Ôóíêöèÿ âûâîäèò íà ýêðàí ñòðîêó <prompt> è îæèäàåò ord) * ââåäåíèÿ ïàðîëÿ ñ ïîñëåäóþùèì íàæàòèåì Enter è âîçâðàòîì ââåäåííîãî ïàðîëÿ. _harderr void _harderr(int (*handler)()); (dos.h) Çàäàåò ôóíêöèþ <handler> îáðàáîò÷èê êðèòè÷åñêèõ îøèáîê. _hardresu void _hardresume(int result); me (dos.h) Ïåðåäàåò îïåðàöèîííîé ñèñòåìå êîä çàâåðøåíèÿ ïðîãðàììû <result>: _HARDERR_ABORT - Çàêîí÷èòü òåêóùþþ ïðîãðàììó _HARDERR_RETRY - Ïîâòîðèòü ñëóæåáíóþ ôóíêöèþ _HARDERR_FAIL - Ñíÿòü ñëóæåáíóþ ôóíêöèþ, âûäàþùóþ îøèáêó _HARDERR_IGNORE -Ïðîèãíîðèðîâàòü îøèáêó _hardretur void _hardreturn(int error); n Ïîìåùàåò â <error> øèôð îøèáêè âîçíèêøåé â (dos.h) ñèñòåìå. intdos int intdos(union REGS *insegs, union REGS *outregs); (dos.h) ôóíêöèÿ intdos èñïîëüçóåò ïðîãðàìíîå ïðåðûâàíèå INT21H. Ôóíêöèÿ intdos âîçâðàùàåò çíà÷åíèå â ðåãèñòðå AX, ïîñëå çàâåðøåíèÿ ñèñòåìíîãî âûçîâà . Åñëè cflag ïîëå â <outregs> îòëè÷åí îò íóëÿ, òî ïðîèçîøëà îøèáêà. kbhit int kbhit(void) ; (conio.h) Возвращает ненулевое целое, если в буфере клавиатуры присутствуют коды нажатия клавиш, в противном случае - нулевое значение. main main(int argc, char *argv[], char *envp[]) { <program-statements> }; Îñíîâíàÿ ôóíêöèÿ. Âûïîëíÿåòñÿ ïåðâîé ïðè çàïóñêå ïðîãðàììû. Êëþ÷åâîìó ñëîâó argc ïðèñâàèâàåòñÿ îáùåå ÷èñëî îòäåëüíûõ, ïðåäñòàâëÿþùèõ àðãóìåíòû êîìåíäíîé ñòðîêè äàííûõ. Êëþ÷åâîìó ñëîâó argv[] ïðèñâàèâàþòñÿ îòäåëüíûå, ïðåäñòàâëÿþùèå àðãóìåíòû êîìåíäíîé ñòðîêè äàííûå. Ïðèìåð: C:\> SHOW «Ïîêàç ïàðàìåòðîâ» D1 (argc = 3, argv[1] = SHOW, argv[2] = Ïîêàç ïàðàìåòðîâ, argv[3] = D1. Êëþ÷åâîìó ñëîâó anvp[] ïðèñâàèâàþòñÿ çíà÷åíèÿ ïåðåìåííûõ ñðåä.  ãëîáàëüíóþ ïåðåìåííóþ enveron ïîìåùàåòñÿ êîïèÿ ñîäåðæèìîãî îáëàñòè ñðåäû. nosound * void nosound(void); (dos.h) Прекращает подачу звукового сигнала, начатую функцией sound (). putenv int putenv(char *envstring); ANSI Óñòàíàâëèâàåò çíà÷åíèå ïåðåìåííîé ñðåäû â âèäå ñòðîêè <envstring> (ïðèìåð: «TZ=PST8PDT»). setcbrk * int setcbrk(int set); (dos.h) Óñòàíàâëèâàåò (<set> = 1) èëè îòìåíÿåò (<set> = 0) ðàñøèðåííûé ðåæèì ïðîâåðêè Ctrl-Break. setdta void setdta(char far *addres); (dos.h) Íàçíà÷àåò òåêóùóþ îáëàñòü ïåðåñûëêè íà äèñêå çàäàííóþ äëèííûì àäðåñîì <addres>. sound void sound(unsigned f); (dos.h) Вызывает звуковой сигнал с частотой <f> Гц. _status87 unsigned int _status87(void); Âîçâðàùàåò ñëîâî ñîñòîÿíèÿ ïàêåòà ñ ïëàâàþùåé òî÷êîé (òàáëèöà À17). syscall int syscall(int oper, int arg …); *NIX Для вызыва системной функции oper OS с парам. arg system int system(char *command); (stdlib.h) Âûïîëíÿåò âíóòðåííèè ïðîöåäóðû командного процесса command. uname Получить имя текущей UNIX системы * - Ôóíêöèÿ îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ 19 Òàáëèöà À10 - Êîäû îïåðàöèé êëàâèàòóðû Êîìàíäà Íàçíà÷åíèå _KEYBRD Çàäàåò ÷òåíèå ñèìâîëà èç áóôåðà êëàâèàòóðû. Åñëè _READ ìëàäøèé áàéò ðåçóëüòàòà ðàâåí 0, òî òîãäà ñòàðøèé áàéò ñîäåðæèò ðàñøèðåííûé êîä , ââåäåííûé ñ êëàâèàòóðû _NKEYBR Ïîçâîëÿåò ñ÷èòûâàíèå äîïîëíèòåëüíûõ êëàâèø D_READ òàêèõ êàê êëàâèøè íàïðàâëåíèÿ äâèæåíèÿ êóðñîðà _KEYBRD Çàäàåò ïðîâåðêó: åñòü èëè íåò ñèìâîë â áóôåðå _READY êëàâèàòóðû. Åñëè âîçâðàùàåòñÿ 0, òî áóôåð ïóñò; åñëè êîä âîçâðàòà - 0õFFFF, çíà÷èò ïîëüçîâàòåëü íàæàë Ctrl-C _NKEYBR Ó÷èòûâàåò ïðîâåðêó äîïîëíèòåëüíûõ êëàâèø D_READ òàêèõ êàê êëàâèøè íàïðàâëåíèÿ äâèæåíèÿ êóðñîðà _KEYBRD Çàäàåò âîçâðàò ðàáî÷åãî ñîñòîÿíèÿ êëàâèø: _SHIFTST Áèò 7 ON - íàæàòà êëàâèøà Ins ATUS Áèò 6 ON - íàæàòà êëàâèøà CapsLock Áèò 5 ON - íàæàòà êëàâèøà NumLock Áèò 4 ON - íàæàòà êëàâèøà ScrollLock Áèò 3 ON - íàæàòà êëàâèøà Alt Áèò 2 ON - íàæàòà ëåâàÿ êëàâèøà Shift Áèò 1 ON - íàæàòà ïðàâàÿ êëàâèøà Shift _NKEYBR Çàäàåò âîçâðàò ðàáî÷åãî ñîñòîÿíèÿ êëàâèø, D_SHIFT ó÷èòûâàÿ è äîïîëíèòåëüíûå êëàâèøè: STATUS Áèò 15 ON - íàæàòà êëàâèøà Sysreq Áèò 14 ON - íàæàòà êëàâèøà CapsLock Áèò 13 ON - íàæàòà êëàâèøà NumLock Áèò 12 ON - íàæàòà êëàâèøà ScrollLock Áèò 11 ON - íàæàòà ïðàâàÿ êëàâèøà Alt Áèò 10 ON - íàæàòà ïðàâàÿ êëàâèøà Ctrl Áèò 9 ON - íàæàòà ëåâàÿ êëàâèøà Alt Áèò 8 ON - íàæàòà ëåâàÿ êëàâèøà Ctrl Òàáëèöà À11 - Çíà÷åíèå ïàðàìåòðà command äëÿ ôóíêöèè _bios_serialcom Êîìàíäà Çíà÷åíèå _COM_INIT Óñòàíîâêà ïàðàìåòðîâ ðàáîòû ïîðòà _COM_RECEIVE Ïðèåì áàéòà èç ïîðòà _COM_SEND Ïîñûëêà áàéòà â ïîðò _COM_STATUS Ïîëó÷åíèå ñîñòîÿíèÿ ðàáîòû ïîðòà Òàáëèöà À12 - Çíà÷åíèå ïàðàìåòðà byte äëÿ ôóíêöèè _bios_serialcom Êîíñòàíòà Çíà÷åíèå _COM_CHR7 7 - áèòîâûå äàííûå _COM_CHR8 8 - áèòîâûå äàííûå _COM_STOP1 1 ñòîï-áèò _COM_STOP2 2 ñòîï-áèòà _COM_NOPARITY áåç êîíòðîëÿ ÷åòíîñòè _COM_ODDPARITY êîíòðîëü íà ÷åòíîñòü _COM_EVENPARITY êîíòðîëü íà íå÷åòíîñòü _COM_110 110 áîä _COM_150 150 áîä _COM_300 300 áîä _COM_600 600 áîä _COM_1200 1200 áîä _COM_2400 2400 áîä _COM_4800 4800 áîä _COM_9600 9600 áîä Òàáëèöà À16 - Çíà÷åíèÿ ñëîâà óïðàâëåíèÿ ïàêåòîì ñ ïëàâàþùåé òî÷êîé Øèôð(áèò) Íàçíà÷åíèå MCW_EM - Ïðè÷èíû ïðåðûâàíèé ïî èñêëþ÷èòåëüíûì ñèòóàöèÿì â ìàòåìàòèêå ñ ïëàâàþùåé òî÷êîé. (6 - áèò 0x003F). EM_INVALID Ãåíåðàöèÿ èñêëþ÷èòåëüíîé ñèòóàöèè ïðè (0-é áèò) íåäîïóñòèìåé îïåðàöèè; EM_DENORMAL â ñëó÷àå íåíîðìàëèçîâàííûõ îïåðåíäîâ; (1-é áèò) EM_ZERODIVIDE ïðè äåëåíèè íà íóëü; (2-é áèò) EM_OVERFLOW ïðè âîçíèêíîâåíèè ïåðåïîëíåíèÿ; (3-é áèò) EM_UNDERFLOW â ñëó÷àå ïîòåðè çíà÷èìîñòè; (4-é áèò) EM_INEXACT â ñëó÷àå ïîòåðè çíà÷èìîñòè; (5-é áèò) MCW_IC - Óïðàâëåíèå èíòåðïðåòàöèåé áåñêîíå÷íîñòè ïàêåòà ñ ïëàâàþùåé òî÷êîé. (6-é áèò 0x0100) IC_AFFINE «àôèííàÿ» áåñêîíå÷íîñòü (ïîëîæèòåëüíàÿ è îòðèöàòåëüíûå áåñêîíå÷íîñòè ðàçëè÷íû) IC_PROGECTIVE «ïðîåêòèâíàÿ» áåñêîíå÷íîñòü MCW_PC - Óïðàâëåíèå òî÷íîñòüþ ìàòåìàòèêè ñ ïëàâàþùåé òî÷êîé. (8-é è 9-é áèòû 0x0300) PC_24 òî÷íîñòü 24 áèòà; PC_53 òî÷íîñòü 53 áèòà; PC_64 òî÷íîñòü 64 áèòà; MCW_RC - Óïðàâëåíè îêðóãëåíèåì ðåçóëüòàòà ïðè îïåðàöèÿõ ñ ïëàâàþùåé òî÷êîé. (10-é è 11-é áèòû 0x0c00) RC_CHOP îòáðàñûâàíèåì ìëàäøèõ öèôð RC_UP äî áëèæàéøåãî áîëüøåãî ÷èñëà RC_DOWN äî áëèæàéøåãî ìåíüøåãî ÷èñëà RC_NEAR äî áëèæàéøåãî ÷èñëà CW_DEFAULTS - Çàäàíèå çíà÷åíèÿ ñëîâà óïðàâëåíèÿ ïî óìîë÷àíèþ. Òàáëèöà À17 - Ñëîâî ñîñòîÿíèÿ ïàêåòà ñ ïëàâàþùåé òî÷êîé Êîíñòàíòà Ñìûñë SW_INVALID Íåäîïóñòèìàÿ îïåðàöèÿ SW_DENORMAL Íåíîðìàëèçîâàííûé îïåðàíä SW_ZERODIVIDE Äåëåíèå íà íóëü SW_OVERFLOW Ïåðåïîëíåíèå SW_UNDERFLOW Ïîòåðÿ çíà÷èìîñòè (îòðèöàòåëüíîå ïåðåï.) SW_INEXACT Ïîòåðÿ òî÷íîñòè ðåçóëüòàòà Òàáëèöà À21 - Áèòû - ðåãèñòðà ôëàæêîâ ïðîöåññîðà Áèò Ôëàã Íàçíà÷åíèå 0 Ïåðåíîñ Óêàçûâàåò íà ïåðåíîñ ðàçðÿäà ïðè àðèôìåòè÷åñêîé îïåðàöèè 2 ×åòíîñòü Ðåçóëüòàò àðèôìåòè÷åñêîé îïåðàöèè èìååò ÷åòíîå ÷èñëî áèòîâ, óñòàíîâëåííûõ â 1 4 ÂñïîìîãàÓêàçûâàåò íà êîððåêòèðîâêó, íåîáõîäèìóþ òåëüíûé ïðè äâîè÷íî-äåñÿòè÷íûõ (BCD) îïåðàöèÿõ 6 Íóëü Íóëåâîå çíà÷åíèå ðåçóëüòàòà àðåôìåòè÷åñêîé îïåðàöèè èëè ðàâåíñòâî ïðè ñðàâíåíèè 7 Çíàê Óêàçûâàåò íà îòðèöàòåëüíûé ðåçóëüòàò 8 Ëîâóøêà Óïðàâëÿåò îäíîøàãîâûìè îïåðàöèÿìè (ïðè èñïîëüçîâàíèè DEBUG), ãåíåðèðóåò ïðåðûâàíèÿ â êîíöå êàæäîé êîìàíäû 10 ÍàïðàÓïðàâëÿåò íàïðàâëåíèåì âëåâî/âïðàâî â âëåíèå ïîâòîðÿþùèõñÿ îïåðàöèÿõ 11 ÏåðåïîÓêàçûâàåò íà ïåðåïîëíåíèå ïðè âûïîëíåíèè ëíåíèå àðåôìåòè÷åñêîé îïåðàöèè 1.17 Êëþ÷åâûå ñëîâà Èìÿ auto _asm _based * _cdecl const _emit Íàçíà÷åíèå Óêàçûâàþùèé, ÷òî ïåðåìåííàÿ èìååò ëîêàëüíóþ (àâòîìàòè÷åñêóþ) ïðîòÿæåííîñòü. Óêàçûâàåò, ÷òî îñòàëüíàÿ ÷àñòü óòâåðæäåíèÿ îòíîñèòåëüíî ñòðîêè èëè â ôèãóðíûõ ñêîáêàõ ÿâëÿåòñÿ óòâåðæäåíèåì àññåìáëåðà. Îïðåäåëÿåò, ÷òî îáúåêò äàííûõ ïîñòîÿííî íàõîäèòñÿ â ñåãìåíòå, îïðåäåëåííîì <îñíîâîé>. Óêàçàòåëè, èñïîëüçóþò òîëüêî 16 áèòîâ, ÷òî ïðè äîáàâëåíèè ê îñíîâå, îáåñïå÷èâàåò 32-ðàçðÿäíûé àäðåñíûé èíòåðâàë. Óêàçûâàåò, ÷òî ñâÿçàííàÿ ôóíêöèÿ äîëæíà âûçâàòüñÿ, èñïîëüçóÿ íîðìàëüíîå ñîãëàøåíèå î âûçîâàõ C (ïàðàìåòðû ïîìåùåíû ñïðàâà íàëåâî). Ãàðàíòèðóåò ðàçíèöó â èñïîëüçîâàíèè âåðõíåãî è íèæíåãî ðåãèñòðîâ ïðè ââîäå è äîïóñêàåò çíàê «_» ïåðåä èäåíòèôèêàòîðàìè Èñïîëüçóåòüñÿ äëÿ îáúÿâëåíèÿ îáúåêòà êàê íåìîäèôèöèðóåìîãî, ò.å âíóòðè ôóíêöèè ïàðàìåòð íå ìîæåò ìåíÿòüñÿ. _asm _emit byte Îïðåäåëÿåò ñîîòâåòñòâóþùèé îäèíî÷íûé áàéò <byte> òåêóùåãî îïðåäåëåíèÿ. _emit ïñåâäîêîìàíäà ïîäîáíà äèðåêòèâå DB ìàêðîàññåìáëåðà Microsoft. _emit ìîæåò îïðåäåëÿòü ñðàçó òîëüêî îäèí áàéò. 20 _export extern _fastcall _interrupt inline _loadds _pascal register _saveregs _segment (_seg) _segname * _self * sizeof static volatile Ýêñïîðòèðóåò ôóíêöèþ èç áèáëèîòåêè ñ äèíàìè÷åñêîé ñâÿçüþ. _export äîëæíî èñïîëüçîâàòüñÿ äëÿ ôóíêöèé, êîòîðûå ïîñòîÿííî íàõîäÿòñÿ â áèáëèîòåêå ñ äèíàìè÷åñêîé ñâÿçüþ. Ñëåäóþùåå óòâåðæäåíèå îáúÿâëÿåò funcsample êàê äàëåêóþ ôóíêöèÿ Ïàñêàëÿ, êîòîðàÿ ïîëó÷àåò óêàçàòåëü íà ïàðàìåòð ëþáîãî òèïà. Ïðèñóòñòâèå _export óêàçûâàåò ÷òî ôóíêöèþ ýêñïîðòèðóåòüñÿ: void _export _far _pascal funcsample( void *s ); Îáúÿâëÿåò ññûëêó ê ãëîáàëüíîé ïåðåìåííîé, îïðåäåëåííîé â äðóãîì ìåñòå (ôàéëå). Ïðè îáúÿâëåíèè èùåòñÿ îäíîèìåííàÿ âíåøíÿÿ ïåðåìåííàÿ. Îïðåäåëÿåò, ÷òî ôóíêöèÿ èñïîëüçóåò ñîãëàøåíèå î âûçîâàõ, ïî êîòîðîìó ïàðàìåòðû ïåðåäàåòñÿ ÷åðåç ðåãèñòðàòîðû, ÷òî áûñòðåå ÷åì ÷åðåç ñòåê. Óêàçûâàåò íà ôóíêöèþ îáðàáîòêè ïðåðûâàíèÿ. Êîìïèëÿòîð ãåíåðèðóåò ñîîòâåòñòâóþùèå ïîñëåäîâàòåëüíîñòè âõîäîâ è âûõîäîâ äëÿ ôóíêöèè îáðàáîòêè, âêëþ÷àÿ ñîõðàíåíèå è âîññòàíîâëåíèå âñåõ ðåãèñòðàòîðîâ è âûïîëíåíèå IRET êîìàíäû äëÿ âîçâðàòà. Ïîçâîëÿåò çàìåíÿòü ìåõàíèçì âûçîâà ôóíêöèé, âñòðàèâàíèåì êîäà íåêîòîðûõ ôóíêöèé, íåïîñðåäñòâåííî â ìåñòà èõ âûçîâà: memchr, memcmp, memcpy, memset, stpcpy, strcat, strchr, strcmp, strcpy, strlen, strncat, strncmp, strncpy, strnset, srrchr, rotl, rotr, fabs, alloc. Óêàçûâàåò, ÷òî ôóíêöèÿ äîëæíà óñòàíîâèòü ðåãèñòð DS, êàê äåëàåò huge ôóíêöèÿ, íî áåç _near èëè _far âûçîâîâ. _loadds far ýêâèâàëåíòåí huge. Ýòî êëþ÷åâîå ñëîâî ïîëåçíî èñïîëüçîâàòü ñ ôóíêöèÿìè ïðè ñîçäàíèè ïîäïðîãðàìì èíòåðôåéñà íèçêîãî óðîâíÿ. Óêàçûâàåò, ÷òî ôóíêöèÿ äîëæíà âûçâàòüñÿ, èñïîëüçóÿ ñîãëàøåíèå î âûçîâàõ Ïàñêàëÿ, èëè ÔÎÐÒÐÀÍÀ (ïàðàìåòðû ïîìåùåíû ñëåâà íàïðàâî). Äåëàåò íåñóùåñòâåííûì ó÷åò ïðîïèñíûõ è ñòðî÷íûõ ñèìâîëîâ è çàïðåùàåò èñïîëüçîâàíèå çíàêà «_» êàê ïðèñòàâêè ê èäåíòèôèêàòîðàì. Îïðåäåëÿåò, ÷òî ïåðåìåííàÿ äîëæíà áûòü ,åñëè âîçìîæíî, ñîõðàíåíà â ìàøèííîì ðåãèñòðå, . Сохраняет и восстанавливает регистры CPU при входе и выходе из функции. _saveregs не восстанавливает регистраторов, используемых для возвращения значений (регистр AX, или AX и DX): char *(_far _saveregs _loadds *funcptr)( void ); Òèï äàííûõ, èñïîëüçóåòñÿ êàê óêàçàòåëü íà ñåãìåíò. <datatype> _seg *<identifier> ; Îïðåäåëÿåò èìÿ ñåãìåíòà. Óêàçûâàåò íà ñàìîñòàÿòåëüíîñòü èìåíè. Îïðåäåëÿåò êîëè÷åñòâî ïàìÿòè(â áàéòàõ) ñâÿçàííûõ ñ ïåðåìåííîé èëè òèïîì (âêëþ÷àÿ ñîñòàâíûå òèïû). int sizearr = sizeof( array) / sizeof( array[0] ); Îáúÿâëÿåò, ÷òî ëîêàëüíàÿ(àâòîìàòè÷åñêàÿ) ïåðåìåííàÿ áóäåò ñîõðàíÿòü ñâîå çíà÷åíèå äî ñëåäóéùåãî âûçîâà ôóíêöèè. Âíóòðè áëîêà îáúÿâëÿåò, ÷òî ôóíêöèÿ áóäåò âèäíà òîëüêî âíóòðè èñõîäíîãî ôàéëà, â êîòîðîì îíà îïðåäåëåíà. Èñïîëüçóåòñÿ, äëÿ îáúÿâëåíèÿ, ïåðåìåííûõ êîòîðûå ìîãóò èçìåíÿòüñÿ âíå óïðàâëÿþùåé ïðîãðàììû (âíåøíèìè îïåðàöèÿìè). _doserrno environ[ ] errno _fmode _osmajor _osminor _osmode _psp sys_nerr sys_errlist[ ] timezone tzname[ ] _version * (_osversion ) _amblksiz daylight directvideo Çíà÷åíèå Ãëîáàëüíàÿ ïåðåìåííàÿ ñîäåðæåò «1» åñëè ñîïðîöåññîð ïðèñóòñòâóåò, èíà÷å «0». Èñïîëüçóåòñÿ, äëÿ óïðàâëåíèÿ ñâîáîäíûì ïðîñòðàíñòâîì ïàìÿòè(êó÷è). Çíà÷åíèå _amblksiz ïî óìîë÷àíèþ ðàâíÿåòñÿ 8ÊÁ (8192 áàéòà). Ïîñëåäóþùèå ðàñïðåäåëåíèå ïàìÿòè âûïîëíÿåòñÿ èç ýòèõ 8ÊÁ ïàìÿòè. Îïåðàöèîííàÿ ñèñòåìà âûçûâàåòñÿ òîëüêî, åñëè îáúåì ïàìÿòè, êîòîðûé çàïðàøèâàåòñÿ ïðåâûøàåò çíà÷åíèå óêàçàííîå â _amblksiz. Âû ìîæåòå óïðàâëÿòü ôðàãìåíòàöèåé ïàìÿòè, èñïîëüçóÿ _amblksiz, çàìåíÿÿ çàäàííûé ïî óìîë÷àíèþ êóñîê ïàìÿòè íà ëþáîå çíà÷åíèå. Íå íîëü åñëè ó÷èòûâàåòñÿ ïåðåõîä íà ëåòíåå âðåìÿ Ãëîáàëüíàÿ ïåðåìåííàÿ; çàäàåò ïðÿìîé âûâîä â Ñîäåðæåò ðàçíèöó (â ñåêóíäàõ) âî âðåìåíè, îòíîñèòåëåíî âðåìåíè ïî Ãðèíâè÷ó Ñîäåðæåò çíà÷åíèå ïåðåìåííîé ñðåäû TZ Ñîäåðæåò ãëàâíûé íîìåð âåðñèè â ìëàäøåì áàéòå è äîïîëíèòåëüíûé íîìåð â ñòàðøåì áàéòå * - Êîíñòàíòà îòñóòñòâóåò â íåêîòîðûõ êîìïèëÿòîðàõ 1.19 Ïðîöåññû-ïîòîìêè Ôóíêöèÿ abort ANSI execl(p) execl(p) e execv(p) execv(p) e 1.18 Ãëîáàëüíûå ïåðåìåííûå è êîíñòàíòû Èìÿ _8087 âèäåîïàìÿòü åñëè óñòàíàâëåíà «1» èíà÷å ÷åðåç BIOS. Ïðè âîçíèêíîâåíèè ошибкè происходит системнûé вызов, è â переменнîé _doserrno ïðèñâàèâàåòñÿ фактический код ошибки, возвращенный соответствующим ñèñòåìíûì âûçîâîì. Ñîäåðæåò çíà÷åíèÿ âñåõ ïåðåìåííûõ ñðåä Ñîäåðæåò êîä âîçíèêøåé îøèáêè (òàáëèöà À3) Óêàçûâàåò íà ðåæèì ðàáîòû ñ ôàéëàìè.Ìîæåò ïðèíèìàòü äâà çíà÷åíèÿ: O_TEXT, O_BINARY (òàáëèöà À4); Ñîäåðæåò ãëàâíûé íîìåð âåðñèè Ñîäåðæåò äîïîëíèòåëüíûé íîìåð âåðñèè Èíäèöèðóåò â êàêîì ðåæèìå çàïóùåíà ïðîãðàììà: DOS_MODE - â ðåàëüíîì ðåæèìå; OS2_MODE - â çàùèùåííîì ðåæèìå. Ñîäåðæåò àäðåñ ñåãìåíòà îáëàñòè PSP (ïðåôèêñ ïðîãðàììíîãî ñåãìåíòà). Êîëè÷åñòâî èìåþùèõñÿ ñîîáùåíèé â ìàñèâå îøèáîê sys_errlist Ìàñèâ âñòðîåííûõ ñîîáùåíèé îá îøèáêàõ fork getpgrp *NIX getpid *NIX getppid *NIX getgid *NIX Îïèñàíèå void abort(void); Прерывает выполнение программы, с генерацией дамппа памяти: core. int execl(char *cmdname, char *arg0, ... , char *argn, NULL); Çàïóñêàåò èñïîëíÿþùèé(çàìåùàåò ðîäèòåëüñêèé) ïðîöåññ-ïîòîìîê <cmdname> ñ âõîäíûìè àðãóìåíòàìè <arg0 ... argn>. NULL - äëÿ èíäèêàöèè êîíöà àðãóìåíòîâ. Ôóíêöèÿ execlp îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int execle(char *cmdname, char *arg0, ... , char *argn, NULL [, char *env ]); Çàïóñêàåò èñïîëíÿþùèé(çàìåùàåò ðîäèòåëüñêèé) ïðîöåññ-ïîòîìîê <cmdname> ñ âõîäíûìè àðãóìåíòàìè <arg0 ... argn> è ñ óêàçàíèåì íà îáëàñòü ñðåäû ïðîöåññà-ïîòîìêà <env>. NULL - äëÿ èíäèêàöèè êîíöà àðãóìåíòîâ. Ôóíêöèÿ execlpe îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int execv(char *cmdname, char *argv[]); Çàïóñêàåò èñïîëíÿþùèé(çàìåùàåò ðîäèòåëüñêèé) ïðîöåññ-ïîòîìîê <cmdname> ñ âõîäíûìè àðãóìåíòàìè <argv[]> (ìàñèâ ñèìâîëüíûõ ñòðîê ñ NULL â êîíöå). Ôóíêöèÿ execvp îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int execve(char *cmdname, char *argv[] [, char *env[] ]); Çàïóñêàåò èñïîëíÿþùèé(çàìåùàåò ðîäèòåëüñêèé) ïðîöåññ-ïîòîìîê <cmdname> ñ âõîäíûìè àðãóìåíòàìè <argv[]> (ìàñèâ ñèìâîëüíûõ ñòðîê ñ NULL â êîíöå) è ñ óêàçàíèåì íà îáëàñòü ñðåäû ïðîöåññà-ïîòîìêà <env[]>.Ôóíêöèÿ execvpe îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int fork(); Порождает дочерний процесс. Родительскому процессу возвращаеться ID дочернего процесса ,а дочернему 0. int getpgrp( ); Получить идентификатор группы текущего процесса. int getpid( ); Получить идентификатор текущего процесса. int getppid( ); Получить идентификатор родительского процесса. unsigned short getgid( ); Возвращает реальный идентификатор группы текущего процесса. 21 getegid *NIX unsigned short getegid( ); Возвращает действующий идентификатор группы текущего процесса. getsid pid_t getsid(pid_t pid); *NIX Возвращает идентификатор сеанса процесса pid (0 – родителя). getuid unsigned short getuid( ); *NIX Возвращает реальный идентификатор пользователя текущего процесса geteuid unsigned short geteuid( ); *NIX Возвращает действующий идентификатор пользователя текущего процесса. mlockall int mlockall(int flags); munlock int munlockall(void); all Блокирование и разблокирования всех страниц данного процесса. Что гарантирует выполнение процесса в памяти со всеми его структурами. Флаги flags могут быть такими: MCL_CURRENT – блокир. активные страницы; MCL_FUTURE – блокир. и активные в будущем. mlock int mlock(void *addr, size_t len); munlock int munlock(void *addr, size_t len); Блокирование и разблокирование страничности памяти addr длиной len. nice int nice (int incr); *NIX Увеличивает поправку к приоритету вызывающего процесса на величину incr (0-39). Чем поправка больше, тем ниже приоритет процесса. pause void pause ( ); Приостановка процесса до получения сигнала. ptrace int ptrace (int request, int pid, int addr, int data); *NIX Функция для управлением работой потомком. Пока процесс потомок приостоновлен родитель может выполнять различные операции над потомком pid. Request - определяет действия, которые должен выполнить системный вызов ptrace. Все остальные поля используются в зависимости от операции. sched_ge int sched_getparam(pid_t pid, struct sched_param *p); tparam int sched_setparam(pid_t pid, struct sched_param *p); sched_set Получить и установить параметры планирования p, param для процесса pid. sched_set int sched_getsheduler(pid_t pid); csheduler int sched_setsheduler (pid_t pid, int policy, struct sched_gets sched_param *p); cheduler Установить стратегию policy и параметры планирования p, для процесса pid. Получить стратегию policy планирования. sched_ge int sched_get_prioryty_max(int policy); t_prioryt int sched_get_prioryty_min(int policy); y_max[ Подучить значения максимального и минимального min] приоритетов для данной стратегии policy. sched_yie int sched_yield(void); ld Пропустить на выполнение процессы с таким же или более высоким приоритетом. setgid int setguid(unsigned short uid); *NIX Устанавливает реальный идентификатор группы текущего процесса uid. setpgid int setpgid(pid_t pid, pid_t pgid); *NIX Устанавливает идентификатор группы процесса с идентификатором pid равным pgid. Если = 0 то используеться идентификатор вызывающего процесса. Если pid и pgid равны то процесс становиться лидером группы процессов. setpgrp int setpgrp( ); *NIX Устанавливает идентификатор группы процесса, равным идентификатору этого процесса. setsid pid_t setsid(void); Создает новую группу процессов и сеанс с идентификаторами текущего процесса, если процесс не являеться лидером группы. Процесс не будет иметь управляющего терминала и будет являться Демоном. setuid *NIX signal ANSI spawnl(p ) spawnl(p )e spawnv( p) spawnv( p)e vfork *NIX wait waitpid int setuid(unsigned short uid); Устанавливает реальный идентификатор пользователя текущего процесса uid. void (*signal (int sig, void (*func) ( ))) (int); Устанавливает новую функцию обработки func (SIG_DFL – стандартная реакция; SIG_IGN игнорирование сигнала) для сигнала sig, исключительной ситуации (A23). Возвращает указатель функции старого обработчика. int spawnl(int mode, char *cmdname, char *arg0, ... , char *argn, NULL); Âûïîëíÿåò ïîðîæäåííûé ïðîöåññ-ïîòîìîê <cmdname> â ðåæèìå <mode> (òàáëèöà À15) ñ âõîäíûìè àðãóìåíòàìè <arg0 ... argn>. NULL - äëÿ èíäèêàöèè êîíöà àðãóìåíòîâ. Ôóíêöèÿ spawnlp îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int spawnle(int mode, char *cmdname, char *arg0, ... , char *argn, NULL[, char *env ]); Âûïîëíÿåò ïîðîæäåííûé ïðîöåññ-ïîòîìîê <cmdname> â ðåæèìå <mode> (òàáëèöà À15) ñ âõîäíûìè àðãóìåíòàìè <arg0 ... argn> è ñ óêàçàíèåì íà îáëàñòü ñðåäû ïðîöåññà-ïîòîìêà <env>. NULL äëÿ èíäèêàöèè êîíöà àðãóìåíòîâ. Ôóíêöèÿ spawnlpe îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int spawnv(int mode, char *cmdname, char *argv[]); Âûïîëíÿåò ïîðîæäåííûé ïðîöåññ-ïîòîìîê <cmdname> â ðåæèìå <mode> (òàáëèöà À15) ñ âõîäíûìè àðãóìåíòàìè <argv[]> (ìàñèâ ñèìâîëüíûõ ñòðîê ñ NULL â êîíöå). Ôóíêöèÿ spawnvp îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int spawnve(int mode, char *cmdname, char *argv[] [, char *env[] ]); Âûïîëíÿåò ïîðîæäåííûé ïðîöåññ-ïîòîìîê <cmdname> â ðåæèìå <mode> (òàáëèöà À15) ñ âõîäíûìè àðãóìåíòàìè <argv[]> (ìàñèâ ñèìâîëüíûõ ñòðîê ñ NULL â êîíöå) è ñ óêàçàíèåì íà îáëàñòü ñðåäû ïðîöåññà-ïîòîìêà <env[]>.Ôóíêöèÿ spawnvpe îðãàíèçóåò ïîèñê ôàéëà ïî âñåì ìàðøðóòàì. int vfork(); Порождает дочерний процесс с той же физической областью данных (запись в родительском отразиться на дочернем и наоборот). Родительскому процессу возвращаеться ID дочернего процесса ,а дочернему 0. pid_t wait(int stat); Перевести задачу в ожидание до завершения процесса дочернего процесса с кодом возврата в stat. Результат в stat может быть обработан макросами (А26 ). Возвращает: Если порожденный процесс приостановлен, старшие 8 бит статуса содержат номер сигнала, ставшего причиной приостановки, а младшие 8 бит устанавливаются равными 0177. Если порожденный процесс завершился посредством системного вызова exit, то младшие 8 бит статуса будут равны 0, а старшие 8 бит будут содержать младшие 8 бит аргумента, который порожденный процесс передает системному вызову exit. Если порожденный процесс завершился из-за получения сигнала, то старшие 8 бит статуса будут равны 0, а младшие 8 бит будут cодержать номер сигнала, вызвавшего завершение процесса. Кроме того, если младший седьмой бит (бит 0200) равен 1, будет произведен дамп оперативной памяти. pid_t waitpid(pid_t pid, int *stat, int opt); Перевести задачу в ожидание завершения процесса дочернего процесса pid. Если pid = -1 и opt = 0 то эквивалентен wait. Опции opt могут принимать знач: WNOHANG – Если не завершен - возвращает 0; Òàáëèöà À23 – Стандартные сигналы процессов Сигнал Назначение SIGHUP Освобождение линии (hangup). При отключении (01) терминала. SIGINT Прерывание программы (interrupt). (02) SIGQUIT Выход (quit). Аварийное завершение и сброс (03) образа памяти. SIGILL Некорректная команда (illegal instruction). Не (04) переустанавливается при перехвате. 22 SIGTRAP(05) SIGIOT (06) SIGABRT SIGEMT (07) SIGFPE (08) SIGKILL (09) SIGBUS (10) SIGSEGV (11) SIGSYS (12) SIGPIPE (13) SIGALRM(14 ) SIGPROF SIGVTALRM SIGTERM(15 ) SIGUSR1 (16) SIGUSR2 (17) SIGCHLD(18 ) SIGPWR (19) SIGWIND (20) SIGPHONE (21) SIGPOLL (22) NSIG (23) SIGCONT SIGSTOP SIGTSTR SIGTTIN SIGTTOUT SIGURG SIGXCPU SIGXFSZ Трассировочное прерывание (trace trap). Не переустанавливается при перехвате. Машинная команда IOT. P_NOWAIT P_NOWAITO Машинная команда EMT. Исключительная ситуация при выполнении операции с вещественными числами (floatingpoint exception). Уничтожение процесса (kill). Не перехватывается и не игнорируется. Ошибка шины (bus error). Некорректное обращение к сегменту памяти (segmentation violation). Некорректный параметр системного вызова (bad argument to system call). Запись в канал, из которого некому читать (write on a pipe with no one to read it). Будильник (alarm clock). Срабатывание профилирующего таймера. Устанавливаеться: setitimer(ITIMER_PROF, ..) Cрабатывание виртуального таймера. Устанавл.: setitimer(ITIMER_VIRTUAL, ..) Программный сигнал завершения (software termination signal). Посылаеться командой kill. Определяемый пользователем сигнал 1 (userdefined signal 1). Определяемый пользователем сигнал 2 (userdefined signal 2). Завершение порожденного процесса (death of a child). Ошибка питания (power fail). Изменение окна Изменение строки состояния Возникновение одного из опрашиваемых событий (дескриптор файла готов). Максимальное количество сигналов Продолжения работы остановленого процесса Сигнал останова. Нельзя перехватить. Терминальный сигнал остановки (Ctrl Z). Попытка ввода с терминала фоновым процессом. Происходит останока процесса. Попытка вывода на терминал фоновым процессом. Происходит останока процесса. Поступление в буфер сокета срочных данных. Превышение лимита процессорного времени. Выполняеться аварийное завершение. Превышение предела на размер файла. Выполняеться аварийное завершение. Òàáëèöà À26 – Макросы обработки результата функции wait. Макрос Описание WIFEXITED WIFEXITED(int status); Возвращает 1, если нормально завершен. WEXITSTATUS WEXITSTATUS(int status); Возвращает статус завершения. WIFSIGNALED WIFSIGNALED(int status); Возвращает 1, если потомком получен сигнал. WTERMSIG WTERMSIG(int status); Возвращает номер полученного сигнала. WIFSTOPPED WIFSTOPPED(int status); Возвращает 1, если потомк был остановлен. WSTOPSIG WSTOPSIG(int status); Возвращает номер остановившего сигнала. P_OVERLAY P_WAIT Состояния процессов Процесс выполняется в режиме задачи. Процесс выполняется в режиме ядра. Процесс не выполняется, но готов к запуску под управлением ядра. Процесс приостановлен и находится в оперативной памяти. Процесс готов к запуску, но программа подкачки (нулевой процесс) должна еще загрузить процесс в оперативную память, прежде чем он будет запущен под управлением ядра. Процесс приостановлен и программа подкачки выгрузила его во внешнюю память, чтобы в оперативной памяти освободить место для других процессов. Процесс возвращен из привилегированного режима (режима ядра) в непривилегированный (режим задачи), ядро резервирует его и переключает контекст на другой процесс. Процесс вновь создан и находится в переходном состоянии; процесс существует, но не готов к выполнению, хотя и не приостановлен. Это состояние является начальным состоянием всех процессов, кроме нулевого. Процесс вызывает системную функцию exit и прекращает существование. Однако, после него осталась запись, содержащая код выхода, и некоторая хронометрическая статистика, собираемая родительским процессом. Это состояние является последним состоянием процесса. 1.20 Сигналы Ôóíêöèÿ kill raise sigaddset sigdelset sigemptyset sigfillset sigaction siglongjmp Òàáëèöà À15 - Ðåæèìû ðàáîòû ïðîöåññà-ïîòîìêà Çíà÷åíèå Ðåæèì ðàáîòû P_DETACH Продолжает выполнять родительский процесс одновременно с дочерним процессом. Åсли родительский процесс завершен òî äочерний процесс отсоединяется îò иерархии процесса родителя, à дочерний процесс продолжает выполняться (асинхроннîå, порождåíèå допустимî только в защищенном режиме). Ðîäèòåëüñêèé ïðîöåññ ïðîäîëæàåò âûïîëíÿòñÿ ïàðàëåëüíî ñ ïðîöåññîì ïîòîìêîì. Ýòîò ðåæèì íåäîñòóïåí â DOS. Продолжает выполнять родительский процесс ïðè ýòîì игнорируÿ, îжèдàåìîå обращениå cwait против дочернего процесса (асинхроннî порождаåтñÿ допустимî только в защищенном режиме). Ïðîöåññ ïîòîìîê çàìåùàåò ðîäèòåëüñêèé ïðîöåññ â ïàìÿòè Ðîäèòåëüñêèé ïðîöåññ âîçîáíîâëÿåò ñâîþ ðàáîòó ïîñëå îêîí÷àíèÿ ïðîöåññà-ïîòîìêà sigprocmas k Описание int kill (pid_t pid, int sig); Посылает сигнал sig, процессу pid. 0 – всем процессам его группы; -1- сигнал посылается всем процессам, у которых реальный код идентификации пользователя совпадает с кодом исполняющегося процесса. n – процессу с идентификатором n; -n - сигнал посылается всем процессам, входящим в группу с абсолютным значению pid. int raise(int sig); Посылает сигнал sig текущему процессу. int sigaddset(sigset_t *set, int signo); Добавляет сигнал signo в набор. int sigdelset(sigset_t *set, int signo); Удалить сигнал signo из набора. int sigemptyset(sigset_t *set); Инициализирует набор set, исключив из него все сигналы. int sigfillset(sigset_t *set); Инициализирует набор set, включив в него все сигналы. int sigaction(int signo, struct sigaction *act, struct sigaction *oact); Задает обработчик на сигнал signo. Обработчик задается в act. Oact – для сохранения в нем старого обработчика сигнала при act = 0. int siglongjmp(sigjmp_buf env, int val); Переходит на позицию env, ранее сохраненную. Val – содержит значение для возврата функцией sigsetjmp. int sigprocmask(int how, sigset_t *set, sigset_t *oset); Выполнение действий how над группой сигналов set. How - может принимать значения: SIGMASK – маскирует сигналы, указанные в set SIGBLOCK – блокирует сигналы, указанные в set с добавлением к текущему набору. SIG_UNBLOCK – деблокирует сигналы, указанные в set. 23 sigsetjmp int sigsetjmp(sigjmp_buf env, int savemask); Сохраняет текущее состояние программы в env. Если savemask не нуль, то сохраняеться и текущая маска сигналов. GETALL GETNCNT GETPID Получние значений всех семафоров множества. Число процессов ожидающих ресурсов. Возвращает PID процесса выполнившего вызов semop. Возвращает значение одного семафора из множества Число процессов ожидающих 100% освобождения ресурса. Удаляет очередь из ядра Сохроняет структуру с ID в буфере. Устанавливает ipc_perm структуры c ID Устанавливает значения семафоров множества, взятые из элемента array объединения. Устанавливает значение конкретного семафора как элемент val объединения. GETVAL 1.21 IPC GETZCNT Ôóíêöèÿ ftok POSIX Описание key_t ftok( char *pathname, char proj ); Генерирует ключ IPC путем смешивания информации о файле pathname с символом proj. msgctl POSIX int msgctl (int msqid, int cmd, msqid_ds *buf); Послать команду cmd сообщению msqid с параметрами buf. int msgget (key_t key, int msgflg); Возвращает дескриптор очереди сообщений для ключа key с правами доступа (А24) msgflg. int msgsnd(int msqid,msgbuf *msgp, int msgsz, int msgflg); Отправить сообщение msgp длиной msgsz и с флагами msgflg, по дескриптору сообщения msqid. int msgrcv (int msqid, msgbuf *msgp, int msgsz, long msgtyp, int msgflg); Получить сообщение из дескриптора сообщения msqid, в буфер msgp размером msgsz с типом msgtyp и флагами msgflg. Если msgtyp=0 – читать первое сообщение из очереди, если < 0 – получить сообщение с минимальным типом не менее msgtyp. IPC_RMID IPC_STAT IPC_SET SETALL Сообщения msgget POSIX msgsnd POSIX msgrcv POSIX Семафоры semctl POSIX semget POSIX semop POSIX int semctl (int semid, int semnum, int cmd, semun arg); Выполнить команду cmd над semnum семафорами с идентификатором semid. int semget (key_t key, int nsems, int semflg); Получение идентификатора множества семафоров по ключу key, с флагами semflg int semop (int semid, sembuf **sops, unsigned nsops); Операции над семафорами. Выполняет операции для nsops семафоров описанных в sops для группы семафоров semid. Разделяемая память shmat *NIX shmctl *NIX char *shmat (int shmid, char *shmaddr, int shmflg); Присоединяет разделяемый сегмент памяти, ассоциированный с идентификатором shmid, к сегменту данных вызывающего процесса с адресом shmaddr и флагами shmflg. Возвращает адрес памяти. int shmctl (int shmid,int cmd, struct shmid_ds *buf); Функция для выполнения операций cmd с разделяемой памятью shmid (А24). shmdt *NIX int shmdt(char *shmaddr); Отсоеденяет разделяемый адресом shmaddr. shmget *NIX int shmget(key_t key,int size,int shmflg); Возвращает идентификатор разделяемого сегмента памяти, определяемого ключём key и размером size с опциями shmflg (А24). сегмент памяти, Òàáëèöà À24 – Флаги доступа к IPC и команды для функций *_ctl Флаг Назначение Флаги IPC_CREAT Cоздавать при отсутствии IPC_EXCL Ошибка если существеут и используеться IPC_CREAT IPC_NOWAIT Выход по ошибке отсутствия без ожидания. MSG_NOERRO Не выходить по ошидке длины сообщения, а R обрезать его. SHM_RND Округление до ближейшей страницы. SHM_RDONL Открыть разделяемую область в режиме Y только для чтения. SEM_UNDO Отменить действи при завершении процесса Команды с SETVAL 1.22 Сокеты Ôóíêöèÿ accept POSIX bind POSIX connect Описание int accept(int s, sockaddr *my_addr, socklen_t addrlen); Принимает запросы на подключение к процессусерверу. В my_addr – Возвращается адрес описания подключаемого клиента. int bind(int sockfd, sockaddr *my_addr, socklen_t addrlen); Связывает дескриптор гнезда sockfd с именем определенном структурой my_addr, длиной addrlen. int connect(int sockfd, sockaddr *my_addr, socklen_t addrlen); Запрос на подключение к существующему гнезду. my_addr – указывает на выходное гнездо. gethostbya ddr gethostbyn ame gethostent getservby name getservby port getservent getsockn int getsockname(int s, sockaddr *my_addr, socklen_t ame *addrlen); POSIX Получает имя гнездовой связи, установленое ранее bind. getsocko int getsockopt(int s,int level, int optname, void *optval, pt socklen_t *optlen); POSIX Возвращает опции optname сокета s для уровня level в буфер optval длиной optlen. listen int listen(int s, int backlog); POSIX Устанавливает длину backlog очереди запросов для гнезда s. recv int recv(int s, void *buf, size_t len, int flags); POSIX Возвращает количество принятых данных длиной len в буфер msg из сокета s с флагами flags. recvmsg int recvmsg(int s, msghdr *msg, int flags); POSIX Принимает сообщение в msg из сокета s. recvfrom int recvfrom(int s, void *msg, size_t len, int flags, POSIX sockaddr *my_addr, socklen_t addrlen); Возвращает количество принятых данных длиной len в буфер из сокета s с описанием в my_addr с флагами flags. send int send(int s, void *msg, size_t len, int flags); POSIX Возвращает количество переданных данных длиной len из буфера msg на сокет s с флагами flags. sendmsg int sendmsg(int s, msghdr *msg, int flags); POSIX Отправить сообщение из msg на сокет s. sendto int sendto(int s, void *msg, size_t len, int flags, sockaddr POSIX *my_addr, socklen_t addrlen); Возвращает количество переданных данных длиной len из буфера на сокет s с описанием в my_addr с флагами flags. setsocko int setsockopt(int s,int level, int optname, void *optval, pt socklen_t optlen); POSIX Устанавливает опции optname сокета s для уровня level из буфера optval длиной optlen. 24 socket POSIX shutdown POSIX int socket(int domain, int type, int protocol); Устанавливает оконечную точку линии связи. Domain – «UNIX system» или «Internet» Type – Тип связи через гнездо (виртуальный канал или дейтаграмма) Protocol – Тип протокола. Закрытие гнезда выполняется функцией close int shutdown(int s, int how); Закрывает сокет s, с указанием в how кому запрещено в дальнейшем пользоваться сокетом. 1.23 Потоки (POSIX) Ôóíêöèÿ Описание pthread_create int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); Создает новый поток thread с аттрибутами attr и запускает в потоке функцию start_routine с аргументами arg. *_cleanup_pu sh *_detach int pthread_detach(pthread_t *th); Установить выполняющийся поток th в отсоеденёное состояние. *_exit void pthread_exit(void *retval); Прерывает выполнение вызывающего потока с кодом возврата в retval. *_join int pthread_join(pthread_t *th, void **thread_return); Ожидать окончания потока th. После окончания в thread_return помещается возвращаемое потоком значение. *_kill int pthread_kill(pthread_t thread, int signo); Послать сигнал signo потоку thread. *_once int pthread_once(pthread_once_t once_control, void (*init_routine)(void)); ???????????????? *_getschedpa int pthread_getschedparam(pthread_t thread, int ram *policy, struct sched_param *param); Получить параметры планирования для потока thread. policy может принимать значения: SCHED_OTHER – регулярный, не реал. время; SCHED_RR – реальное время round-robin; SCHED_FIFO - реальное время FIFO; *_setschedpa int pthread_setschedparam(pthread_t thread, int ram policy, struct sched_param *param); Установить параметры планирования для потока thread в policy и param. *_sigmask int pthread_sigmask(int how, const sigset_t *newmask , sigset_t *oldmask); Выполнение действий how над группой сигналов set текущего потока . How – может принимать значения: SIGMASK – маск. cигналы, указанные в set SIGBLOCK – блок. сигналы, указанные в set с добавлением к текущему набору. SIG_UNBLOCK – дебл. сигналы, указанные в set. sigwait int sigwait(const sigset_t *set, int *sig); Приостанавливает поток до прихода одного из сигналов описанных в set . Номер пришедшего сигнала помещаеться в sig. Cancelation *_cancel int pthread_cancel(pthread_t *thread); Отправляет прерывающий запрос потоку thread. *_setcancelst int pthread_setcancelstate(int state, int *oldstate); ate Включает или выключает реакцию на прервающий запрос для потока state. В oldstate возвращается старое состояние: PTHREAD_CANCEL_ENABLE – включить; PTHREAD_CANCEL_DISABLE – выключить; *_setcancelty int pthread_setcanceltype(int type, int *oldtype); pe Устанавливает способ ответа на прерывающий запрос type. В oldtype возвращается старое значение: PTHREAD_CANCEL_ASYNCHRONOUS – сразу; PTHREAD_CANCEL_DEFERED – отложено; *_testcancel void pthread_testcancel(void); Проверка прерываний. Attributes *_attr_init int pthread_attr_init(pthread_attr_t *attr); Инициализирует атрибуты потока по умолчанию и заполняет этими значениями attr. MUTEX (для зашиты разд. данных от совм. модификации) *_mutex_des int pthread_mutex_destroy(pthread_mutex_t troy *mutex); Уничтожает mutex, если он разблокирован. *_mutex_init int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *mutexattr); Инициализация объектов блокирования совместных ресурсов mutex с аттрибутами mutexattr. pthread_mutex_t может иметь вид: PTHREAD_MUTEX_INITIALIZER - fast; PTHREAD_RECURSIVE_MUTEX_INITIALIZE R_NP – recursive; PTHREAD_ERRORCHECK_MUTEX_INITIALI ZER_NP - error cheking. *_mutex_lock int pthread_mutex_lock(pthread_mutex_t *mutex); Если mutex не заблокирован то блокируется и возвращается управление, если уже заблокирован то ожидает разблокировки. *_mutex_tryl int pthread_mutex_trylock(pthread_mutex_t ock *mutex); Тоже что и pthread_mutex_trylock, но без ожидания разблокировки. *_mutex_unloc int pthread_mutex_unlock(pthread_mutex_t k *mutex); Разблокирует mutex, если он заблокирован. В режиме fast – беззаговорочная разблокировка. В recursive уменьшения счетчика блокировок. *_mutexattr_ int pthread_mutexattr_init(pthread_mutexattr_t init *mutexattr); Установка значений атрибутов по умолчанию в mutexattr. *_mutexattr_ int pthread_mutexattr_destroy(pthread_mutexattr_t destroy *mutexattr); ???? *_mutexattr_ int pthread_mutexattr_getkind_np( getkind_np pthread_mutexattr_t *mutexattr, int kind); Получить атрибуты для kind; *_mutexattr_ int pthread_mutexattr_init_setkind_np setkind_np (pthread_mutexattr_t *mutexattr, int kind); Установить атрибуты для kind; Conditions *_cond_broa int pthread_cond_broadcast(pthread_cond_t *cond); dcast Сбрасывает все потоки ожидающие cond. *_cond_destr int pthread_cond_destroy(pthread_cond_t *cond); oy Уничтожает условную переменную cond. *_cond_init int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); Инициализирует условную переменную cond c атрибутами cond_attr; Переменная может быть инициализированна статически: PTHREAD_COND_INITIALIZER *_cond_signa int pthread_cond_signal(pthread_cond_t *cond); l Сбрасывает один из потоков ожидающих cond. *_cond_time int pthread_cond_wait(pthread_cond_t *cond, dwait pthread_mutex_t *mutex, struct timespec *abstime); Разблокирует mutex и переходит в режим ожидания cond на время abstime. *_cond_wait int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); Разблокирует mutex и переходит в режим ожидания cond. Потоко специфические данные *_key_create int pthread_key_create(pthread_key_t key, void (*destr_function)(void *)); Создает новый TSD ключ key. определяет функция деструктора destr_function для данного ключа. Эта функция вызывается при завершении потока (может быть NULL). *_key_delete int pthread_key_delete(pthread_key_t key); Освобождает TSD ключ, без вызова функции деструктора destr_function. *_setspecific int pthread_setspecific(pthread_key_t key, void *pointer); Устанавливает значение поля ключа key в значение указателя pointer. *_getspecific void *pthread_getspecific(pthread_key_t key); Возвращает значение поля ключа key. Семафоры 25 sem_init sem_wait sem_trywait sem_post sem_getvalue sem_destroy *_barrier_ini t *_barrier_des troy *_barrier_wa it *_barrierattr _init *_barrierattr _destroy *_barrierattr _getpshared *_barrierattr _setpshared int sem_init(sem_t *sem, int pshared, unsigned int value); Инициализирует семафор sem с установкой значения value. Значение pshared определяет область действия семафора, если 0 – в пределах текущего процесса иначе везде. int sem_wait(sem_t *sem); Останавливает поток до ненулевого значения семафора sem. Иначе уменьшает значение sem. int sem_trywait(sem_t *sem); Тоже что и sem_wait, но без ожидания. int sem_post(sem_t *sem); Увеличить значение семафора sem на 1. int sem_getvalue(sem_t *sem, int *sval); Получить значение семафора sem в sval. int sem_destroy(sem_t *sem); Удаление семафора. Барьеры int pthread_barrier_init(pthread_barrier_t *barier, pthread_barrierattr_t attr, int count); Инициализировать барьер. int pthread_barrier_destroy(pthread_barrier_t *barier); Уничтожить барьер. int pthread_barrier_wait(pthread_barrier_t *barier); Синхронизировать учавствующие нити в барьере. int pthread_barrierattr_init(pthread_barrierattr_t attr); Инициализировать барьерные атрибуты объекта. int pthread_barrierattr_destroy(pthread_barrierattr_t attr); Уничтожить баръерные аттрибуты объекта. int pthread_barrierattr_getpshared( pthread_barrierattr_t *attr, int *pshared); Получить значение атрибута доступа к процессу для барьера. int pthread_barrierattr_setpshared( pthread_barrierattr_t *attr, int pshared); Установить значение атрибута доступа к процессу для барьера. 1.23 Терминал Ôóíêöèÿ termios (struct) Описание tcflag_t c_iflag; - Режим ввода (A25) tcflag_t c_oflag; - Режим вывода (A25) tcflag_t c_cflag; - Управляющие режимы (A25) tcflag_t c_lflag; - Режимы дисц. линии связи cc_t c_cc[NCCS]; - Управляющие символы (A25) cfgetispeed int cfgetispeed(struct termios *tdes); Получить скорость ввода speed из tdes. cfgetospee int cfgetospeed(struct termios *tdes); d Получить скорость вывода speed из tdes. cfsetispeed int cfsetispeed(struct termios *tdes, speed_t speed); Установить скорость ввода speed в tdes. cfsetospee int cfsetospeed(struct termios *tdes, speed_t speed); d Установить скорость вывода speed в tdes. isatty int isatty(int fieldes); Возвращает 1, если дескриптором открытого файла описывает терминал. tcdrain int tcdrain(int ttyfd); Приостанавливает работу процесса до записи текущего вывода в терминал ttyfd. tcflow int tcflow(int ttyfd, int actions); Обеспечивает старт/стопное управление драйвером терминала ttyfd. Actions – может принимать знаение: TCIOFF – ввод приостанавливаеться; TCOOFF – вывод приостанавливаеться; TCION - ввод возобновляеться; TCOON – вывод возобновляеться; tcflush int tcflush(int ttyfd, int queue); Очищает заданную очередь терминала ttyfd. Queue: TCIFLUSH- Очищает очередь ввода; TCOFLUSH - Очищает очередь вывода; TCIOFLUSH - Очищает очередь ввода и ввывода; tcgetattr tcsendbr k tcsetattr ttyname grantpt ptsname unlockpt int tcgetattr(int ttyfd, struct termios *tsaved); Сохраняет текущее состояние терминала связанное с дескриптором ttyfd в tsaved. int tcsendbrk(int ttyfd, int duration); Посылка сигнала прерывания сеанса связи, которому соответствует посылка нулевых битов в течении времени заданного duration. int tcsetattr(int ttyfd, int actions, struct termios *tnew); Устанавливает новое состояние терминала связанное с дескриптором ttyfd из tnew. Actions – определяет когда устанавливать новые аттрибуты: TCSANOW – немедленное выполнение; TCSADRAIN–ожидать опусташения очереди вывода TCSAFLUSH-с очисткое еще и очереди ввода. char * ttyname(int filedes); Возвращает имя терминального устройства связанного с дескриптором открытого файла. Псевдотерминал Изменение прав доступа ведомого устройства псевдотерминала. Получить имя ведомого устройства Разблокировать ведомое устройство Таблица A25 – Значения различных структур терминала Êîманда Çíà÷åíèå Значение поля c_cc в структуре termios VEOF Символ конца файла (EOF character) VEOL Символ конца строки (End of line marker) VERASE Символ стирания (Erase character) VINTR Клавиша прерывания (Interrupt key) VKILL Символ удаления строки (Kill character) VMIN Наименьшее число символов, которое должно быть принято до возврата из read. VQUIT Клавиша завершения (Quit key) VSTART Символ продолжения передачи данных (Start char.) VSTOP Символ остановки передачи данных (Stop char.) VSUSP Символ перевода в фон. VTIME Максимальное время ожидания для read (*10*ms). Значение поля c_cflag в структуре termios PARENB Вкличить проверку четности PARODD Ожидаемый контроль: контроль нечетности. Значение поля c_iflag в структуре termios INLCR Преобразовать (NL) в (CR) IGNCR Игнарировать (CR) ICRNL Преобразовать (CR) в (NL) IXON Разрешить старт/стопное управление выводом IXANY Продолжить вывод при нажатии любого символа IXOFF Разрешить старт/стопное управление вводом Значение поля c_oflag в структуре termios ONLCR Преобразовать символ возврата (CR) в (CR) и (NL) OCRNL Преобразовать символ возврата (CR) в (NL) ONOCR Не выводить символ возврата каретки в нулевом столбце. ONLRET Символ (NL) выполняет роль символа (CR) Значение поля c_flag в структуре termios ICANON Канонический построчный ввод ISIG Разрешить обработку прерываний IEXTEN Разрешить дополнительную (зависящую от реализации) обработку вводимых символов. ECHO Разрешить отображение вводимых символов ECHOE Символ удаления как возврат-пробел-возврат ECHOK Отображать новую строку после удаления строки ECHONL Отменить очистку буфера ввода после прерывания NOFLSH Отменить очистку буфера ввода после прерывания TOSTOP Посылать сигнал SIGTTOU при попытке вывода фоновым процессом 1.24 Ñïîñîáû ìíîãîðàçîâîãî èñïîëüçîâàíèÿ ôóíêöèé è MAK - ôàéëû 1.24.1 Áèáëèîòåêè è ñïîñîáû ìíîãîðàçîâîãî èñïîëüçîâàíèÿ ôóíêöèé 26 Îïåðàöèÿ Ïëäêëþ÷åíèå îáúåêòíîãî ôàéëà äëÿ ïîâòîðíîãî èñïîëüçîâàíèÿ Ñîçäàíèå áèáëèîòåêè MY_STUFF.LIB Äîáàâëåíèå îáúåêòíûõ ôàéëîâ â áèáëèîòåêó Óäàëåíèå îáúåêòíîãî ôîéëà èç áèáëèîòåêè Çàìåíà îáúåêòíîãî ôàéëà â áèáëèîòåêå Èçâëå÷åíèå ïðîãðàìíîãî êîäà ôàéëà èç áèáëèîòåêè è ïðèñâàèâàíèå ýòîãî êîäà îäíîèìåííîìó ôàéëó Âûäà÷à ñîäåðæèìîãî áèáëèîòåêè íà ïðèíòåð ,ïå÷àòü èëè ôàéë Èñïîëüçîâàíèå áèáëèîòåêè MY_STUFF.LIB ïðè êîìïèëÿöèè ôàéëà Ñîçäàíèå êàðòû ñâÿçåé file_len.map äëÿ êîìïèëèðóåìîãî ôàéëà file_len.c Ñâÿçûâàíèå ôàéëîâ â îäèí ïðîåêò ñ ïîìîùüþ êîìàíäíîé ñòðîêè Ñâÿçûâàíèå ôàéëîâ â îäèí ïðîåêò ñ ïîìîùüþ êîìàíäíîé ñòðîêè Îïèñàíèå bcc find.c str.obj tlyb my_stuff.lib +str_len.obj tlyb my_stuff.lib +str_len.obj +strupr.obj tlyb my_stuf.lib -strlwr.obj tlyb my_stuff.lib +stlwr.obj tlyb my_stuff.lib *stupr.obj tlib grsphics.lib, con(prn, «filename») bcc find_len.c my_stuff.lib bcc -lm file_len.c str_len.obj tlink find_str.obj str_len.obj, find_str.exe, find_str. map, somelib.lib tlink @find_str.lnk 1.24.2 Ñîçäàíèå è ðàáîòà ñ MAK - ôàéëàìè Êîìà-íäû @ # & -N <, >, >> <<, && $< $(macros) Îïèñàíèå make make -f find_len.mak Âûïîëíåíèå MAKE ôàéëà makefile.mak è ôàéëà find_len.mak. Ïåðåä âûïîëíåíèåì ýòèõ ôàéëîâ âûïîëíÿåòñÿ ôàéë builtins.mak åñëè îí ïðèñóòñòâóåò.  ýòîò ôàéë ìîæíî ïîìåùàòü êîñâåííûå ïðàâèëà èñïîëüçóåìûå íåñêîëüêèìè MAK ôàéëàìè. (budget.exe: budget.c budget.h budget.lib bcc budget.c budget.lib) Åñëè ôàéë budget.exe îòñóòñòâóåò èëè ñòàðåå ÷åì îäèí èç ôàéëîâ budget.c, budget.h è budget.lib, òî âûïîëíÿåòñÿ bcc budget.c budget.lib Êîìàíäû ïîñëå ýòîãî ñèìâîëà íå îòîáðàæàþòñÿ ïðè âûïîëíåíèÿ Óêàçûâàåò ÷òî ñëåäóþùèé òåêñò â ñòðîêå êîìåíòàðèé budgetexe: budget.c account.c payroll.c & bcc $? Çàäàåò îòäåëüíóþ êîìïèëÿöèþ êàæäîãî îáíîâëåííîãî ôàéëà çàâèñèìîñòè: bcc budget.c, bcc account.c, bcc payroll.c Ïîìåùàåòñÿ ïåðåä êîìàíäîé, äëÿ ñðàâíåíèÿ êîäà çàâåðøåíèÿ ñ <N>. Åñëè êîä çàâåðøåíèÿ áîëüøå N, MAKE ïðåêðàòèò äàëüíåéøåå ïîñòðîåíèå ïðîãðàììû. Äëÿ èãíîðèðîâàíèÿ êîäà çàâåðøåíèÿ öèôðà <N> íå óêàçûâàåòñÿ. Âûïîëíÿþò òå-æå ôóíêöèè ÷òî è â êîìàíäíîé ñòðîêå. Çàäàåò ïåðåíàçíà÷åíèå ñòàíäàðòíîãî ââîäà äëÿ êîìàíäû: (budget.exe: budget.c showmsg << ^Ïîêàç ñòðîêè ^) Ãäå ( ^ ) - ðàçäåëèòåëü óêàçûâàþùèé íà öåëüíîñòü ñòðîêè. Ïåðâàÿ ñòðîêà íà÷èíàþùàÿñÿ ñ ýòîãî ñèìâîëà, îòìå÷àåò êîíåö áëîêà. && - Îòëè÷àåòñÿ òåì ÷òî áëîê çà ñèìâîëîì (^) ïîìåùàåòñÿ âî âðåìåííûé ôàéë êîòîðûé â ñâîþ î÷åðåäü èñïîëüçóåòñÿ êàê âõîä äëÿ êîìàíäû (.C.OBJ: BCC $<) Âûïîëíÿåò êîìïèëÿöèþ âñåõ .C ôàéëîâ êîòîðûå íîâåå ÷åì ñîîòâåòñòâóþùèå .obj ôàéëû.  òàáëèöå À14 ïðèâåäåíû çíà÷åíèÿ âñòðîåííûõ ìàêðîêîìàíä â êîñâåííûõ è ïðÿìûõ ïðàâèëàõ. (filename.exe: filename.c bcc $(MEM_MODEL) filename.c) $d !if, !else, !elif, !endif, !ifdef, !ifndef, !undef, !error !include $(macroB) $(macroD ) $(macroF) $(macroR) Äëÿ èñïîëüçîâàíèÿ çíà÷åíèÿ ìàêðîñà â êà÷åñòâå âõîäíîãî ïàðàìåòðà. Äëÿ âðåìåííîãî èçìåíåíèÿ ðàñøèðåíèÿ èñïîëüçóåòñÿ: $(macros:.c=.sav), åñëè îïðåäåëåí: macros=file.c $d(macro) Âîçâðàùàåò « 1 » åñëè ìàêðîêîìàíäà îïðåäåëåíà. Ïîäîáíà !ifdef. Âûïîëíÿþò òàêèåæå ôóíêöèè êàê è êîìàíäû ïðåïðîöåññîðà â êîìïèëÿòîðå ( !include «implicit.mak» ) Îïðåäåëÿåò çíà÷åíèå îäíîãî MAK - ôàéëà â äðóãîì. Âîçâðàùàåò òîëüêî îñíîâíîå èìÿ: $(<B)*.C Âîçâðàùàåò èìÿ óñòðîéñòâà è äèðåêòîðèþ $(<D)*.C Âîçâðàùàåò îñíîâíîå èìÿ è ðàñøèðåíèå $(<F)*.C Âîçâðàùàåò èìÿ óñòðîéñòâà, äèðåêòîðèþ è îñíîâíîå èìÿ $(<R)*.C (__) - Òåêñò èñïîëüçóåòñÿ âíóòðè MAK - ôàéëà Òàáëèöà À14 - Çíà÷åíèÿ âñòðîåííûõ ìàêðîêîìàíä â ïðÿìûõ è êîñâåííûõ ïðàâèëàõ Èìÿ Íàçíà÷åíèå â ïðÿìûõ ïðàâèëàõ $* Îñíîâíîå èìÿ ôàéëà çàâèñèìîñòè ñ ìàðøðóòîì $& Îñíîâíîå èìÿ ôàéëà çàâèñèìîñòè áåç ìàðøðóòà $. Ïîëíîå èìÿ ôàéëà çàâèñèìîñòè áåç ìàðøðóòà $** Ïîëíîå èìÿ ôàéëà çàâèñèìîñòè ñ ìàðøðóòîì $< Ïîëíîå èìÿ ôàéëà çàâèñèìîñòè ñ ìàðøðóòîì $? Ïîëíîå èìÿ ôàéëà çàâèñèìîñòè ñ ìàðøðóòîì â êîñâåííûõ ïðàâèëàõ $* Îñíîâíîå èìÿ ðåçóëüòèðóþùåãî ôàéëà ñ ìàðøðóòîì $& Îñíîâíîå èìÿ ðåçóëüòèðóþùåãî ôàéëà áåç ìàðøðóòà $. Ïîëíîå èìÿ ðåçóëüòèðóþùåãî ôàéëà áåç ìàðøðóòà $** Èìåíà âñåõ ôàéëîâ çàâèñèìîñòè $< Ïîëíîå èìÿ ðåçóëüòèðóþùåãî ôàéëà ñ ìàðøðóòîì $? Âñå îáíîâëåííûå ôàéëû çàâèñèìîñòè 2 Особенности С++ 2.1 Êðàòêîå îïèñàíèå íîâøåñòâ â Ñ++ C++ ïîääåðæèâàåò àíîíèìíûå îáúåäèíåíèÿ, òå èìåíà îáúÿâëåííûå â ýòîì îáúåäèíåíèè èñïîëüçóþòñÿ íåïîñðåäñòâåííî: union { int my_data; float this_data; }; my_data=3 2. Ïîçâîëÿåò çàäàâàòü âõîäíûå çíà÷åíèÿ äëÿ ôóíêöèé ïî óìîë÷àíèþ. Ýòè çíà÷åíèÿ âñòóïàþò â ñèëó â ñëó÷àå îòñóòñòâèÿ âõîäíîãî ïàðàìåòðà ó ôóíêöèè. Çíà÷åíèÿ ïî óìîë÷àíèþ ìîæíî ïðèìåíÿòü è â ïðîòîòèïå ôóíêöèè: void show_values(int one=1, int two=2, int three=3) { cout << one << ‘ ‘<<two<<’ ‘<<three<<’\n’; } 3. C++ ïîçâîëÿåò îáúÿâëÿòü ïåðåìåííûå ïî ìåñòó. Ïðè îáúÿâëåíèè ïåðåìåííîé ïðåäëîãàåìûì íèæå ñïîñîáîì îáëàñòü âèäèìîñòè ýòîé ïåðåìåííîé íà÷èíàåòñÿ ñ ìîìåíòà åå îáúÿâëåíèÿ è ïðîäîëæàåòñÿ äî êîíöà òåêóùåãî áëîêà: for (int count = 0; count < 10;count++) cout << count << ‘\n’; 4. Òåã ïåðå÷èñëèìîãî òèïà â C++ ìîæåò ïîçäíåå èñïîëüçîâàòüñÿ êàê èìÿ òèïà: enum Days {Monday,Tuesday, Wednesday, Thursday, Friday }; Days day; 5. Ïðèíöèï òðîéíèêà. Åñòü âîçìîæíîñòü îäíîâðåìåííîãî ïåðåíàçíà÷àåìîãî è íåïåðåíàçíà÷àåìîãî âûâîäà: while ((letter = cin.get()) != -1) { cout.put(letter); cerr.put(letter); } 6. Перегрузка функций (Полиморфизм).  ÿçûêå Ñ++ ðàçðåøàåòñÿ èìåòü ìíîæåñòâî ôóíêöèé ñ îäíèì è òåì æå èìåíåì íî ñ ðàçíûìè òèïàìè èëè êîëè÷åñòâîì âõîäíûõ ïàðàìåòðîâ: int sum(int *array, int element) { } float sum(float *array, int element) { } 27 7. Òåã ñòðóêòóðû â C++ ìîæåò ïîçäíåå èñïîëüçîâàòüñÿ êàê èìÿ ñòðóêòóðû.  Ñ++ âíóòðè ñòðóêòóðû ìîæíî ðàçìåùàòü çàäàííûå ôóíêöèè è èõ ðåàëèçàöèè.  ñòðóêòóðàõ òàêæå, ìîæíî èñïîëüçîâàòü private, public, protect ÷ëåíû: struct tag {int member_a{ cout << message;} ; int member_b(); char member_c[256]; }; tag variable_one, variable_two; variable_one.member_b(param); variable_two.member_a(); 8.  Ñ++ äîáàâëåí êëàññ - ðàñøèðåíèå ïîíÿòèÿ ñòðóêòóðû. Ïàìÿòü ïðè îïðåäåëåíèè êëàññà íå âûäåëÿåòñÿ. Êëàññ èìååò èìÿ (òåã) è ñîñòîèò èç ïîëåé, ïðåäñòîâëÿþùèõ åãî ÷ëåíû.  Ñ++ äîïóñêàåòñÿ èñïîëüçîâàíèå âëîæåííûõ êëàññîâ. Ìåòêà public îïðåäåëÿåò òå ÷ëåíû êëàññà, ê êîòîðûì ïðîãðàììà ìîæåò èìåòü ïðÿìîé äîñòóï. Ìåòêà private èñïîëüçóåòñÿ äëÿ ñîêðàòèÿ îïðåäåëåííûõ äåòàëåé êëàññà, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ òîëüêî èçíóòðè êëàññà. Âñå ÷ëåíû êëàññà ïî óìîë÷àíèþ ñ÷èòàþòñÿ ïðèâàòíûìè. Ôóíêöèè êëàññà ìîãóò îïðåäåëÿòñÿ êàê âíóòðè(óâåëè÷èâàåòñÿ îáúåì ïðîãðàììû è ñêîðîñòü âûïîëíåíèÿ) òàê è âíå(óìåíüøàåòñÿ îáúåì ïðîãðàììû è ñêîðîñòü âûïîëíåíèÿ) åãî òåëà. Ïðè ñîçäàíèè â ïðîãðàììå îáúåêòà ýêçåìïëÿðà, åãî ÷ëåíàì ïðèñâàèâàþòñÿ íåêîòîðûå íà÷àëüíûå çíà÷åíèÿ ýòó îïåðàöèþ âûïîëíÿåò ñïåöèàëüíàÿ ôóíêöèÿ - êîíñòðóêòîð èìÿ êîòîðîé ñîâïàäàåò ñ èìåíåì êëàññà. Ïðè çàêðûòèå êëàññà êîìïèëÿòîð âûïîëíÿåò ôóíêöèþ äåñòðóêòîð èìÿ êîòîðîé ñîâïàäàåò ñ èìåíåì êëàññà è ñ äîáàâëåíèåì âïåðåäè ñèìâîëà «~»: class book { public: char title[256]; char author[64]; book(char *title=«A», char *autor=«B», char *publisher= «C») { strcpy(book::title, title); strcpy(book::author, author); strcpy(book::publisher, publisher); }; ~book(void); char *get_price(*publisher) {*publisher }; char show_title(void); private: char publisher[256]; }; book diary; book::~book(void) {cout << «Уничтожение экземпляра << title << ‘\n’; }; void book::show_title(void) {cout << title << ‘\n’; }; book tips(«Jamsa’s 1001 C/C++», «Jamsa», «Jamsa Press»); b) äðóæåñòâåííûå êëàññû - friend óêàçûâàåò íà êëàññ êîòîðûé ìîæåò èñïîëüçîâàòü ÷ëåíû òåêóùåãî êëàññà. Åñòü âîçìîæíîñòü óçêîãî óêàçàíèÿ íà ÷ëåí êëàññà friend èìåþùåãî äîñòóï ê òåêóùåìó êëàññó. Êðîìå òîãî åñòü âîçìîæíîñòü ñîçäàâàòü âçàèìíûå friend - êëàññû: class book { public: char title[256]; char author[64]; friend class Reader::show_reader(void); private: char publisher[256]; }; class Reader { public: Reader (char *name) {strcpy(Reader::name, name); }; void show_reader(class book book) { cout<<«Читатель»<<name<<‘ ‘<< «Книга»<<book.title; }; class book tips[23]; private: char name[64]; }; ñ) íàñëåäîâàíèå ýëåìåíòîâ «áàçîâîãî» êëàññà â «ïðîèçâîäíîì» êëàññå.  Ñ++ äîïóñêàåòñÿ òàêæå ìíîæåñòâåííîå íàñëåäîâàíèå. Çàùèùåííûå (protected) ÷ëåíû áàçîâîãî êëàññà äîñòóïíû â îáúåêòàõ ïðîèçâîäíîãî êëàññà, êàê áóäòî îíè áûëè îáúÿâëåííû ïóáëè÷íûìè, îäíàêî, âíå ïðîèçâîäíûõ îáúåêòîâ çàùèùåííûå ÷ëåíû êëàññà ìîãóò áûòü äîñòóïíû òîëüêî ïîñðåäñòâîì èíòåðôåéñà ïóáëè÷íûõ ÷ëåíîâ. Åñëè ÷ëåí-äàííûå êëàññà îïðåäåëåíû êàê static òî ýòîò ÷ëåí êëàññà ñòàíîâèòñÿ åäèíñòâåííûì äëÿ âñåõ ýêçåìïëÿðîâ êëàññà, ò.å åñëè êàêîé-òî îäèí ýêçåìïëÿð èçìåíÿåò ýòè äàííûå, òî ýòî èçìåíåíèå ñòàíîâèòüñÿ íåïîñðåäñòâåííî âèäèìûì è äëÿ îñòàëüíûõ ýêçåìïëÿðîâ: class Cover { public: static int count; Cover(char *title) { strcpy(Cover::title, title) ;}; protected: char title[256]; }; class book { public: book (char *title) {srcpy(book::title, title); }; void show_title(void) {cout << title <<endl; }; protected: float cost; void show_cost(void) {cout<<cost<<endl; }; private: char title[64]; }; class LibraryCard : public Cover, public book { public: LibraryCard(char *title, char *author, char *publisher) : book(title) { strcpy(LibraryCard::author, author); strcpy(LibraryCard::publisher, publisher); cost = 39.95; }; private: char author[64]; char publisher[64]; }; d) Äëÿ ïðèñâàèâàíèÿ ïåðåìåííîé îäíîãî êëàññà ïåðåìåííîé äðóãîãî êëàññà ìîæíî â êëàññå èñïîëüçîâàòü îïåðàòîð: operator char *() â êîòîðîì îïèñûâàåòñÿ ïðîöåäóðà ïðåîáðàçîâàíèÿ îäíîé ïåðåìåííîé â äðóãóþ ÷òî ïîçâîëèò â äàëüíåéøåì óïðîñòèòü îáìåí: title=big_book. 9. ßçûê ïðîãðàììèðîâàíèÿ Ñ++ äîïóñêàåò «ïåðåãðóçêó» îïåðàòîðîâ, ò.å ïðèäàíèå ïðèâû÷íûì îïåðàòîðàì +, -, * è äð. íîâîãî ñìûñëà. «Ïåðåãðóçêà îïåðàòîðîâ äåéñòâóåò è äîïóñêàåòñÿ â ïðåäåëàõ êîíòåêñòà êëàññà ãäå îíà èìååò ìåñòî. Ñìûñë «ïåðåãðóçêè» â òîì, ÷òî ñîçäàåòñÿ ôóíêöèÿ, âûçûâàåìàÿ êàæäûé ðàç, êîãäà â êîíòåêñòå êëàññà óïîìèíàåòñÿ ïåðåîïðåäåëåííûé îïåðàòîð. Ñèíòàêñèñ îïðåäåëåíèÿ «ïåðåãðóçêè îïåðàòîðà òàêîâ: èìÿ_òèïà operator ñèìâîë_îïåðàöèè(ñïèñîê ïàðàìåòðîâ); ãäå: èìÿ_òèïà - çàäàåò òèï âîçâðàùàåìîãî çíà÷åíèÿ ïðè âûïîëíåíèè ôóíêöèè; ñèìâîë_îïåðàöèè - ñèìâîë ïåðåãðóæàåìîé îïåðàöèè; ñïèñîê_ïàðàìåòðîâ - îïðåäåëÿåò òèï ïåðåäàâàåìûõ ïàðàìåòðîâ ïðè êàæäîì âûçîâå ôóíêöèè, çàìåíÿþùåé îïåðàòîð. Например, для организации типа vector с проверкой выхода за диапазон, что позволит выполнять операцию копирования: v1[x] = v2[y]; // => v1.operator[](x)=v2.operator[](y); гле: vector v1(100); vector v2(nelem*2-4); Переопределение операторов “[ ]” производится следующим образом: class vector { int* v; int sz; public: vector(int); // конструктор ~vector(); // деструктор int size() { return sz; } void set_size(int); int& operator[](int); int& elem(int i) { return v[i]; } }; int& vector::operator[](int i) { if(i<0 !! sz<=i) error("vector index out of range"); // индекс выходит за границы вектора return v[i]; } 10. Обращение к объектам класса: className object; object.message1( ); // передача непосредственно объектам className *objectPointer = new className; objectPointer->message1( ); // через указатель на объект 11.  Ñ++ ïîääåðæèâàåòñÿ ïîçäíåå(äèíàìè÷åñêîå) ñâÿçûâàíèå ïîñðåäñòâîì ìåõàíèçìà âèðòóàëüíûõ ôóíêöèé. Äèíàìè÷åñêîå ñâÿçûâàíèå(îïðåäåëåíèå àäðåñîâ âûçûâàåìûõ â ïðîãðàììå ôóíêöèé) ïðîèñõîäèò âî âðåìÿ âûïîëíåíèÿ ïðîãðàììû.  ïðîãðàììàõ ìîãóò èñïîëüçîâàòüñÿ îáúåêòíûå ïåðåìåííûå, èëè îáúåêòíûå óêàçàòåëè, çíà÷åíèÿ êîòîðûõ - óêàçàòåëè íà îáúåêòûýêçåìïëÿðû òîãî èëè èíîãî êëàññà.  ÿçûêå Ñ++ ðàçðåøàåòñÿ èñïîëüçîâàòü îáúåêòíûé óêàçàòåëü áàçîâîãî êëàññà äëÿ óêàçàíèÿ îáúåêòà ïðîèçâîäíîãî êëàññà.  ÿçûêå Ñ++ ïîëèìîðôèçì îáåñïå÷èâàåòñÿ èñïîëüçîâàíèåì ìåõàíèçìà âèðòóàëüíûõ ôóíêöèé. Äëÿ îáðàùåíèÿ ê ÷ëåíàì áàçîâîãî è ïðîèçâîäíîãî êëàññà èìåþùèì îäèíàêîâûå èìåíà, èñïîëüçóåòñÿ îïðåäåëåíèå âèðòóàëüíîé ôóíêöèè - 28 virtual, ÷òî çàñòàâëÿåò îáðàùàòüñÿ ê ÷ëåíó ïîñëåäíåãî àêòèâèçèðîâàííîãî êëàññà. ×èñòàÿ âèðòóàëüíàÿ ôóíêöèÿ (àáñòðàêòíûé êëàññ) ÿâëÿåòñÿ àíàëîãîì ïðîòîòèïà, êîòîðûé îáúÿâëÿåòñÿ â áàçîâîì êëàññå à îïèñûâàåòñÿ â ïðîèçâîäíîì êëàññå: class Base{public: void base_mess(void) {cout<<«Base\n»; }; virtual void show_mess(void) { cout<<«Base»;}; virtual void show_reserve(void) = 0; }; class Der: public Base{public: void der_mess(void){ }; virtual void show_mess(void) { cout<<«Der»;}; virtual void show_reserve(void){ cout<<« »;}; }; void main(void) { Base *base_pointer = new Base; base_pointer->base_mess(); base_pointer->show_mess(); base_pointer = new Der; base_pointer->der_mess(); base_pointer->show_mess(); } 12. В С++ введено понятие ссылки. Ссылка выделяется символом “&”: int &x = y; Переменная “x” непосредственно привязывается к адресу переменной “y” т.е записанное выше выражение эквивалентно: int *x = &y; Но в случае с сылкой переменная “x” используется в операциях непосредственно: x = (23+45)/2; Изменение переменной “x” тянет за собой изменение переменной “y”. переменную, что исключает использование указателя. int a = 1001; int &a_alias = a; Óêàçûâàåò ÷òî ôóíêöèÿ äåñòðóêòîð ~ 2.4 Ñïåöèàëüíûå ôóíêöèè Èìÿ set_new_ handler str Íàçíà÷åíèå void (*set_new_handler(*cust_hand) () )) (); Ïðèñâàèâàåò àäðåñó ãëîáàëüíîé ïåðåìåííîé _new_handler àäðåñ ôóíêöèè <cust_hand> îáðàáîòêè îøèáîê îïåðàòîðà new. char *str(string, n); Ïðèûâÿçûâàåò ê ïîòîêó ââîäà-âûâîäà str ñòðîêó <string> äëèíîé <n>: ostrstream str(string, 256); str << «Jamsa’s» << ends; cout << string; 2.5 Êîíñòàíòû Èìÿ Íàçíà÷åíèå 2.2 Ñòàíäàðòíûå ïîòîêè ââîäà- âûâîäà Функция cout cerr cin clog endl flush Istream ifstream istrstrea m ostream ofstream ostrstrea m Прототип и краткое описание действий cout << «Ñîîáùåíèå» << modif << value; Âûäàåò <Ñîîáùåíèå> è êîíñòàíòó <value> â âèäå îïðåäåëåííîì <modif> (òàáëèöà Â1) íà ýêðàí ñ âîçìîæíîñòüþ ïåðåíàçíà÷åíèÿ.  îòëè÷èå îò ñout âûâîäèò ñîîáùåíèå áåç âîçìîæíîñòè ïåðåíàçíà÷åíèÿ. cin >> name; Ïðèñâàèâàåò <name> çíà÷åíèå èç ñòàíäàðòíîãî ïîòîêà.  îòëè÷èå îò cerr ýòîò ïîòîê îáåñïå÷èâàåò áóôåðåçèðîâàííûé âûâîä cout << «ñùùáùåíèå» << endl; Ïåðåâîäèò êóðñîð íà ñëåäóþùóþ ñòðîêó (\n). clog << «ñîîáùåíèå» << flush; Çàñòàâëÿåò ñîîáùåíèå âûâîäèòüñÿ ñ áóôåðà ìãíîâåííî. Ïðèìåíÿåòñÿ äëÿ ââîäà èç ïîòîêà cin. Ïðèìåíÿåòñÿ äëÿ ââîäà ôàéëà ñ äèñêà. Ïðèìåíÿåòñÿ äëÿ áóôåðèçèðîâàííîãî ââîäà èç ñòðîêè. Ïðèìåíÿåòñÿ äëÿ âûâîäà â cout, cerr è clog. Ïðèìåíÿåòñÿ äëÿ âûâîäà ôàéëà íà äèñê. Ïðèìåíÿåòñÿ äëÿ áóôåðèçèðîâàííîãî âûâîäà â ìàññèâ áàéòîâ. 2.3 Îïåðàòîðû Èìÿ :: & Íàçíà÷åíèå Îïåðàòîð ãëîáàëüíîãî ðàçðåøåíèÿ. Ìîæåò èñïîëüçîâàòüñÿ äëÿ âûäåëåíèÿ ïåðåìåííîé êàê ãëîáàëüíîé ïðè îòäåëåíèå îò îäíîèìåííîé ëîêàëüíîé ïåðåìåííîé: int x; f() { int x = 1; ::x = 2; // 2 присваивается глобальной переменной } Òàêæå èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ ôóíêöèé ñòðóêòóð è êëàññîâ âíå èõ òåëà: struct msg {char message[256]; void show_mess(char *message); }; void msg::show_mess(char *message) {cout << message; } Îïåðàòîð ññûëêè. Ïðåäíîçíà÷åí äëÿ ñîçäàíèÿ ññûëêè íà 2.6 Êëþ÷åâûå ñëîâà Èìÿ asm catñh class delete friend inline new operator private: protected Íàçíà÷åíèå asm {mov AX, 0x0200}; Êëþ÷åâîå ñëîâî _asm óêàçûâàåò, ÷òî îñòàëüíàÿ ÷àñòü óòâåðæäåíèÿ â ñòðîêå èëè â ôèãóðíûõ ñêîáêàõ ÿâëÿåòñÿ óòâåðæäåíèåì àññåìáëåðà.  Ñ++ óòâåðæäåíèÿ àññåìáëåðà ìîæíî âñòðàèâàòü â êëàññû (èíîãäà ôóíêöèåé êëàññà âíå êëàññà). Ïåðåõâàò èñêëþ÷èòåëüíîé ñèòóàöèè. Èñïîëüçóåòñÿ äëÿ îïåðåæàþùåãî îáúÿâëåíèÿ êëàññà. Ìîæåò ïðèìåíÿòüñÿ äëÿ îïåðåæàþùåãî óêàçàíèÿ íà íèæå îïèñàííûé äðóæåñòâåííûé êëàññ: friend class class_name; delete terget; Îñâîáîæäàåò äèíàìè÷åñêóþ ïàìÿòü âûäåëåííóþ ñ ïîìîùüþ: 1. target *r= new char[256]; delete r; 2. target *r= new char[256]; delete[256] r; Óêàçûâàåò íà êëàññ êîòîðûé ìîæåò èñïîëüçîâàòü ÷ëåíû òåêóùåãî êëàññà. Åñòü âîçìîæíîñòü óçêîãî óêàçàíèÿ íà ÷ëåí êëàññà friend èìåþùåãî äîñòóï ê òåêóùåìó êëàññó: friend class_name; friend Reader::show_reader(void); inline void swap_inline(int *a, int *b, int *c) { } Êëþ÷åâîå ñëîâî ïîçâîëÿåò çàìåíÿòü ìåõàíèçì âûçîâà ôóíêöèé âñòðàèâàíèåì êîäà ôóíêöèé íåïîñðåäñòâåííî â ìåñòà èõ âûçîâà char *array = new far char[256]; Èñïîëüçóåòñÿ äëÿ äèíàìè÷åñêîãî âûäåëåíèÿ ïàìÿòè (для размещения объекта типа в свободной памяти). Óêàçàòåëþ array ïðèñâàèâàåòñÿ àäðåñ âûäåëåííîé ïàìÿòè åñëè òàêîâàÿ ïðèñóòñòâóåò èíà÷å ïðèñâàèâàåòñÿ <0> или вызывается функция _new_handler(если определена) . Способы использования операции new: 1. float *r = new float; 2. float *r = new (float); 3. float *r = new float[20]; Èñïîëüçóåòñÿ äëÿ îïèñàíèÿ «ïåðåãðóæàåìîãî» îïåðàòîðà Ìåòêà private èñïîëüçóåòñÿ äëÿ ñîêðàòèÿ îïðåäåëåííûõ äåòàëåé êëàññà, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ òîëüêî èçíóòðè êëàññà Îáåñïå÷èâàåò ïðÿìîé äîñòóï ê ÷ëåíàì áàçîâîãî êëàññà èç ïîðîæäåííîãî êëàññà è çàïðåùàåò ïðÿìîé äîñòóï èç äðóãîãî ìåñòà ïðîãðàììû (public). 29 public: template this throw try virtual Ìåòêà public îïðåäåëÿåò òå ÷ëåíû êëàññà, ê êîòîðûì ïðîãðàììà ìîæåò èìåòü ïðÿìîé äîñòóï Èñïîëüçóåòñÿ äëÿ çàäàíèÿ øàáëîíà ôóíêöèè è êëàññàì. Ìîæåò èñïîëüçîâàòñÿ äëÿ çàìåíû íåñêîëüêèõ ôóíêöèé ñ îäèíàêîâûì «òåëîì» íî ðàçíûìè òèïàìè âõîäíûõ èëè âûõîäíîãî ïàðàìåòðîâ: template<class T> T compare_values(T a, T b) { return((a>b) ? a: b); } float compare_values(float a, float b); int compare_values(int a, int b); long compare_values(long a, long b); void main(void) {compare_values(3, 4); compare_values(2.34, 3.56); } Óêàçûâàåò íà îáúåêò-ýêçåìïëÿðà êëàññà (ñîäåðæèò àäðåññ ýòîãî îáúåêòà). Êîìïèëÿòîð ñàì, â çàâèñèìîñòè îò òåêóùåãî îáúåêòà (ìåòîä êîòîðîãî âûïîëíÿåòñÿ â äàííûé ìîìåíò), ïðèñâàèâàåò íóæíîå çíà÷åíèå óêàçàòåëþ this: cout << this->title << endl; Ðåàêöèÿ íà èñêëþ÷èòåëüíóþ ñèòóàöèþ. Îïåðàòîð áëîêà êîíòðîëÿ äëÿ ïðîâåðêè âîçìîæíîé èñêëþ÷èòåëüíîé ñèòóàöèè. Óêàçûâàåò íà òî ÷òî ÷ëåí êëàññà âèðòóàëåí ò.å, ïðè íàëè÷èå îäíîèìåííûõ ÷ëåíîâ â áàçîâîì èëè ïðîèçâîäíîì êëàññàõ, åñòü âîçìîæíîñòü îáðàùåíèÿ êîíêðåòíî ê íåìó. 2.7 Ãðàôè÷åñêàÿ áèáëèîòåêà BC++ Графические средства в языке Си++ и в его предшественнике - в языке Си полностью отсутствуют. Все возможности для работы с графикой конкретные реализации предоставляют в виде дополнительных библиотек графических функций. Здесь приводится список библиотечных функций, которые могут быть полезными при самостоятельном решении задач, связанных с графикой. Приводимой информации иногда оказывается недостаточно для безошибочного применения той или иной функции, но возможность получения справок при работе с компилятором в диалоговом режиме обычно позволяет быстро устранить возникающие затруднения. Для работы с графической библиотекой необходимо включить в программу заголовочный файл graphics .h. registerbgidriver registerbgifont restorecrtmode setgraphbufsize 2.7.2 Функции для установки параметров изображения Функция Прототип и краткое описание действий setactivepage void far setactivepage(int page); Устанавливает активной для вывода графики страницу <page> setallpalette setbkcolor Установка цвета точки(изображения) void setcursortype(int cur_t); Устанавливает тип (прототип со- отображения курсора для текстовых режимов держится в файле conio.h) Прототип и краткое описание действий setgraphmode void far closegraph(void); Перевод системы в текстовый режим (из графического режима) void far graphdefaults(void); Устанавливает по умолчанию все параметры графической системы (параметры заполнения, палитру, правила выравнивания текста и т.п.) void far _graphfreemem(void far *ptr, unsigned size); Введение этой функции в программу позволяет программисту отслеживать запросы на освобождение <size> байт памяти функциями графической библиотеки void far * far _graphgetmem (unsigned size); Введение этой функции в программу позволяет программисту отслеживать запросы на выделение <size> байт памяти функциями графической библиотеки void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver); Перевод системы в графический режим (из текстового режима), инициализация графики int far instcalluserdriver(char far *паше, int huge *detect)(void)); Добавляет новый графический драйвер <name> (.BGI) в таблицу драйверов BGI (BGI - Borland Graphics Interface) int far installuserfont(char far *name); Устанавливает шрифты, содержащиеся в файле <name> (.CHR) installuserdriver installuserfont void far setcolor(int color); setcursortype closegraph initgraph void far setbkcolor(int color); Установка цвета фона setcolor Функция _graphgetmem void far setaspectratio(int xasp, int yasp); Устанавливает коэффициент сжатия по координатам х и y setfillpattern _graphfreemem void far setallpalette(struct palettetype far *palette); Устанавливает все цвета палитры setaspectratio 2.7.1 Функции äля управления графической системой graphdefaults int registerbgidriver(void (*driver)(void)); Регистрирует драйвер <driver>, встроенный в текущую выполняемую программу int registerbgifont(void (*font)(void)); Регистрирует шрифт <font>, встроенный в текущую выполняемую программу void far restorecrtmode(void); Временный переход в текстовый режим, из которого была вызвана функция initgraph () unsigned far setgraphbufsize(unsigned bufsize); Устанавливает размер внутреннего буфера для графических функций void far selfillpattern(char far *upattern, int color); Установка заданного пользователем шаблона закраски экрана или области экрана void far setgraphmode(int mode); Переход к графическому режиму, отличному от установленного функцией initgraph () setfillstyle void far setfillstyle(int pattern, int color); Установка одного из стандартных шаблонов заполнения экрана или области экрана setlinestye void far setlinestyle(int linestyle, unsigned upattern, int thickness); Установка толщины и типа изображаемой линии setpalette void far setpalette(int colornum, int color); Устанавливает один из цветов палитры setrgbpalette void far setrgbpalette(int colornum, int red, int green, int blue) ; Устанавливает цвета для графического адаптера IBM 8514 settextjustify void far settextjustify(int horiz, int vert) ; Установка правил выравнивания текста при горизонтальном или вертикальном выводе функцией outtext () settextstyle void far settextstyle(int font, int direction, int charsize) ; Установка стиля (шрифт, размеры символов) текста, выводимого функцией outtext () setusercharsize void far setusercharsize(int multx, int divx, int multy, int divy); Установка размеров символов, выводимых в графическом режиме setviewport void far setviewport(int left, int top, int righ, int bottom, int clip); Установка размеров текущего окна экрана для вывода изображений или текста 30 setvisualpage setwritemode void far setvisualpage{int page); Делает видимой графическую страницу page void far setwritemode(int mode); Устанавливает режим вывода линий в графическом режиме 2.7.3 Функции для получения изображения на экране Функция arc Прототип и краткое описание действий void far arc(int x, int у, int stangle, int endangle, int radius); Вычерчивание дуги окружности с центром(x,у) bar void far bar(int left, int top, int right, int bottom); Вычерчивание закрашенного прямоугольника bar3d void far bar3d(int left, int top, int right, int bottom, int depth, int topflag); Вычерчивание закрашенного параллелепипеда circle void far circle(int x, int y, int radius); Вычерчивание окружности с центром (x,у) cleardevice void far cleardevice(void); Очистка экрана цветом фона clearviewport void far clearviewport(void); Очистка ранее установленного окна графического экрана drawpoly void far drawpoly(int numpoints, int far *polypoints); Вычерчивание контура многоугольника с <numpoints> вершинами ellipse void far ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius); Вычерчивание дуги эллипса с центром (x, у) fillellipse void far fillellipse(int x, int y, int xradius, int yradius); Вычерчивание эллипса с центром в точке (x,у) и заполнение его установленным ранее шаблоном закраски fillpoly void far fillpoly(int numpoints, int far *polypoints); Вычерчивание закрашенного многоугольника с <numpoints> вершинами и заполнение его установленным ранее шаблоном закраски floodfill void far floodfill(int x, int y, int border); Заполнение установленным ранее шаблоном закраски ограниченной области экрана, в которую попадает точка с координатами (x, у) line void far line(int x1,int y1,int x2,int y2); Вычерчивание линии от (x1, y1) до (x2, y2) linerel void far linerel(int dx, int dy); Вычерчивание линии из текущей точки в точку, отстоящую от нее на величину (dx,dy) lineto void far lineto(int х, int у); Проведение линии из текущей точки в точку с абсолютными координатами х, у moverel void far moverel(int dx, int dy); Перемещение указателя позиции из текущей точки в точку, отстоящую от нее на величину (dx, dy) moveto void far moveto(int х, int у); Перемещение указателя позиции из текущей точки в точку с абсолютными координатами х,у outtext void far outtext(char far *textstring); Вывод текстовой строки <textstring>, начиная с текущей позиции outtextxy void far outtextxy(int х, int у, char far *textstring); Вывод текстовой строки <textstring>, начиная с точки с координатами х,у pieslice void far pieslice(int х, int у, int stangle, int endangle, int radius); Вычерчивание закрашенного сектора круга с центром в точке (х, у) putimage void far putimage(int left, int top, void far *bitmap, int op); Вывод ранее сохраненного графического изображения в окно экрана с левым верхним углом (left, top) putpixel rectangle sector void far putpixel(int х, int y, int color); Вычерчивание точки по координатам х, у void far rectangle(int left, int top, int right, int bottom); Вычерчивание прямоугольника с заданными вершинами void far sector (int х, int у, int stangle, int endangle, int xradius, int yradius); Вычерчивание сектора эллипса с центром в точке (х,у) и заполнение его установленным ранее шаблоном закраски 2.7.4 Функции для получения параметров изображения Функция Прототип и краткое описание действий detectgraph void far detectgraph(int far *graphdriver, int far *graphmode); Функция возвращает тип вашего графического адаптера <graphdriver> и режим <graphmode> с разрешением, максимально возможным для данного адаптера void far getarccoords(struct arccoordstype far *arccoords); Возвращает в структуре <arccoords> значения координат дуги, построенной при последнем обращении к arc() void far getaspectratio(int far *xasp, int far *yasp); Возвращает коэффициент сжатия (yasp/xasp) по координатам х и у int far getbkcolor(void); Возвращает номер текущего цвета фона int far getcolor(void); Возвращает номер текущего цвета изображения struct palettetype *far getdefaultpalette(void); Возвращает указатель на структуру типа palettype, содержащую информацию о палитре (наборе цветов), устанавливаемой по умолчанию функцией initgraph() char *far getdrivername(void); Возвращает указатель на строку, содержащую название текущего графического драйвера void far getfillpattem(char far *pattern); Получение кодов, применяемых пользователем для задания шаблона заполнения экрана или его области void far getfillsettings(struct fillsettingstype far *fillinfo); Возвращает в структуре fillinfo значения параметров заполнения и цвета экрана int far getgraphmode(void); Возвращает номер графического режима void far getimage(int left, int top, int right, int bottom, void far *bitmap); Получение и сохранение в области памяти, на которую указывает bitmap, окна экрана, заданного координатами вершин void far getlinesettings(struct linesettingstype far *lineinfo); Возвращает в структуре <lineinfo> значения параметров линии int far getmaxcolor(void); Возвращает наибольший номер цвета, который возможно установить в текущем режиме графического драйвера с помощью функции setcolor () int far getmaxmode(void); Возвращает наибольший номер режима, который возможно установить для текущего графического драйвера char *far getmodename(int mode_number); Возвращает указатель на строку с названием графического режима <mode_number> getarccoords getaspectratio getbkcolor getcolor getdefaultpalette getdrivername getfillpattern getfillsettings getgraphmode getimage getlinesettings getmaxcolor getmaxmode getmodename 31 getmoderange getmaxx getmaxy getpalette getpalettesize getpixel gettext gettextinfo gettextsettings getviewsettings getx gety graphresult grapherrormsg imagesize puttext textheight textwidth void far getmoderange(int graphdriver, int far *lomode, int far *himode); Возвращает диапазон доступных графических режимов для графического драйвера <graphdriver> int far getmaxx(void); Возвращает целое значение, равное размеру экрана по горизонтали (максимальное значение x) int far getmaxy(void); Возвращает целое значение, равное размеру экрана по вертикали (максимальное значение у) void far getpalette(struct palettetype far *palette); Выдает указатель <palette> на структуру типа <palette>, содержащую информацию о текущей палитре (наборе цветов) int far getpalettesize(void); Возвращает количество цветов, доступных в текущем графическом режиме unsigned far getpixel(int x, int у); Возвращает цвет заданной (x, у) точки int gettext(int left, int top, int right, int bottom, void *buffer); Êîïèðóåò ñîäåðæèìîå òåêñòîâîãî ýêðàíà, îãðàíè÷åííîå ïàðàìåòðàìè ïðÿìîóãîëüíèêà ñ óãëàìè <left>, <top> è <right>, <bottom> â áóôåð <buffer>. void gettextinfo(struct text_info *data); Îïðåäåëÿåò òåêóùèå ïàðàìåòðû ýêðàíà è ïîìåùàåò èíôîðìàöèþ â áóôåð <data> ñòðóêòóðû òèïà text_info. void far gettextsettings(struct textsettingstype far *texttypeinfo); Возвращает в структуре <texttypeinfo> значения параметров текста void far getviewsettings (struct viewporttype far *viewport); Возвращает в структуре <viewport> значения параметров окна экрана int far getx(void); Возвращает целое значение координаты х текущей позиции на экране int far gety(void); Возвращает целое значение координаты у текущей позиции на экране int far graphresult(void); Возвращает номер ошибки графической операции (целое число от -15 до -1); значение 0 говорит об отсутствии ошибок char *far grapherrormsg(int errorcode); Возвращает указатель на строку, содержащую описание ошибки номер <errorcode> unsigned far imagesize(int left, int top, int right, int bottom); Возвращает объем буфера, нужного для сохранения графической информации в окне экрана с заданными вершинами int puttext((int left, int top, int right, int bottom, void *buffer); Âûâîä êîïèè ñîäåðæèìîãî ýêðàíà, âûïîëíåííîé ôóíêöèåé gettext, èç áóôåðà <buffer> íà ýêðàí â ðàìêó óñòàíîâëåííóþ ïàðàìåòðàìè ïðÿìîóãîëüíèêà:<top>, <left> è <right>, <bottom>. int far textheight(char far *textstring); Возвращает целое значение высоты в пикселах символов из строки <texfstring> int far textwidth(char far *textstring); Возвращает в пикселах целое значение ширины строки символов <textstring> 2.8 Êëàññû è êîìïîíåíòíûå ôóíêöèè. Áèáëèîòåêè ïîòîêîâîãî ââîäà-âûâîäà â C++ Çäåñü приведены краткие сведения о компонентных функциях и других средствах, использование которых позволяет реализовать обмен с потоками. Подробное изучение остальных средств потокового ввода-вывода потребует обращения к документации по конкретному компилятору. Класс буферизации данных в потоках filebuf для упрощения изложения не показан в иерархии классов. Он является базовым для всех классов ввода-вывода, и должен использоваться при создании на их основе новых собственных классов. Среди компонентных функций класса filebuf не показаны виртуальные функции. 2.8.1 Компонентные функции класса ios Функция Прототип и краткое описание действий bad int bad(); При ошибке возвращает ненулевое значение. bitalloc static long bitalloc(); Возвращает установку флагов. Полученное значение может быть использовано для очистки, установки или проверки флагов. clear void clear(int = 0); Устанавливает состояние потока в нуль. eof int eof(); Возвращает ненулевое значение, если имеет место условие конца файла (EOF): cin.eof() fail int fail(); Возвращает ненулевое значение, если операция обмена с потоком терпит неудачу. fill char fill(); Возвращает текущее значение символа заполнения потока. char fill(char); Заменяет значением параметра символ заполнения потока; возвращает ранее установленное значение символа заполнения: cout.fill(‘.’); flags long flags(); Возвращает текущее значение флагов форматирования. long flags(long); Устанавливает флаги форматирования по значению параметра; возвращает ранее установленное значение флагов. good int good(); Возвращает ненулевое значение, если не установлен ни один флаг состояния (ошибок нет). init void init(streambuf *); Ñâÿçûâàåò ios ñ îïðåäåëåííûì <streambuf>. precision int precision(); Возвращает текущее значение точности вещественных чисел. int precision(int); Устанавливает точность вещественных чисел по значению параметра; возвращает предыдущее значение. rdbuf streambuf* rdbuf(); Возвращает указатель на буфер (объект класса <bufstream>), связанный с потоком. rdstate int rdstate(); Возвращает текущее состояние потока. setf long setf(long); Устанавливает флаги по значению параметра; возвращает предыдущие значения флагов long setf(long setbits, long field); Сбрасывает те биты состояния, которые отмечены в <field>, затем устанавливает биты по значению <setbits>. setstate void setstate(int); Óñòàíàâëèâàåò îïðåäåëåííûå áèòû ñîñòîÿíèÿ. 32 sync_wit ios::sync_with_stdio(); h_stdio Ñèíõðîíèçèðóåò îïåðàöèè ââîäà-âûâîäà ìåæäó ñïîñîáàìè iostream è stdio. Íàñòðàèâàåò îáà ñïîñîáà íà èñïîëüçîâàíèå îäíîãî è òîãî æå áóôåðà äëÿ ââîäà è áóôåðà äëÿ âûâîäà. tie ostream* tie(); Возвращает указатель на взаимосвязанный (lied) поток. ostream* tie(ostream*); Организует поток, взаимосвязанный с потоком, на который указывает <ostream*>; возвращает указатель на взаимосвязанный предыдущий поток, если такой есть. unself long unself(long); Очищает биты состояния потока, отмеченные переданным параметром; возвращает предыдущее значение битов. width int width(); Возвращает текущее значение ширины. int width(int); Устанавливает ширину, равной значению переданного параметра; возвращает предыдущее значение: cout.width(n); xalloc static int xalloc(); Âîçâðàùàåò èíäåêñ ìàññèâà ðàíåå íåèñïîëüçóåìûõ ñëîâ, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ êàê îïðåäåëÿåìûå ïîëüçîâàòåëåì ôëàæêè ôîðìàòèðîâàíèÿ. seekg tellg 2.8.3 Компонентные функции класса ostream, ostrstream Функция Прототип и краткое описание действий flush ostream& flush(); Флэширует внутренний буфер выходного потока. cout.put(character); ostream& put(char); Помещает заданный параметром char символ в выходной поток. ostream& seekp(long beg); Устанавливает указатель записи выходного потока на абсолютную позицию, заданную параметром <beg>. ostream& seekp(long beg, seek_dir); Перемещает указатель текущей позиции выходного потока на число байтов <beg> îò точкè отсчета <seek_dir> (0 - начало; 1 - текущая позиция; 2 - конец потока). long tellp(); Возвращает текущую позицию указателя записи äëÿ выходного потока. oatream& write(const signed char *string, int n); ostream& write(const unsigned char *string, int n); Помещает в выходной поток <n> символов из массива, на который указывает <string>. Нульсимволы включаются в число переносимых символов: output.write(buffer, n_bytes); long ulimit(int cmd, [long newlimit]); Позволяет управлять ограничениями, наложенными на процесс. Значения поля cmd: UL_SETFSIZE – максимальный размер файла. put seekp 2.8.2 Компонентные функции класса istream Функция Прототип и краткое описание действий gcount get getline ignore peek putback read int gcount(); Возвращает число символов, извлеченных из потока последним обращением из прикладной программы. character = cin.get(); int get(); Передает из входного потока в прикладную программу следующий символ или EOF. int get(signed char *,int ten,char = '\n'); int get(unsigned char *,int ten,char = '\n'); Извлекает из входного потока символы и помещает их в буфер, на начало которого указывает <char*>. Передача символов завершается, если прочитано (len - 1) байтов, или встретился символ-разделитель (третий параметр в функции), или достигнут конец файла EOF. Завершающий нуль-символ всегда помещается в буфер, обозначая конец принятой строки, разделитель (последний параметр) не переносится в строку. int get(unsigned chart); int get(signed chart); Извлекает из входного потока символ и помещает его в байт, на который указывает параметр chart. int get(streambuff,char = '\n'); Извлекает символы из входного потока и помещает их в буфер потока, на который ссылается <streambuf>. Чтение символов прекращается, если в потоке встретился символ-разделитель (второй параметр). istream& getline(signed char ,int sizeof(char), '\n'); Совпадает с get() с тремя параметрами, но символразделитель также помещается в принятую строку символов: cin.getline(string, sizeof(string), ‘\n’); istream& ignore(int n = 1,int delim = EOF); Пропускает до n символов входного потока; останавливается, если встретился разделитель (второй параметр), по умолчанию равный EOF. int peek(); Извлекает следующий символ из входного потока. istream& putback(char); Помещает символ назад во входной поток. istream& read(signed char *string, int n); istream& read(unsigned char *string, int n); Извлекает из входного потока ãðóïïó символов <n> и помещает их в массив <string>: input.read(buffer, n_bytes); istream& seekg(long beg); Устанавливает указатель чтения входного потока на абсолютную позицию, заданную параметром <beg>. istream& seekg(long beg, seek_dir); Перемещает указатель чтения входного потока на число байтов, заданное <beg> îò точку отсчета <seek_dir> (0 - начало потока; 1 - текущая позиция потока; 2 - конец потока). long tellg(); Возвращает текущую позицию указателя чтения входного потока. tellp write ulimit *NIX Òàáëèöà Â1 - Флаги класса ios, управляющие форматированием ввода/вывода Константа skipws Значение left 0х0002 right 0х0004 internal 0х0008 dec oct hex 0х0010 0х0020 0х0040 showbase showpoint 0х0080 0х0100 uppercase 0х0200 showpos 0х0400 scientific 0х0800 0х0001 Назначение Игнорировать пробельные символы при вводе. "Прижимать" значение к левой стороне поля. "Прижимать" значение к правой стороне поля. Поместить разделительные символы после знака или основания системы счисления (ОСС). Десятичная система счисления (ОСС=10). Восьмеричная система счисления (ОСС= 8). Шестнадцатеричная система счисления (ОСС = 16) Указывать ОСС при выводе. Печатать десятичную точку и следующие за ней нули при выводе вещественных чисел. Шестнадцатеричные цифры печатать на верхнем регистре. Добавлять ' + ' при выводе положительных чисел. Использовать формат 1.2345Е2 для вывода вещественных чисел (экспоненциальная или научная нотация). 33 fixed 0х1000 unitbuf stdio 0х2000 0х4000 Использовать формат 123.45 для вывода вещественных чисел (с фиксированной точкой). Флэшировать потоки после операции «. Флэшировать stdout, sfcderr после операции . fd int fd(); Возвращает дескриптор открытого файла, связанного с заданным объектом класса filebuf, либо EOF. int is_open(); Возвращает не равное нулю целое число, если с заданным объектом связан открытый файл. virtual int overflow(int = EOF); Çàïîëíåíèå áóôåðà àäðåñàòà. virtual streampos seekoff(streamoff, seek_dir, int n); Ïåðåìåùàåò óêàçàòåëü ôàéëà <streamoff> íà <n> áàéò îòíîñèòåëüíî <seek_dir> (0 - начало; 1 - текущая позиция; 2 - конец потока). virtual streambuf* setbuf(char*, int); Îïðåäåëÿåò áóôåð îïðåäåëåííûé filebuf. virtual int sync() Óñòàíàâëèâàåò ëîãè÷åñêóþ ñâÿçü ìåæäó âíóòðåííèìè ñòðóêòóðàìè äàííûõ è âíåøíèì ïðåäñòàâëåíèåì ïîòîêà. virtual int underflow() Âûçûâàåòñÿ êîãäà íåìíîãî äàííûõ ïðèñóòñòâóåò âî âõîäíîì áóôåðå. is_open overflow Òàáëèöà Â2 - Константы класса ios для "очистки" флагов форматирования Константа "Сбрасываемые " флаги Действие basefield ios::hex,ios::oct, ios::dec ios::fixed, ios::scientific ios::left,ios::right, ios::internal На основание системы счисления floatfield adjustifield На представление вещественных чисел. setbuf На выравнивание значений в поле вывода. sync 2.8.4 Функции-манипуляторы Манипу- Краткое описание действий лятор dec Устанавливает десятичное основание системы счисления. hex Устанавливает шестнадцатеричное основание системы счисления. oct Устанавливает восьмеричное основание системы счисления, ws При вводе позволяет извлекать из входного потока обобщенные пробельные символы. endl При выводе помещает в поток символ новой строки и флэширует буфер потока. ends При выводе помещает в поток символ конца строки '\0' flush Флэширует буфер потока ostream. 2.8.5 Параметризованные функцииманипуляторы - файл xomanxp. H Название seekoff underflow 2.8.7 Компонентные функции классов ifstream, ofstream, fstream Функция Прототип и краткое описание действий close open rdbuf Краткое описание действий cout << setbase(i) << 255 << ‘\n’; Устанавливает <i> основание системы счисления (0 - при выводе - десятичное; при вводе - внутреннее представление вводимых цифр соответствует правилам ANSI для языка Си; 8 - восьмеричное; 10 - десятичное; 16 - шестнадцатеричное). resetiosflags(long cout << resetiosflags(ios::right) << i; ) Очищает форматные флаги, используя значение параметра. setiosflags(long) cout << setiosflags(ios::right) << i; Устанавливает форматные флаги, используя значение параметра (òàáëèöà Â2). setfill(int) Устанавливает символ-заполнитель. setprecision(int) cout << setprecesion(i) << value <<’\n’; Устанавливает по значению параметра <i> точность представления вещественных чисел. setw(int) cout << setw(5)<<1<<’\n’<<setw(6)<<2; Устанавливает по значению параметра ширину поля ввода или вывода îòäåëüíî äëÿ êàæäîãî ïàðàìåòðà. filebuf *close(); Çûàêðûòèå ôàéëîâîãî ïîòîêà: ifstream input; input.close(); void open(const char* «file», int mode, int = filebuf::openprot); Открывает файл <file> ñ режимîì использования файла <mode> (òàáëèöà Â3) è защитîé файла: ifstream input; input.open(«FILENAME.EXT», ios::in); filebuf* rdbuf(); Возвращает указатель на буфер, связанный с потоком. setbase(int = 0) 2.8.6 Компонентные функции класса filebuf Функция Прототип и краткое описание действий attach filebuf* attach(int fd); Связывает с объектом класса filebuf файл с дескриптором <fd>. Если файл уже открыт, возвращает NULL. Òàáëèöà Â3 - Режимы файла, устанавливаемые параметром mode в функции open () Обозначение Значение Краткое описание действия ios::in 0х01 ios::out 0х02 ios::ate 0х04 ios::app ios::trunc 0х08 0х10 ios::nocreate 0х20 ios::noreplac 0х40 e ios::binary 0х80 Открыть только для чтения (режим по умолчанию устанавливается для потоков класса ifstream). Открыть только для записи (режим по умолчанию устанавливается для потоков класса oifstream). Открыть для записи в конец файла. Если файл не существует - создать его. Открыть в режиме дополнения. Открыть, уничтожив содержимое файла (устанавливается по умолчанию, если установлен режим out, либо один из режимов ate или арр). Открыть только существующий файл, если файла не существует - установить состояние ошибки. Создать и открыть только не существующий файл. Если файл существует - установить состояние ошибки. Открыть для двоичного обмена. 2.9 Áèáëèîòå÷íûå êëàññû è èõ êîìïîíåíòíûå ôåíêöèè 34 Среди дополнительных средств, не входящих собственно â язык С++, но отмечаемых в проектах стандарта и входящих в конкретные реализации, важное место занимают классы. Здесь можно отметить библиотеку классов потокового ввода-вывода, библиотеку контейнерных классов, а также некоторое количество специализированных классов. Контейнерные классы позволяют программисту с минимальными затратами создавать динамические массивы, списки, деревья, очереди, стеки, включающие элементы разных типов. В настоящее время контейнерные классы входят в наиболее передовые реализации компиляторов, но не стандартизованы. Çа подробностями следует обращаться к технической документации по конкретным компиляторам и библиотекам классов. В стандартные библиотеки компиляторов входят и менее объемные, но не менее полезные для частных применений классы. Остановимся на двух их них: Класс complex становится доступным в программе после подключения заголовочного файла complex. h. В этом файле содержатся как определения класса complex, так и все операциифункции, необходимые для работы с его объектами, т.е. с комплексными числами, а именно: • все арифметические операции (+, * и т.д.); • операции присваивания (=, += и т.д.); • потоковые операции записи « и чтения »; • обычные математические функции, которые вызываются только â том случае, если фактический параметр имеет тип complex. В классе complex имеются две формы конструктора объектов: complex complex() ; complex complex(double real, double xmag = 0) ; log ANSI где complex - структура, описанная в файле math.h следующим образом: struct complex { double x, у }; x и у - соответственно вещественная и мнимая части комплексного числа. При использовании первого конструктора создается комплексное число с нулевыми вещественной и мнимой частями (х==о, у==о). Во второй форме можно задавать либо вещественную и мнимую части одновременно, либо только одну вещественную часть комплексного числа. Примеры: tan ANSI tanh ANSI complex z1(); // х==0, у==0 complex z2(5.0); // х==5.0, у==0 complex z3(5.0,-1.0); // х==5.0, у==-1.0 2.9.1 Компонентные и дружественные функции класса complex Функция Прототип и краткое описание действий abs ANSI acos ANSI arg asin ANSI atan ANSI conj cos ANSI cosh ANSI div ANSI exp ANSI imag double abs(complex x); Возвращает модуль комплексного числа <z> complex acos(complex z); Возвращает значение арккосинуса комплексного числа <z> double arg(complex z); Возвращает главное значение аргумента комплексного числа <z> (-ï < arg z < ï) complex asin(complex z); Возвращает значение арксинуса комплексного числа <z> complex atan(complex x); Возвращает значение арктангенса комплексного числа <z> double соnj(complex z); Возвращает комплексносопряженное к комплексному числу <z> complex cos(complex z); Возвращает значение косинуса комплексного числа <z> complex cosh(complex z); Возвращает значение гиперболического косинуса комплексного числа <z> div_t div(int number, int denom); Делит number на denom. complex exp(complex z); Возвращает значение функции еz комплексного числа <z> double imag(complex z); Возвращает мнимую часть комплексного числа <z> log10 ANSI norm polar pow ANSI real sin ANSI sinh ANSI sqrt ANSI complex log(complex z); Возвращает значение натурального логарифма комплексного числа <z> complex log10(complex z); Возвращает значение десятичного логарифма комплексного числа <z> double norm(complex z); Возвращает квадрат модуля комплексного числа <z> complex polar(double mag, double angle); Возвращает комплексное число, имеющее модуль <mag> и значение аргумента <angle> complex pow(complex x, complex у); Возвращает значение хy комплексных чисел х и у double real(complex z); Возвращает вещественную часть комплексного числа <z> complex sin(complex z); Возвращает значение синуса комплексного числа <z> complex sinh (complex z); Возвращает значение гиперболического синуса комплексного числа <z> complex sqrt(complex z); Возвращает одно из значений квадратного корня из комплексноãî числа <z> по формуле: complex tan(complex z); Возвращает значение тангенса комплексного числа <z> complex tanh(complex z); Возвращает значение гиперболического тангенса комплексного числа <z> Другой полезный класс - string ( описывается в заголовочном файле cstring.h ). В компиляторе ВС++ 4.5 этот класс содержит 11 форм конструкторов объектов: string(); Конструктор по умолчанию. Создает строку нулевой длины. string(const strings s); Создает строку, совпадающую с полученной по ссылке s. string(const string& s, size_t start, size_t n = NPOS); Создает строку, содержащую <n> байт начиная с позиции <start> исходной строки <s>. string(const char *cp); Копирует строку, адресуемую указателем <ср> (до первого нулевого символа). string(const char *cp, size_t start, size_t n = NPOS); Создает строку, содержащую <n> байт, начиная с позиции <start> исходной строки <ср>. string([un]signed char с); Создает строку, состоящую из одного символа <с>. string([un]signed char с, size_t n = NPOS); Создает строку, состоящую из <n> символов <с>. string(const TSubString _FAR &ss); Создает строку из подстроки <ss>. string(HINSTAMCE instance, UINT id, int len = 255); Создает строку в программах для Windows из ресурса. Класс string замечателен тем, что в нем реализована технология, называемая "копировать при записи" ("copy-on-write"). Это означает, что при создании новых объектов класса string копируется не сама порождающая строка, а лишь указатель на нее. При дальнейших чтениях информации из этого объекта на самом деле выполняются операции не с новой, а с порождающей строкой. Реальное же выделение памяти для объекта и копирование содержимого исходной строки происходит только в том случае, если в строку нового объекта вносятся изменения. 2.9.2 Компонентные и дружественные функции класса string Функция Прототип и краткое описание действий 35 ansi_to_ void ansi_to_oem(); оеm Конвертирует строку из кодировки ANSI (Windows) в кодировку OEM (MS-DOS) (доступна только при компиляции программ для Windows, в т.ч. в режиме EasyWin) append string& append(const string& s); string& append(const string& s, sizet start, sizet n = NPOS); string& append(const char *cp, size t start, sizet n = NPOS); Добавляет к исходной строке соответственно строку <s> или не более <n> символов (начиная с символа <start>) строки <s> (ср) Все три формы возвращают ссылку на результат assign string& assign(const string& s); string& assign(const string& s, sizet start, sizet n = NPOS); Меняет содержимое исходной строки на соответственно строку <s> или <n> символов (начиная с символа start) из строки <s> compare int compare(const string& s) int compare(const string& s, sizet orig, size t n = NPOS) Сравнивает исходную строку соответственно со строкой <s> или <n> символами строки <s>. Возвращает целое число, меньшее, большее или равное нулю в зависимости от результата сравнения строк contains int contains(const char *pat) const; int contains(const string& s) const; Возвращает 1, если подстрока pat(s) найдена в исходной строке; в противном случае возвращает 0 copy size_t copy(char *cb, size_t n = NPOS); sizet copy(char *cb, size_t n, size_t pos); Копирует не более <n> символов (начиная с <pos>) исходной строки в строку <сb>. Возвращает число скопированных символов string copy() const throw(xalloc); Возвращает копию исходной строки c_str const char *c_str() const; Возвращает указатель (адрес) на исходную строку (или ее копию) find size_t find(const string& s); size_t find(const string& s, sizet pos) ; Возвращает позицию первого вхождения -подстроки s в исходную строку (начиная с позиции pos исходной строки) size_t find(const Tregexp& pat, size_t i = 0) ; size_t find(const Tregexp& pat, size_t *ext, size_t i = 0) const; Возвращает позицию первого вхождения регулярного выражения <pat> в исходную строку Если подстрока не найдена - возвращается NPOS find_first size_t find_first_of(const string& s) const; size_t _of find_first_of(const string& s, size_t pos) const; Возвращает первую позицию исходной строки (начиная с позиции pos), в которой встретился некоторый символ строки <s>. В случае неуспеха возвращается NPOS find_first size_t find_first_not_of(const string& s) const; size_t _not_of find_first_not_of(const string& s, size_t pos) const; Возвращает первую позицию исходной строки (начиная с позиции pos), содержащую символ, отсутствующий в строке <s>. В случае неуспеха возвращается NPOS find_last size_t find_last_of(const string& s) const; _of size_t find_last_of(const string& s, size_t pos) const ; Аналогична find_first_of, но возвращается последняя позиция find_last size_t find_last_not_of(const string& s) const; size_t _not_of find_last_not_of(const string& s, size_t pos) const; Аналогична find_first_not_of, но возвращается последняя позиция get_at char get_at(size_t pos) const throw(outofrange); Возвращает символ исходной строки в позиции <pos>. Если pos > length () -1, порождается исключение outofrange get_case static int get_case_sensitive_flag(); _sensitiv Возвращает 1, если при сравнении строк различаются e_flag прописные и строчные буквы, 0 - если нет get_initia static unsigned get_initial_capacity(); Возвращает l_capacit количество байт памяти, отведенных под исходную y строку (< length () -1) get_max static unsigned get_max_waste(); _waste Возвращает максимальное число байт, которое может быть выделено для строки get_para static int get_paranoid_check() ; noid_che Возвращает 1, если возможна проверка коллизий ck êеширования; иначе возвращает 0. get_resiz static unsigned get_resize_increment(); Возвращает e_increm приращение, изменяющее размер строки. ent get_skip static int get_skipwhitespace_flag(); whitespa Возвращает 1, если игнорируются обоáщенные проce_flag бельные символы; иначе возвращает 0. hash unsigned hash() const; Возвращает значение êеширования initial_ca static size_t initial_capacity(size_t ic = 63) ; pacity Устанавливает минимальное количество байт, выделяемых для строки по умолчанию insert string& insert(size_t pos, const string& s); string& insert(size_t pos, const string& s, size_t start, size_t n = NPOS); С позиции <pos> в исходную строку вставляется содержимое строки <s> (не более <n> символов строки <s>, начиная с позиции <start>). Возвращает ссылку на результат is_null int is_null() const; Возвращается 1, если исходная строка пуста, и 0 - в противном случае length unsigned length() const; Возвращает число символов в исходной строке MaxWas static size_t MaxWaste (size_t mw = 63); Установить te максимальное число байт, выделяемых для строки oem_to_ void oem_to_ansi(); ansi Конвертирует строку из кодировки OEM (MS-DOS) в кодировку ANSI (Windows) (доступна только при компиляции программ для Windows, в т.ч. в режиме EasyWin) prepend string& prepend(const string& s ); string& prepend(const string& s, size_t start, size_t n = NPOS); string& prepend(const char *cp ); string& prepend(const char *cp, size_t start, size_t n = NРOS) ; Вставляет в начало исходной строки строку <s> (ср) (<n> символов строки <s> (ср), начиная с позиции <start>) put_at void put_at(size_t pos, char c) throw(outofrange); Заменяет символ в позиции <pos> исходной строки символом <с>. Если pos > length 0-1, порождается исключение outofrange read_file istream& read_file(istreamS is); Считать строку из входного потока <is> (до символа EOF или NULL) read_line istream& read line(istreamS is); Считать строку из входного потока is (до символа переводà строки или EOF) read_stri istream& read_string(istream& is); Считать строку из ng входного потока <is> (до символа EOF или NULL) read_to_ istream& read_to_delim(istreamS is, char delim = '\n'); delim Считûâать строку из входного потока <is> до тех пор, пока не будет встречен символ <delim> или EOF (символ-разделитель delim из потока удаляется) read_tok istream& read_token(istream& is); en Считать строку из входного потока <is> до обобщенного пробела (ведущие пробелы не учитываются) rfind size_t rfind(const string& s) ; size_t rfind(const string& s, size_t pos); Аналог функции find, но возвращает позицию последнего вхождения подстроки <s> remove string& remove(size_t pos); string& remove(size t pos, size_t n = NPOS); Удаляет все символы (не более <n> символов), начиная с позиции <pos> исходной строки и до ее конца. Возвращает ссылку на строку-результат 36 replace reserve resize resize_in cr ement set_case_ sensitive set_para noid_che ck skip_whi tespace strip substr substring to_lower to_upper string& replace(size_t pos, size_t n = NPOS, const string& s); string& replace(size_t pos, size_t n1, const string& s, size_t start, size_t n2); Удаляет из исходной строки не более n (n1) символов и помещает на их место строку <s> (не более n2 символов из строки <s>, начиная с позиции <start>) size_t reserve() const; Возвращает размер отведенной памяти для размещения строки void reserve(size_t ic); Сообщает системе, что строка может занимать áолее ic байт памяти void resize(size_t m); Изменяет размер строки на <m> символов, отбрасывая лишние либо заполняя пробелами добавленные static size_t resize_increment(size_t ri = 64); Изменяет приращение, используемое для автоматического изменения размера строки static int set_case_sensitive(int tf = 1) ; Установка различия прописных и строчных букв: 1 - различать, 0 не различать. Возвращает предыдущую установку static int set_paranoid_check(int ck = 1) ; Для поиска строк используется механизм хеширования, так как возможно, что одно и то же хешированное значение получается при обработке различных строк. Вызов функции с параметром ck = 1 устанавливает заключительную проверку строк с помощью функции strcmp (). Если ck = 0, такая проверка не выполняется static int skip_whitespace(int sk = 1); Устанавливается в 1, чтобы игнорировать пробелы после считывания каждой лексемы, иначе устанавливается в 0 TSubString strip(StripType s = Trailing, char с =‘ ‘); В зависимости от параметра <s> удаляет символы <с> в начале, в конце либо с обеих сторон исходной строки string substr(size_t pos) const; string substr(size_t pos, size_t n = NPOS) const; Создает строку, содержащую копию (не более <n> символов), начиная с позиции <pos>, и до конца строки TSubString substring(const char *cp); const TSubString substring(const char *cp) const; TSubString substring(const char *cp, size_t start); TSubString substring(const char *cp, size_t start); Создает объект класса TSubString, включающий копию символов, адресуемых указателем ср (начиная с символа start) void to_lower(); Переводит все символы исходной строки на нижний регистр void to_upper(); Переводит все символы исходной строки на верхний регистр TButton TCheckBox TRadioButto n TListBox TComboBox TScrollbar TGroupBox TPanel TScrollBox TBitBtn TSpeedButto n MaskEdit StringGrid TDrawGrid TImage TShape TBevel TScrollBox CheckListBo x Splitter StaticText (до 32Кб). Позволяет выполнять какие-либо действия при нажатии кнопки во время выполнения программы. Отображает строку текста с маленьким окошком рядом. В окошке можно поставить отметку, которая означает, что что-то выбрано. Позволяет выбрать только одну опцию из нескольких. Преднозначен для показа прокручиваемого списка. Напоминает ListBox, за исключением того, что позволяет водить информацию в маленьком поле ввода сверху ListBox. Полоса прокрутки, появляется автоматически в объектах редактирования, ListBox’ах. Используется для визуального объединения компонентов в группы. Управляющий элемент, похожий на TGroupBox, используется в декоративных целях. Создает место на форме, которое можно скроллировать в вертикальном и горизонтальном направлениях. Дополнительные Кнопка с возможностью помещения на нее картинки (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид. Кнопка для создания панели быстрого доступа к командам (SpeedBar). Обычно на данную кнопку помещается только картинка (glyph). Аналог TEdit, но с возможностью форматированного ввода. Формат определяется в свойстве EditMask. В редакторе свойств для EditMask есть заготовки некоторых форматов: даты, валюты и т.п. Спец. символы для маски можно посмотреть в Справочнике. Служит для представления текстовых данных в виде таблицы. Доступ к каждому элементу таблицы происходит через свойство Cell. Служит для представления данных любого типа в виде таблицы. Доступ к каждому элементу таблицы происходит через свойство CellRect. Отображает графическое изображение на форме. Воспринимает форматы BMP, ICO, WMF. Если картинку подключить во время дизайна программы, то она прикомпилируется к EXE файлу. Служит для отображения простейших графических объектов на форме: окружность, квадрат и т.п. Элемент для рельефного оформления интерфейса. Позволяет создать на форме прокручиваемую область с размерами большими, нежели экран. На этой области можно разместить свои объекты. Позволяет помещять на форму статичный текст. Chart 2 Borland C++ Builder TTabSet 3.1 Объекты визуальной библиотеки компонентов Имя TmainMenu TPopupMen u TLabel TEdit TMemo Функция Стандартные Позволяет помещать главное меню в программу. Позволяет создавать всплывающие меню. Это меню появляется по щелчку правой кнопки мыши. Служит для отображения текста на экране. Стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы. Используется для работы с большими текстами TNoteBook TtabbedNote book TOutline THeader Win3.1 Горизонтальные закладки. Обычно используется вместе с TNoteBook для создания многостраничных окон. Название страниц можно задать в свойстве Tabs. Но проще это сделать в программе при создании формы (OnCreate) : TabSet1.Tabs := Notebook1.Pages; А для того, чтобы при выборе закладки страницы перелистывались нужно в обработчике события OnClick для TtabSet написать: Notebook1.PageIndex := TabSet1.TabIndex; Используется для создания многостраничного диалога, на каждой странице располагается свой набор объектов. Используется совместно с TTabSet. Многостраничный диалог со встроенными закладками, в данном случае - закладки сверху. Используется для представления иерархических отношений связанных данных. Например - дерево директорий. Элемент оформления для создания заголовков с 37 TFileListBox TdirectoryLi stBox TdirectoryLi stBox TfilterCombo Box OpenDialog SaveDialog FontDialog ColorDialog PrintDialog PrinterSetup Dialog FindDialog ReplaceDialo g OpenPicture Dialog SavePicture Dialog TTimer TPaintBox TmediaPlaye r TOLEContai ner TDDEClient Conv,TDDE ClientItem, TDDEServer Conv, TDDEServer Item изменяемыми размерами для таблиц. Специализированный ListBox, в котором отображаются файлы из указанной директории (св-во Directory). На названия файлов можно наложить маску, для этого служит св-во Mask. Кроме того, в св-ве FileEdit можно указать объект TEdit для редактирования маски. специализированный ListBox, в котором отображается структура директорий текущего диска. В св-ве FileList можно указать TFileListBox, который будет автоматически отслеживать переход в другую директорию. Специализированный ListBox, в котором отображается структура директорий текущего диска. В св-ве FileList можно указать TFileListBox, который будет автоматически отслеживать переход в другую директорию. Специализированный ComboBox для выбора маски имени файлов. Список масок определяется в свойстве Filter. В свойстве FileList указывается TFileListBox, на который устанавливается маска. Диалоги Выбрать файл: if (OpenDialog1.Execute) Image1.Picture.LoadFromFile(OpenDialog1.FileNa me); Сохранить файл. Настроить шрифт. Выбор цвета. Печать. Настройка принтера. Style - предопределенный стиль заливки; это свойство конкурирует со свойством Bitmap - какое свойство Вы определили последним, то и будет определять вид заливки. Handle - данное свойство дает возможность использовать кисть в прямых вызовах процедур Windows API . - ClipRect - (только чтение) прямоугольник, на котором происходит графический вывод. - CopyMode - свойство определяет, каким образом будет происходить копирование (метод CopyRect) на данную канву изображения из другого места: один к одному, с инверсией изображения и др. - Font - шрифт, которым выводится текст (метод TextOut). - Handle - данное свойство используется для прямых вызовов Windows API. - Pen - карандаш, определяет вид линий; как и кисть (Brush) является объектом с набором свойств: Color - цвет линии Handle - для прямых вызовов Windows API Mode - режим вывода: простая линия, с инвертированием, с выполнением исключающего или и др. Style - стиль вывода: линия, пунктир и др. Width - ширина линии в точках - PenPos - текущая позиция карандаша, карандаш рекомендуется перемещать с помощью метода MoveTo, а не прямой установкой данного свойства. - Pixels - двухмерный массив элементов изображения (pixel), с его помощью Вы получаете доступ к каждой отдельной точке изображения (см. пример к данному уроку). Методы Canvas Поиск строки. Поиск с заменой. Имя ~TCanv as Выбрать графический файл Arc Сохранить графический файл Системные Таймер, событие OnTimer периодически вызывается через промежуток времени, указанный в свойстве Interval. Период времени может составлять от 1 до 65535 мс. Место для рисования. В обработчики событий, связанных с мышкой передаются относительные координаты мышки в TPaintBox, а не абсолютные в форме. Служит для управления мултимедйными устройствами (типа CD-ROM, MIDI и т.п.). Выполнен в виде панели управления с кнопками Play, Stop, Record и др. Для воспроизведения может понадобиться как соответствующее оборудование, так и программное обеспечение. Подключение устройств и установка ПО производится в среде Windows. Например, для воспроизведения видео, записанного в формате AVI, в потребуется установить ПО MicroSoft Video (в Windows 3.0, 3.1, WFW 3.11). Контейнер, содержащий OLE объекты. BrushCo py 4 объекта для организации DDE. С помощью этих объектов можно построить как DDE-сервер, так и DDE-клиент. Ellipse Chord CopyRec t Draw DrawFoc usRect FillRect FloodFill FrameRe ct Свойства объектов Canvas: - Brush - кисть, является объектом со своим набором свойств: Bitmap - картинка размером строго 8x8, используется для заполнения (заливки) области на экране. Color - цвет заливки. LineTo Lock Значение __fastcall virtual ~TCanvas(void); Освобождает созданные объекты TBrush, TFont, и Tpen void __fastcall Arc(int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4); Для изображения элиптически изогнутых линий цветом текущего пера(Pen). void __fastcall BrushCopy(const Windows::TRect &Dest, TBitmap* Bitmap, const Windows::TRect &Source, TColor Color); Копирует часть точечного рисунка в прямоугольник в Canvas, заменяя один из цветов точечного рисунка цветом кисти для Canvas. oid __fastcall Chord(int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4); Отображает закрытый рисунок, образуемый пересечением линии и элипса. void __fastcall CopyRect(const Windows::TRect &Dest, TCanvas* Canvas, const Windows::TRect &Source); Копирует прямоугольную часть изображения одной Канвы на другую. void __fastcall Draw(int X, int Y, TGraphic* Graphic); Изображает на Канве, с координатами левого верхнего угла <X> и <Y>, графический объект определенный параметром <Graphic>. void __fastcall DrawFocusRect(const Windows::TRect &Rect); Изображает прямоугольник в стиле, используемом для указания на объект внутри этого прямоугольника. void __fastcall Ellipse(int X1, int Y1, int X2, int Y2); Изображает на Канве элипс ограниченный прямоугольником (X1:Y1 на X2:Y2). void __fastcall FillRect(const Windows::TRect &Rect); Заполняет текущим цветом прямоугольник на Канве. void __fastcall FloodFill(int X, int Y, TColor Color, TFillStyle FillStyle); Используется для заполнения текущим цветом, области ограниченой цветом <Color>. Возможны стили заполнения: fsSurface – заполнение всей области которая обозначена параметром <Color>; fsBorder – заполняет всю область которая не обозначена параметром <Color>; void __fastcall FrameRect(const Windows::TRect &Rect); Изображает рамку вокруг прямоугольной области. void __fastcall LineTo(int X, int Y); Изображает на Канве линию из позиции определенной PenPos в позицию <X>, <Y>. void __fastcall Lock(void); Блокирует другие потоки выводящие изображение на 38 MoveTo Pie PolyBezi er PolyBezi erTo Polygon StretchD raw Канву. void __fastcall MoveTo(int X, int Y); Изменяет текущую позицию точки на <X>, <Y>. void __fastcall Pie(int X1, int Y1, int X2, int Y2, int X3, int Y3, int X4, int Y4); Изображает круг описанный прямоугольником ? void __fastcall PolyBezier(const tagPOINT * Points, const int Points_Size); Рисует набор кривых Bezeir. void __fastcall PolyBezierTo(const tagPOINT * Points, const int Points_Size); Рисует набор кривых Bezeir с модификацией значения PenPos. void __fastcall Polygon(const tagPOINT * Points, const int Points_Size); void __fastcall StretchDraw(const Windows::TRect &Rect, TGraphic* Graphic); Изображает на Канве графический объект определенный параметром <Graphic>, который вписывается в прямоугольник <Rect>. Методы для рисования простейшей графики - Arc, Chord, LineTo, Pie, Polygon, PolyLine, Rectangle, RoundRect. При прорисовке линий в этих методах используются карандаш (Pen) канвы, а для заполнения внутренних областей - кисть (Brush). Методы для вывода картинок на канву - Draw и StretchDraw, В качестве параметров указываются прямоугольник и графический объект для вывода (это может быть TBitmap, TIcon или TMetafile). StretchDraw отличается тем, что растягивает или сжимает картинку так, чтобы она заполнила весь указанный прямоугольник (см. пример к данному уроку). Методы для вывода текста - TextOut и TextRect. При выводе текста используется шрифт (Font) канвы. При использовании TextRect текст выводится только внутри указанного прямоугольника. Длину и высоту текста можно узнать с помощью функций TextWidth и TextHeight.