Язык программирования Си для персонального компьютера
Шрифт:
поток | значение дескриптора |
stdin | 0 |
stdout | 1 |
stderr | 2 |
stdaux | 3 |
stdprn | 4 |
Можно использовать эти дескрипторы файлов в программе без предварительного открытия этих файлов. Они автоматически открываются при запуске программы.
Так же, как с функциями для потоков, Вы можете использовать перенаправление, чтобы переопределить стандартный ввод и вывод.
Функции dup и dup2 позволяют назначать несколько handle для одного файла; эти функции обычно используются, чтобы связать дополнительные дескрипторы с уже используемыми файлами.
Чтение и запись данных
Функции read
Функция 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 | переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы) |