Чтение онлайн

ЖАНРЫ

Язык программирования Си для персонального компьютера

Субботин Д. М.

Шрифт:
поток значение дескриптора
stdin 0
stdout 1
stderr 2
stdaux 3
stdprn 4

Можно использовать эти дескрипторы файлов в программе без предварительного открытия этих файлов. Они автоматически открываются при запуске программы.

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

Функции dup и dup2 позволяют назначать несколько handle для одного файла; эти функции обычно используются, чтобы связать дополнительные дескрипторы с уже используемыми файлами.

Чтение и запись данных

Функции read

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

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

Когда происходит ошибка, программы в/в нижнего уровня присваивают код ошибки переменной errno. Можно использовать функцию perror для печати информации об ошибках в/в. Можно позиционировать указатель файла на определенную позицию в файле, используя функцию lseek. Используя функцию tell, можно определить текущую позицию указателя файла. Устройства типа консольного терминала не имеют указателя файла. Результат функций lseek и tell не определен, если они применяются к дескриптору, связанному с таким устройством.

Закрытие файлов

Функция close закрывает открытые файлы. Открытые файлы также автоматически закрываются при неаварийном завершении программы.

Функции вода/вывода с консольного терминала и порта

Функции ввода/вывода для консольного терминала выделены в отдельную группу, потому что они используют специфические особенности компьютера IBM/PC (наличие специального видеоадаптера) и не являются переносимыми на другие типы компьютеров.

функция Краткое описание
cgets чтение строки с консоли
cprintf запись данных на консольный терминал по формату
cputs вывод строки на консольный терминал
getch чтение символа с консоли
getche чтение символа с консоли с эхо-печатью
kbhit проверка нажатия клавиши на консоли
putch вывод символа на консольный терминал
ungetch возврат последнего прочитанного символа с консольного символа обратно с тем, чтобы он стал следующим символом для чтения

Система программирования MSC предоставляет дополнительно функцию cscanf - чтение данных с консоли по формату.

Система программирования ТС предоставляет дополнительно функцию getpass - ввод с терминала пароля без эхо-печати

Прототипы функций содержатся в файле conio.h. Устройства: консольный терминал и порт не могут быть открыты или закрыты перед выполнением в/в, поэтому функции fopen и fclose не вызываются. Функции в/в с консольного терминала позволяют читать и записывать строки (cgets и cputs), форматированные данные (cscanf и cprintf) и символы. Функция kbhit определяет: было ли нажатие клавиши на консольном терминале. Эта функция позволяет определить наличие символов для ввода с клавиатуры до попытки чтения.

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

Функция Краткое описание
abs нахождение абсолютного значения выражения типа int
acos вычисление арккосинуса
asin вычисление арксинуса
atan вычисление арктангенса х
atan2 вычисление арктангенса от у/х
cabs нахождение абсолютного значения комплексного числа
ceil нахождение наименьшего целого, большего или равного х
_clear87 получение значения и инициализация слова состояния сопроцессора и библиотеки арифметики с плавающей точкой
_control87 получение старого значения слова состояния для функций арифметики с плавающей точкой и установка нового состояния
cos вычисление косинуса
cosh вычисление гиперболического косинуса
exp вычисление экспоненты
fabs нахождение абсолютного значения типа double
floor нахождение наибольшего целого, меньшего или равного х
fmod нахождение
остатка от деления х/у
_fpreset повторная инициализация пакета плавающей арифметики
frexp разложение х как произведения мантиссы на экспоненту 2n
hypot вычисление гипотенузы
labs нахождение абсолютного значения типа long
ldexp вычисление х*2exp
log вычисление натурального логарифма
log10 вычисление логарифма по основанию 10
matherr управление реакцией на ошибки при выполнении функций математической библиотеки
modf разложение х на дробную и целую часть
pow вычисление х в степени у
sin вычисление синуса
sinh вычисление гиперболического синуса
sqrt нахождение квадратного корня
_status87 получение значения слова состояния с плавающей точкой
tan вычисление тангенса
tanh вычисление гиперболического тангенса

Система программирования MSC предоставляет дополнительно функции:

Функция Краткое описание
bessel вычисление функции Бесселя
dieeetomsbin преобразование плавающего числа двойной точности из IEEE-формата в Microsoft-формат
dmsbintoieee преобразование плавающего числа двойной точности из Microsoft-формата в IEEE-формат
fieeetomsbin преобразование числа с плавающей точкой из IEEE-формата в Microsoft-формат
fmsbintoieee преобразование числа с плавающей точкой из Microsoft-формата в IEEE-формат

Система программирования ТС предоставляет дополнительно функции:

Функция Краткое описание
_matherr управление реакцией на ошибки при выполнении функций из математической библиотеки
pow10 вычисление десятичной степени

Прототипы функций содержатся в файле math.h, за исключением прототипов функций _clear87, _control87, _fpreset, status87, которые определены в файле float.h. Функция matherr (ее пользователь может задать сам в своей программе) вызывается любой библиотечной математической функцией при возникновении ошибки. Эта программа определена в библиотеке, но может быть переопределена пользователем, если она необходима, для установки различных процедур обработки ошибок.

Динамическое распределение памяти

Библиотека языка Си предоставляет механизм распределения динамической памяти (heap). Этот механизм позволяет динамически (по мере возникновения необходимости) запрашивать из программы дополнительные области оперативной памяти.

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

В малых моделях памяти (tiny, small, medium) доступно для использования все пространство между концом сегмента статических данных программы и вершиной программного стека, за исключением 256-байтной буферной зоны непосредственно около вершины стека.

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

Следующие функции используются для динамического распределения памяти:

Функция Краткое описание
calloc выделить память для массива
free освободить блок, полученный посредством функции calloc, malloc или realloc
malloc выделить блок памяти
realloc переразместить ранее выделенный блок памяти, изменив его размер
sbrk переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы)
Поделиться с друзьями: