- •Библиотеки и ввод-вывод данных
- •Ввод-вывод данных. Основные понятия
- •Классификация функций ввода-вывода верхнего уровня
- •Обработка ошибок ввода-вывода
- •Открытие, закрытие и удаление файлов
- •Бесформатный ввод-вывод данных текстовых файлов Посимвольный ввод-вывод данных
- •Построчный ввод-вывод данных
- •Построчный вывод данных
- •Форматный ввод-вывод данных текстовых файлов Форматный ввод данных
- •Форматы ввода данных
- •Форматный вывод данных
- •Форматы вывода данных
- •Форматный вывод арифметических данных
- •Форматный вывод символьных и строковых данных
- •Ввод-вывод записей
- •Ввод записей
- •Вывод записей
- •Дополнительные возможности ввода-вывода данных
Библиотеки и ввод-вывод данных
Для каждой библиотеки Си созданы интерфейсные файлы с расширением .h, в которых содержатся прототипы (объявления) всех библиотечных функций, объявления относящихся к ней структур данных и констант.
Пример Интерфейсные файлы библиотек Си
alloc.h – динамическое распределение памяти;
conio.h – функции ввода-вывода с терминала и порта;
math.h – математические функции;
stdio.h – ввод-вывод данных;
string.h – работа со строками.
Ввод-вывод данных. Основные понятия
Функции ввода-вывода сгруппированы в трёх библиотеках, интерфейсы которых находятся в файлах:
stdio.h – для функций стандартного ввода-вывода верхнего уровня;
io.h – для функций, выполняющих операции над файлами;
conio.h – для функций консольного ввода-вывода c терминала и порта.
Функции ввода-вывода можно разделить на две группы:
ввод-вывод верхнего уровня: потоковый и записями;
ввод-вывод нижнего уровня (системный ввод-вывод).
Функции верхнего уровня позволяют буферизированный форматный и бесформатный ввод-вывод данных.
Они одинаково реализованы в различных операционных системах и на разных ЭВМ и позволяют создавать переносимые программы.
Прототипы всех функций ввода-вывода верхнего уровня содержатся в файле stdio.h и совместимы с аналогичными функциями системы UNIX. Функции ввода-вывода для консоли и порта позволяют читать и писать на консоль (терминал) или в порт ввода-вывода, например, в порт принтера.
Функции ввода-вывода нижнего уровня не выполняют буферизацию и форматирование данных. Это функции системного ввода-вывода. Они позволяют пользоваться непосредственно средствами ввода-вывода операционной системы (ОС). Их целесообразно использовать при разработке собственных подсистем ввода-вывода данных.
Функции ввода-вывода верхнего уровня реализуют ввод-вывод потоком и записями.
Поток (stream) определяет источник или приёмник данных. Его можно связать с файлом на магнитном диске или с внешним устройством. Поток может быть текстовым или бинарным.
Текстовый поток - последовательность строк; каждая строка имеет 0 или более символов, заканчивается конца строки ‘\n’ и перехода к следующей. Бинарный поток - последовательность байтов без учёта разделения на строки.
Для работы с файлом его надо открыть, обработать и закрыть. При открытии файла программы с ним связывается определённый физический поток (физический файл). Файл должен иметь указатель на структуру типа FILE (тип, определённый в stdio.h). Когда файл открывается с помощью функции fopen, структуре типа FILE выделяется оперативная память (ОП), адрес которой получает указатель на структуру. Поток связывается со структурой типа FILE. Структура содержит информацию о файле или устройстве, с которым связан файл программы. Указатель на структуру типа FILE используется для операций с файлами с помощью библиотечных функций ввода-вывода.
Структура типа FILE используется функциями ввода-вывода для хранения информации, связанной с устройством или файлом. Объявляется она в файле stdio.h.
ОС автоматически открывает перед началом работы любой прикладной программы следующие стандартные файлы и устройства:
stdin – для стандартного ввода; назначается клавиатура;
stdout – для стандартного вывода; назначается экран;
stdprn – для стандартного устройства печати;
stderr – для вывода сообщений об ошибках (обычно экран);
stdaux – стандартный порт.
Файлы stdin и stdout можно переназначить при запуске exe-программы или в программе с помощью функции freopen.
Можно использовать при работе с файлами константы, определённые в stdio.h: EOF – признак конца файла; NULL – значение указателя, которое не содержит адрес объекта.