Символ - Oscada.org

advertisement
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 = █
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.
Download