ВУЗ:
Составители:
Рубрика:
23. Ввод-вывод в С
Файл – это именованная область внешней памяти. Файл имеет следующие харак-
терные особенности:
1. имеет имя на диске, что дает возможность программам работать с
несколькими файлами;
2. длина файла ограничивается только емкостью диска.
Особенностью С является отсутствие в этом языке структурированных файлов. Все
файлы рассматриваются как не структурированная последовательность байтов. При таком
подходе понятие файла распространяется и на различные устройства. Одни и те же функ-
ции используются как для обмена данными с файлами, так и для обмена с устройствами.
Библиотека С поддерживает три уровня ввода-вывода:
- потоковый ввод-вывод;
- ввод-вывод нижнего уровня;
- ввод-вывод для консоли портов (зависит от конкретной ОС).
Рассмотрим потоковый ввод-вывод.
23.1. Потоковый ввод-вывод
На уровне потокового ввода-вывода обмен данными производится побайтно, т. е. за
одно обращение к устройству (файлу) производится считывание или запись фиксирован-
ной порции данных (512 или 1024 байта). При вводе с диска или при считывании из файла
данные помещаются в буфер ОС, а затем побайтно или порциями передаются программе
пользователя. При выводе в файл данные также накапливаются в буфере, а при заполне-
нии буфера записываются в виде единого блока на диск. Буферы ОС реализуются в виде
участков основной памяти. Т .о. поток – это файл вместе с предоставленными средствами
буферизации. Функции библиотеки С, поддерживающие обмен данными на уровне потока
позволяют обрабатывать данные различных размеров и форматов. При работе с потоком
можно:
1. Открывать и закрывать потоки (при этом указатели
на поток связываются с конкретными файлами);
2. Вводить и выводить строки, символы, форматирован-
ные данные, порции данных произвольной длины;
3. Управлять буферизацией потока и размером буфера;
4. Получать и устанавливать указатель текущей пози-
ции в файле.
Прототипы функций ввода-вывода находятся в заголовочном файле <stdio.h>, кото-
рый также содержит определения констант, типов и структур, необходимых для обмена с
потоком.
23.2. Открытие и закрытие потока
Прежде, чем начать работать с потоком, его надо инициировать, т. е. открыть. При
этом поток связывается со структурой предопределенного типа FILE, определение кото-
рой находится в файле <stdio.h>. В структуре находится указатель на буфер, указатель на
текущую позицию и т. п. При открытии потока возвращается указатель на поток, т. е. на
объект типа FILE. Указатель на поток должен быть объявлен следующим образом:
#include <stdio.h>
. . . . . . . .
FILE*f;//указатель на поток
Указатель на поток приобретает значение в результате выполнения функции
открытия потока:
FILE* fopen(const char*filename,const char*mode);
где const char*filename – строка, которая содержит имя файла, связанного с пото-
ком,
const char*mode – строка режимов открытия файла.
Например:
f=fopen(“t.txt”,”r”);
где t.txt – имя файла, r – режим открытия файла.
23. Ввод-вывод в С
Файл – это именованная область внешней памяти. Файл имеет следующие харак-
терные особенности:
1. имеет имя на диске, что дает возможность программам работать с
несколькими файлами;
2. длина файла ограничивается только емкостью диска.
Особенностью С является отсутствие в этом языке структурированных файлов. Все
файлы рассматриваются как не структурированная последовательность байтов. При таком
подходе понятие файла распространяется и на различные устройства. Одни и те же функ-
ции используются как для обмена данными с файлами, так и для обмена с устройствами.
Библиотека С поддерживает три уровня ввода-вывода:
- потоковый ввод-вывод;
- ввод-вывод нижнего уровня;
- ввод-вывод для консоли портов (зависит от конкретной ОС).
Рассмотрим потоковый ввод-вывод.
23.1. Потоковый ввод-вывод
На уровне потокового ввода-вывода обмен данными производится побайтно, т. е. за
одно обращение к устройству (файлу) производится считывание или запись фиксирован-
ной порции данных (512 или 1024 байта). При вводе с диска или при считывании из файла
данные помещаются в буфер ОС, а затем побайтно или порциями передаются программе
пользователя. При выводе в файл данные также накапливаются в буфере, а при заполне-
нии буфера записываются в виде единого блока на диск. Буферы ОС реализуются в виде
участков основной памяти. Т .о. поток – это файл вместе с предоставленными средствами
буферизации. Функции библиотеки С, поддерживающие обмен данными на уровне потока
позволяют обрабатывать данные различных размеров и форматов. При работе с потоком
можно:
1. Открывать и закрывать потоки (при этом указатели
на поток связываются с конкретными файлами);
2. Вводить и выводить строки, символы, форматирован-
ные данные, порции данных произвольной длины;
3. Управлять буферизацией потока и размером буфера;
4. Получать и устанавливать указатель текущей пози-
ции в файле.
Прототипы функций ввода-вывода находятся в заголовочном файле , кото-
рый также содержит определения констант, типов и структур, необходимых для обмена с
потоком.
23.2. Открытие и закрытие потока
Прежде, чем начать работать с потоком, его надо инициировать, т. е. открыть. При
этом поток связывается со структурой предопределенного типа FILE, определение кото-
рой находится в файле . В структуре находится указатель на буфер, указатель на
текущую позицию и т. п. При открытии потока возвращается указатель на поток, т. е. на
объект типа FILE. Указатель на поток должен быть объявлен следующим образом:
#include
........
FILE*f;//указатель на поток
Указатель на поток приобретает значение в результате выполнения функции
открытия потока:
FILE* fopen(const char*filename,const char*mode);
где const char*filename – строка, которая содержит имя файла, связанного с пото-
ком,
const char*mode – строка режимов открытия файла.
Например:
f=fopen(“t.txt”,”r”);
где t.txt – имя файла, r – режим открытия файла.
Страницы
- « первая
- ‹ предыдущая
- …
- 69
- 70
- 71
- 72
- 73
- …
- следующая ›
- последняя »
