Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
101
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
      1. Двоичный поток

Двоичный поток – это последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве. При этом никаких преобразований символов не происходит, и нет символов, играющих особую роль. Количество символов, которые записываются (читаются), и тех символов, которые находятся на внешнем устройстве одинаково.

    1. Файлы

В языке Си файлом может быть все что угодно, начиная от диского файла и кончая терминалом или принтером. Поток связывается с определенным файлом при выполнении операции открытия. Как только файл будет открыт, можно осуществлять обмен данными между ним и программой.

Связь между файлом и программой разрывается в результате выполнения операции закрытия. При закрытии файла, открытого для вывода, содержимое (если оно есть) связанного с ним потока записывается на внешнее устройство. Этот процесс, который называется дозаписью потока гарантирует, что никакие данные не останутся в буфере.

Если работа программы завершается нормально, то все файлы автоматически закрываются. В случае аварийного завершения работы программы файлы автоматически не закрываются.

      1. Указатель файла

У каждого потока, связанного с файлом, имеется структура, содержащая информацию о файле. Эта структура имеет тип FILE. Этот тип объявлен в заголовочном файлеstdio.h. Для каждого файла, с которым она будет работать, должен существовать так называемый указатель файла. Указатель файла – указатель на структуру типаFILE.

Указатель файла определяет конкретный файл и используется связанным с ним потоком при выполнении операций ввода – вывода.

      1. Функция fopen()

Объявление этой функции имеет следующий вид.

#include<stdio.h>

FILE* fopen(const char* filename, const char* mode);

Эта функция открывает поток и связывает с ним определенный файл. Первый параметр (filename) рассматриваемой функции определяет открываемый файл. Второй параметр функции (mode) задает режим, в котором должен быть открыт файл.

В случае успеха функция вернет указатель типа FILE* на созданную структуру данных. Этот указатель может использоваться файловыми функциями для выполнения операций ввода – вывода. В случае возникновения ошибки функция fopen() вернет нулевой указатель.

В следующем фрагменте программного кода функция используется для открытия файла с именем file1.txt в режиме записи. Предполагается, что файл находится в текущем каталоге (иначе необходимо указывать путь к каталогу). Во фрагменте используется обычный прием, который состоит в проверке значения, возвращаемого функцией fopen().

FILE* fp; if((fp = fopen(“file1.txt”, “w”)) == NULL) { printf(“Не могу открыть файл file1.txt”); exit(1); }

Возможные режимы открытия потоков представлены в приводимой ниже таблице

Режим

Пояснение

r

Открыть текстовый поток и связать его с существующим файлом

w

Открыть текстовый поток и связать его с вновь созданным файлом

a

Открыть текстовый файл в режиме дозаписи. Если файл еще не существует, то он будет создан.

rb, wb и ab

Отличаются соответственно от режимов r, w и a только тем, что открывают двоичный поток.

r+, w+ и a+

Отличаются соответственно от режимов r, w и a только тем, что поток открывается в режиме чтения / записи.

r+b, w+b и a+b

Отличаются соответственно от режимов rb, wb и ab только тем, что поток открываются в режиме чтения / записи.