Лекция 1

Правила оформления программ на Си/Си++.
Операции и основные типы данных.

Лекция 2

Операторы


Лекция 3

Использование библиотечных процедур СИ

 

Лекция 10

Директивы препроцессора

Лекция 11

Видимость и время жизни переменных

Лекция 12

Дополнительные возможности Си++


Лекция 13

Объектно-ориентированное программирование
 

 

 

главная

Лекция

Лекция №5

Тема: Библиотечные функции


Содержание:

Консольный ввод/вывод и ввод/вывод портов

Математические функции

Назначение памяти

Интерфейс с MS DOS

Управление процессами

Поиск и сортировка

Обработка строк

Время

Разное

 

Консольный ввод/вывод и ввод/вывод портов

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
cgets
читает строку с консоли.
cprintf
записывает форматированные данные на
консоль.
cputs
записывает строку на консоль.
cscanf
читает форматированные данные с
консоли.
getch
читает символ с консоли.
getche
читает символ с консоли с эхо-ото-
бражением.
inp
читает определенный порт ввода/
вывода.
kbhit
проверяет нажатие клавиши на консоли
outp
записывает определенный порт ввода/
вывода.
putch
записывает символ на консоль.
ungetch
возвращает ("ungets") последний
считанный с консоли символ, так что
он становится следующим читаемым
символом.


Консольный ввод/вывод и процедуры ввода/вывода портов реа-
лизованы как функции и объявлены в include-файле <conio.h>. Эти
функции выполняют операции чтения и записи с/на консоль или на
определенный порт. Процедуры cgets, cscanf, getch, getche, kbhit
производят ввод с консоли, тогда как cprintf, cputs, putch,
ungetch
записывают на консоль. Переназначение стандартного ввода
или стандартного вывода из командной строки вызывает переназначе-
ние ввода или вывода этих функций. Перед выполнением ввода/вывода
консоль и порт не должны быть открытыми или закрытыми, так как
нет процедур открытия или закрытия в данной категории. Процедуры
ввода/вывода порта - inp, outp - читают или записывают 1 байт из
определенного порта. Процедуры консольного ввода/вывода - cgets,
cputs
- позволяют считывать и записывать строки, cscanf, cprintf
- форматированные данные и символы. Для чтения и записи символов
применяются различные опции.


Процедура putch записывает символ на консоль; процедуры
getch, getche читают символ с консоли: getche вырабатывает эхо
символа на консоль, getch этого не производит. Процедура ungetch
возвращает последний прочитанный символ; следующая операция чте-
ния с консоли начинается с возвращенного символа. Процедура kbhit
определяет, какая клавиша была нажата на консоли. Эта процедура
позволяет проверять ввод с клавиатуры перед попыткой чтения с
консоли.


Математические функции

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
acos(x) Вычисляет arccos x
asin(x) Вычисляет arcsin x
atan(x) Вычисляет arctg x
atan2(y,x) Вычисляет arctg(y/x)
bessel Вычисляет функцию Бесселя (эта
процедура соответствует не одной, а
шести функциям: j0, j1, jn, y0, y1, yn)
cabs(z) Находит модуль комплексного числа z
ceil(x) Находит целую часть x
_clear87( ) Получает и очищает слово состояния
с плавающей точкой (floating point
status word). Недействительно с опцией
компилятора /FPa
_control87(new,mask) Получает старое слово состояния с
плавающей точкой и устанавливает новое
значение управляющего слова. Недейст-
вительно с опцией компиятора /FPa
cos(x) Вычисляет cos x
cosh(x) Вычисляет гиперболический косинус x
dieeetomsbin(&x,&y) Преобразует IEEE-число двойной
точности (x) в двоичный формат (y)
dmsbintoieee(&x,&y) Преобразует двоичное число двойной
точности в IEEE-формат
exp(x) Вычисляет экспоненциальную функцию
fabs(x) Вычисляет абсолютное значение x
fieeetomsbin(&x,&y) Преобразует IEEE-число одинарной
точности в двоичный формат
floor(x) Находит наибольшее целое, которое
меньше или равно x
fmod(x,y) Находит остаток с плавающей точкой
от деления x на у
fmsbintoieee(&x,&y) Преобразует двоичное число одинарной
точности (x) в формат IEEE (y)
_fpreset( ) Реинициализирует пакет математических
функций для чисел с плавающей точкой
frexp(x,&n) Представляет х как мантиссу (возвра-
щаемое значение) степени n по основа-
нию 2
hypot(x,y) Вычисляет гипотенузу прямоугольного
треугольника с катетами x и y
ldexp(x,exp) Возводит 2 в exp степень х раз
log(x) Вычисляет натуральный логарифм х
log10(x) Вычисляет десятичный логарифм х
matherr(x) Обрабатывает математические ошибки
modf(x,&n) Разделяет х на целую (возвращаемое
значение) и дробную (n) части
pow(x,y) Вычисляет х в степени y
sin(x) Вычисляет sin x
sinh(x) Вычисляет гиперболический синус
sqrt(x) Находит квадратный корень из х
_status87( ) Получает слово состояния с плавающей
точкой.
tan(x) Вычисляет tg x
tanh(x) Вычисляет гиперболический тангенс х



Математические процедуры, представленные выше, осуществляют
стандартные математические вычисления. Все математические проце-
дуры работают со значениями, представленными в форме с плавающей
точкой.
Объявления функций для математических процедур содержатся в
include-файле <math.h>, за исключением _clear87, _control87,
_fpreset и _status87, объявления которых находятся в include-фай-
ле <float.h>.
Процедура matherr вызывается математическими функциями,
когда встречается ошибка. Эта процедура объявлена в библиотеке,
но может быть переопределена пользователем, если требуются другие
процедуры обработки ошибок.
Подключать matherr самому необязательно. Если эта функция
не подключена, каждая из математических процедур содержит вариан-
ты возврата.


Назначение памяти

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
alloca
Назначает блок памяти в стеке про-
граммы.
calloc
Назначает память для массива.
_expand
Переназначает блок памяти, не меняя
его местонахождения.
_ffree
Освобождает блок, назначенный
посредством _fmalloc.
fmalloc
Назначает блок памяти вне умалчиваемо-
го сегмента данных. Возвращается far-
указатель.
free
Освобождает блок, назначенный
посредством calloc, malloc, realloc.
_freect
Возвращает приблизительное число объ-
ектов заданного размера, назначенных
ранее.
_fmsize
Возвращает размер блока памяти, на
который ссылается указатель far.
halloc
Назначает память для huge-массива.
hfree
Освобождает блок, назначенный
посредством процедуры halloc.
malloc
Назначает блок.
_memavl
Возвращает приблизительное число бай-
тов, имеющихся в памяти для размещения
_msize
Возвращает размер блока, назначенного
посредством calloc, malloc, realloc.
_nfree
Освобождает блок, назначенный
посредством функции _nmalloc.
_nmalloc
Назначает блок памяти в умалчиваемом
сегменте данных. Возвращается "near-
pointer".
_nmsize
Возвращает размер блока памяти, на
который ссылается near-указатель.
realloc
Переназначает блок.
sbrk
Изменяет значение прерывания.
stackavail
Возвращает размер пространства (участ-
ка) стека, пригодного для назначения
посредством функции alloca.

 

Процедуры назначения памяти позволяют назначать, освобож-
дать и переназначать блоки памяти. Процедуры назначения памяти
объявлены в include-файле <malloc.h>.


Процедуры calloc, malloc назначают блоки памяти. Процедура
malloc назначает заданное число байтов, а calloc - назначает и
инициализирует в 0 массив с элементами заданного размера. Проце-
дуры _fmalloc, _nmalloc аналогичны malloc, за исключением того,
что они позволяют назначать блок байтов, пока допускается адреса-
ция текущей модели памяти. Процедура halloc выполняет ту же функ-
цию, что и calloc, с тем различием, что halloc назначает прост-
ранство (участок) для huge-массивов.


Процедуры realloc, _expand изменяют размер назначенных бло-
ков. Функция _expand пытается изменить размер назначенного блока
без передвижения его heap-положения; она увеличивает размер блока
к требуемому размеру или к такому, который позволяет текущее рас-
положение, каким бы маленьким оно ни было. Процедура realloc, в
противоположность _expand, изменяет назначение в heap, если прос-
транства недостаточно.


Процедура halloc возвращает huge-указатель на тип char,
_fmalloc - far-указатель на char, _nmalloc - near-указатель на
char; остальные процедуры назначения памяти возвращают char ука-
затель. Пространство памяти, которое выделяют эти процедуры,
удовлетворяет требованиям выравнивания для любого типа объекта.
Когда назначаемый тип объекта отличен от char, используется пре-
образование типов (type cast) для возвращаемого значения.


Процедуры free для calloc и malloc, _ffree для _malloc,
_nfree для _nmalloc, hfree для halloc освобождают предыдущее
назначение памяти, делая ее доступной для требуемого последующего
назначения.


Процедуры _freect, memavl сообщают о количестве памяти,
доступной для динамического распределения памяти в умалчиваемом
сегменте данных; _freect возвращает приблизительное число объек-
тов данного размера, которые могут быть назначены. _Memavl возв-
ращает суммарное значение байтов, доступных для требуемого назна-
чения.


Процедура _msize возвращает размер блока памяти, назначен-
ный вызовом любой из функций calloc, _expand, malloc, realloc.
Процедуры _fmsize, _nmsize возвращают размер блока памяти, назна-
ченного соответственно вызовами _fmaloc и _nmalloc. Процедура
sbrk - это низкоуровневая процедура назначения памяти. Она изме-
няет значение программного прерывания, что позволяет ей восполь-
зоваться доступной динамической памятью.


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

Интерфейс с MS DOS

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
bdos Обращается к системному вызову MS DOS.
Использует только регистры DX и AL.
dosexterr Получает регистровые значения систем-
ного вызова MS DOS 59Н.
FP_OFF Возвращает значение смещения far-ука-
зателя.
FP_SEG Возвращает значение сегмента far-ука-
зателя.
int86 Вызывает прерывания MS DOS.
int86x Вызывает прерывания MS DOS.
intdos Обращается к системному вызову MS DOS.
Использует регистры, отличные от DX и
AL.
intdosx Обращается к системному вызову MS DOS.
Использует регистры, отличные от DX и
AL.
segread Возвращает текущее значение регистров
сегмента.


Процедуры FP_OFF и FP_SEG обеспечивают пользователю легкий
доступ к сегменту и смещению far-указателя. Эти процедуры реали-
зованы как макро и определены в include-файле <dos.h>. Остальные
процедуры реализованы как функции и объявлены в <dos.h>.
Функция dosexterr получает и запоминает значения регистров,
возвращаемые системным вызовом 59Н (расширение обработки ошибок).


Процедура bdos полезна для обращения к вызовам MS DOS, ис-
пользующих один либо оба регистра DX (DH/DL) и AL для аргумен-
тов. Однако, bdos не может использоваться для обращения к систем-
ным вызовам, возвращающим код ошибки в регистре AX, если устанав-
ливается флаг переполнения. Программа не может обнаружить, уста-
новлен ли флаг переполнения, что не позволяет определить допусти-
мо или ошибочно значение регистра AX.


Процедура intdos также может быть использована для обраще-
ния к вызовам MS DOS, использующим регистры, отличные от DX и AL.
Процедура intdosx аналогична intdos, но она используется, когда
для системных вызовов требуется регистр ES либо регистр DS со-
держит значение, отличное от определяемого по умолчанию сегмента
данных (например, при использовании far-указателя), либо когда в
программе для большой модели памяти делается системный вызов. При
вызове intdosx задается аргумент, который специфицирует значение
сегмента, используемого в вызове.


Процедура int86 может быть использована для вызова прерыва-
ний MS DOS. Процедура int86x похожа на int86, но, по аналогии с
процедурой intdosx, предназначена для работы с программами для
больших моделей памяти и far-объектами, (это описано выше для
intdosx).


Процедура segread возвращает текущие значения регистров
сегментов. Эта процедура обычно используется с процедурами
intdosx и int86x, чтобы получить корректные значения сегментов.

Управление процессами

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
abort
Прерывает процесс
execl
Выполняет child-процесс, используя
список аргументов
execle
Выполняет child-процесс, используя
передачу списка аргументов и окружения
execlр
Выполняет child-процесс, используя
PATH-переменную и список аргументов
execlpe
Выполняет child-процесс, используя
PATH-переменную, данное окружение и
список аргументов
execv
Выполняет child-процесс с массивом
аргументов
execve
Выполняет child-процесс с передачей
массива аргументов и окружения
execvp
Выполняет child-процесс, используя
PATH-переменную и массив аргументов
execvpe
Выполняет child-процесс, используя
PATH-переменную, массив аргументов и
данное окружение
exit
Завершает процесс
_exit
Завершает процесс без начальной
установки буферов
getpid
Получает уникальное имя процесса
onexit
Выполняет функции после завершения
программы
signal
Обрабатывает сигнал прерывания
spawnl
Выполняет child-процесс со списком
аргументов
spawnle
Выполняет child-процесс со списком
аргументов и данным окружением
spawnlp
Выполняет child-процесс,используя PATH-
переменную и список аргументов
spawnlpe
Выполняет child-процесс,используя PATH-
переменную, список аргументов и данное окружение
spawnv
Выполняет child-процесс, используя
массив аргументов
spawnve
Выполняет child-процесс, используя
массив аргументов и данное окружение
spawnvp
Выполняет child-процесс, используя
PATH-переменную и массив аргументов
spawnvpe
Выполняет child-процесс, используя
PATH-переменную, массив аргументов и
данное окружение
system
Выполняет команду MS DOS

 

Термин "процесс" определяется как программа, выполняемая
под управлением операционной системы. Процесс содержит команды
программы и данные, а также информацию, относящуюся к состоянию
процесса, такую как количество открытых файлов. Всякий раз про-
цесс начинается с выполнения программы на уровне MS DOS. Кроме
этого, можно запустить, остановить или управлять одним или нес-
колькими процессами из программы, используя для этого функции уп-
равления процессами.
Функции управления процессами позволяют делать следующее:


1. Идентифицировать процесс с помощью уникального номера
(getpid);


2. Завершить процесс (abort, exit, _exit);


3. Обработать сигнал прерывания;


4. Стартовать новый процесс (семейства процедур exec и
spawn, плюс процедура system).


Все функции управления процессами, кроме signal, объявлены
в include-файле <process.h>. Функция signal объявлена в
<signal.h>. Функции abort, exit и system объявлены также в
include-файле <stdlib.h>.


Функции abort и _exit осуществляют непосредственный выход
из процесса без начальной установки буферов потоков. Функция exit
завершает процесс и делает начальную установку буферов потока.
System вызывает указанную команду MS DOS.


Процедуры exec и spawn запускают новый процесс, называемый
child-процессом. Различие между процедурами exec и spawn заключа-
ется в том, что процедура spawn способна возвращать управление из
child-процесса его parent-процессу. Это возможно благодаря тому,
что оба процесса находятся в памяти (при условии, что не специфи-
цирована опция P_OVERLAY, т.е. если процессы не перекрывают друг
друга в оверлее). При использовании функции exec вызванный
child-процесс перекрывает parent-процесс, поэтому возвращение уп-
равления последнему становится невозможным (если только не воз-
никла ошибочная ситуация при запуске на выполнение child-процес-
са).


Существуют 8 форм каждой из процедур spawn и exec. Различие
между этими формами понятно из таблицы 1. В первой колонке этой
таблицы даны имена функций. Во второй колонке указано, использу-
ется ли текущая PATH-установка для размещения файла, который бу-
дет выполняться как child-процесс. В третьей колонке описывается
способ передачи аргументов в child-процесс. Передача аргументов
списком означает, что они пересылаются в child-процесс из списка
по одному процедурой exec или spawn; передача массива аргументов
означает, что отдельные аргументы запоминаются в массиве, а адрес
(указатель) этого массива передается в child-процесс.

Метод передачи списком используется обычно тогда, когда количество аргумен-
тов постоянно или становится известным во время компиляции, а пе-
редача массива применяетcя, если количество аргументов определя-
ся во время выполнения процесса. В последней колонке указано ког-
да child-процесс "наследует" окружение, установленное в вызвавшем
его parent-процессе, и когда ему может быть передана таблица ус-
тановленного окружения для необходимой корректировки.

Таблица 1

 

Процедура

Использование PATH-установки

Способ передачи аргументов

Окружение

execl, spawnl
Не исп. PATH
Списком
Наследует от parent-
процесса
execle,spawnle
Не исп. PATH
Списком
Передается указатель
на таблицу окружения
в качестве последне-
го аргумента списка

execlp,spawnlp
Используется PATH
Списком
Наследует от parent-
процесса
execlpe,spawnlpe
Используется PATH
Списком
Передается указатель
на таблицу окружения
в качестве последне-
го аргумента списка
execv,spawnv
Не исп. PATH
Массивом
Наследует от parent-
процесса

execve,spawnve
Не исп. PATH
Массивом
Передается указатель
на таблицу окружения
в качестве последне-
го аргумента списка
execvp,spawnvp
Используется PATH
Массивом
Наследует от parent-
процесса

execvpe,spawnvpe
Используется PATH
Массивом
Передается указатель
на таблицу окружения
в качестве последне-
го аргумента списка

 

Поиск и сортировка

 
ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
bsearch
Осуществляет бинарный поиск
lfind
Осуществляет последовательный поиск
данного значения
lsearch
Осуществляет последовательный поиск и
добавляет данное значение в массив,
если оно не найдено
qsort
Осуществляет быструю сортировку

Функции bsearch, lfind, lsearch и qsort являются полезными
утилитами для осуществления двоичного и последовательного поиска
и быстрой сортировки. Они объявлены в include-файле <search.h>.

Обработка строк
ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
strcat
Добавляет строку
strchr
Обнаруживает первое вхождение данного
символа в строке
strcmp
Сравнивает две строки
strcmpi
Сравнивает две строки с игнорированием
типа регистра (верхнего или нижнего).
Здесь "i" указывает на то, что данная
функция "нечувствительна" к типу ре-
гистра)
strcpy
Копирует одну строку в другую
strcspn
Обнаруживает первое вхождение символа из
данной последовательности символов в
строке
strdup
Размножает строку
strerror
Сохраняет в строке сообщения о систем-
ной ошибке и сообщения о некоторых
избранных ошибках пользователя
stricmp
Сравнивает две строки c игнорированием
типа регистра (аналогично с strcmpi)
strlen
Определяет длину строки
strlwr
Преобразует строку в символы нижнего
регистра (в строчные буквы)
strcat
Присоединяет к строке n символов
strncmp
Сравнивает n символов в двух строках
strncpy
Копирует n символов из одной строки в
другую
strnicmp
Сравнивает n символов в двух строках
с игнорированием типа регистра (см. при-
мечание к strcmpi)
strnset
Заполняет n символов строки заданным
символом
strpbrk
Обнаруживает первое вхождение символа
из одной строки в другой строке
strrchr
Обнаруживает последнее вхождение данного
символа в строке
strrev
"Перевертывает" строку (reverses)
strspn
Находит в строке первую подстроку из
данной последовательности символов
strstr
Обнаруживает первое вхождение данной
строки в другой строке
strtok
Находит очередную лексему (token) в
строке
strupr
Переводит строку в верхний регистр (пре-
образует буквы в прописные)


Функции обработки строк объявлены в include-файле
<string.h>. В библиотеке Си имеется широкий выбор этих функций

. С их помощью можно делать следующее:


осуществлять сравнение строк;


исследовать строки, отдельные символы или символы из данно-
го набора;


копировать строки;


преобразовывать символы строк в разные регистры;


заполнять символы в строке данным симвоом;


"перевертывать" символы в строках;


вставлять в строки разделители;


запоминать в строке сообщения об ошибках.


Все функции обработки строк работают со строками, заканчи-
вающимися нулевым символом '\0'. Для работы с массивами симво-
лов, которые не заканчиваются нулевым символом, используются про-
цедуры манипуляции с буферами, которые описаны ранее в этом же
разделе.

 

Время

ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
asctime Преобразует значение времени из
структуры в строку символов
ctime Преобразует значение времени из
длинного целого в строку символов
ftime Получает текущее системное время в виде
структуры
gmtime Преобразует время из целого в структуру
localtime Преобразует время из целого в структуру
с местной коррекцией
time Получает текущее время как длинное целое
tzset Устанавливает переменные внешнего
времени из переменной окружения
utime Устанавливает время модификации файла


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

Функции time и ftime возвращают текущее время
как число двойной точности, соответствующее значению времени по
Гринвичу (выверенного на 1 января 1970 г.). Это значение может
быть преобразовано, видоизменено и запомнено различными способа-
ми, для чего используются функции asctime, ctime, gmtime и
localtime. Функция utime устанавливает модифицированное время для
определенных файлов, используя либо текущее время, либо значение
времени, запомненное в структуре.


Для функции ftime нужны два include-файла: <sys\types.h>
и <sys\timeb.h>. Функция utime также нуждается в двух include-
файлах <sys\types.h> и <sys\utime.h>. Остальные функции времени
объявлены в include-файле <time.h>.

Разное

 
ПРОЦЕДУРА
ИСПОЛЬЗОВАНИЕ
abs
Находит абсолютное значение целой
величины.
assert
Проверяет на логическую ошибку.
getenv
Задает значение переменной окружения.
labs
Находит абсолютное значение длинной
целой величины.
longjmp
Восстанавливает сохраненное состояние
стека.
perror
Печатает сообщения об ошибке.
putenv
Добавляет или модифицирует значение
переменной окружения.
rand
Выбирает псевдослучайное число.
setjmp
Сохраняет стек окружения.
srand
Инициализирует псевдослучайный ряд.
swab
Обменивает байты данных.



Все процедуры, за исключением assert, longjmp, setjmp, объ-
явлены в <stdlib.h>. Процедура assert является макро и определена
в <assert.h>. Функции longjmp и setjmp объявлены в <setjmp.h>.
Функции abs и labs возвращают абсолютное значение типа int
и long соответственно. Эти две функции объявлены в include-файлах
<math.h> и <stdlib.h>.


Процедуры getenv и putenv обеспечивают доступ к таблице пе-
ременных окружения. Глобальная переменнная environ также указыва-
ет на эту таблицу, но ее рекомендуется использовать в случаях,
если таблица переменных окружения устанавливается чаще, чем ис-
пользуется.


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


Процедура perror объявлена в include-файлах <stdlib.h> и
<stdio.h>. Номер ошибок хранится в переменной errno. Системное
сообщение об ошибке выбирается из массива sys-errlist. Переменная
errno правильно устанавливает ошибку только для тех процедур, для
которых точно определены переменные errno.


Функции rand и srand инициализируют и генерируют псевдослу-
чайную последовательность целых.


Функции longjmp и setjmp сохраняют и восстанавливают состо-
яние стека. Эти процедуры позволяют выполнить нелокальный пере-
ход.


Процедура swab (также объявленная в <stdlib.h>) обменивает
байты двоичных данных. Она обычно используется для подготовки
данных при передаче их в вычислительную машину, которая использу-
ет отличный порядок байтов.

 

 

Найти: на

 

Hosted by uCoz