Основы языка С++. Викентьева О.Л. - 71 стр.

UptoLike

Составители: 

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 – режим открытия файла.