9.6.2.2. Переопределение дескрипторов (handle)
Когда программа начинает выполняться, пять дескрипторов ( handle), соответствующих стандартным вводу, выводу, выводу сообщений об ошибках, порту и устройству печати, уже назначены. Пользователь может использовать значения этих дескрипторов при вызове функций ввода/вывода нижнего уровня.
Каждый из этих дескрипторов соответствует одному из стандартных потоков, значения этих дескрипторов таковы:
| поток |
значение дескриптора |
| 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 |
разложение х как произведения мантиссы на экспоненту 2 n |
| hypot |
вычисление гипотенузы |
| labs |
нахождение абсолютного значения типа long |
| ldexp |
вычисление х*2 exp |
| log |
вычисление натурального логарифма |
| log10 |
вычисление логарифма по основанию 10 |
| matherr |
управление реакцией на ошибки при выполнении функций математической библиотеки |
| modf |
разложение х на дробную и целую часть |
| pow |
вычисление х в степени у |
| sin |
вычисление синуса |
| sinh |
вычисление гиперболического синуса |
| sqrt |
нахождение квадратного корня |
| _status87 |
получение значения слова состояния с плавающей точкой |
| tan |
вычисление тангенса |
| tanh |
вычисление гиперболического тангенса |
Система программирования MSC предоставляет дополнительно функции:
Читать дальше