- •Ввод-вывод в языке с
- •Потоковые функции
- •Открытие файлов и потоков
- •Переадресация ввода-вывода
- •Изменение буфера потока
- •Форматный вывод данных
- •Функция printf()
- •Поиск в файлах с помощью функций fseek( ), ftell( ) и rewind()
- •Синхронный и асинхронный ввод/вывод
- •3. Позиционирование указателя файла.
- •6. Запись данных в файл
- •Блокировка и разблокировка файла
- •Асинхронный режим чтения и записи файлов
- •Стандартные потоки cin, coutи cerr
- •Флаги и функции форматирования
- •Файловый ввод-вывод
- •Флаг Назначение
- •Файловый ввод
- •Файловый вывод
- •Вот результаты работы программы:
- •Двоичные файлы
- •Буферы потоков
Потоковые функции
Чтобы получить доступ к потоковым функциям, приложение должно подключить файл STDIO.H. Этот файл содержит объявления констант, типов данных и структур, используемых этими функциями, а также прототипы самих функций и описания служебных макросов.
Многие константы, содержащиеся в файле STDIO.H, находят достаточно широкое применение в приложениях. Например, константа eof возвращается функциями ввода при достижении конца файла, а константа null служит нулевым ("пустым") указателем. Другие примеры: тип данных FILE представляет собой структуру, содержащую информацию о потоке, а константа BUFSIZ задает стандартный размер в байтах буфера, используемого потоком.
Открытие файлов и потоков
Чтобы открыть файл для ввода или вывода данных, воспользуйтесь одной из следующих функций: fopen(),fdopen() или freopen() Файл открывается для чтения, записи или для выполнения обеих операций. Кроме того, файл может быть открыт в текстовом или в двоичном режиме.
Все три функции возвращают указатель файла, который используется для обращения к потоку. Например:
FILE *pfinfile = fopen("input.dat", "r");
Открывает поток функция
FILE* fopen(
const char *filename,// имя файла, ассоциированного с потоком
const char *mode // строка режимов работы с потоком
) — возвращает указатель на поток, который идентифицирует его в последующих операциях.
В строке режимов могут находиться следующие символы:
r — открыть только для чтения.
w — создать для записи. Существующий файл будет перекрыт новым.
a — открыть для дозаписи, или создать для записи, если файл не существует.
+ — операции будут выполняться с уже существующим файлом.
t — текстовый режим (обработка символов CR-LF).
b — двоичный режим (никакой обработки).
При отсутствии в строке b или t, режим определяется глобальной переменной _fmode, определенной в заголовочном файле fcntl.h.
FILE — это управляющая структура для потока, объявленная в stdio.h. Она не предназначена для прямого использования.
Поток является программной надстройкой над файлом, предоставляющей программисту дополнительный сервис. Помимо совместного открытия потока и файла (fopen), можно открыть поток и ассоциировать его с уже открытым файлом (fdopen), открыть файл и ассоциировать его с уже открытым потоком (freopen).
При запуске приложения автоматически открываются сразу пять стандартных потоков: ввода (stdin), вывода (stdout), ошибок (stderr), печати (stdprn) и внешнего устройства (stdaux). По умолчанию стандартные потоки ввода, вывода и ошибок связаны с консолью. Например, данные, записываемые в стандартный вывод, выводятся на терминал. Любое сообщение об ошибке, сгенерированное библиотечной функцией, также выводится на терминал. Потоки stdprnи stdaux направляют данные соответственно в порт принтера и порт внешнего устройства.
Во всех функциях, где в качестве аргумента требуется указатель на поток, можно использовать любой из перечисленных выше указателей. Некоторые функции, такие как getchar() и putchar(), работают только с потоками stdin и stdout. Поскольку указатели stdin, stdout, stderr, stdprn и stdaux являются константами, а не переменными, не пытайтесь переадресовать их на другие потоки.