Основы программирования на языке C

Связь с файлами


Один способ организации связи программы с файлом заключается в использовании операций переключения < и >. Этот метод прост, но ограничен. Язык Си предоставляет и более мощные методы связи с файлами. Рассмотрим использование функции fopen( ), которая открывает файл, затем применяются специальные функции ввода-вывода для чтения файла или записи в этот файл и далее используется функция fclose( ) для закрытия файла. Прежде чем исследовать эти функции, кратко познакомимся с сущностью файла.

Файл является частью памяти, обычно на диске, со своим именем. Мы считаем, что он содержит некоторую полезную информацию. Для операционной системы файл более сложен, но это системные проблемы, а не наши. Но мы должны знать, что означает файл для программы на языке Си. В предлагаемых для обсуждения функциях, работающих с файлами, язык Си рассматривает файл как структуру. Вот типичный пример, взятый из IBM-версии компилятора Lattice C:

struct_iobuf { char*_ptr; /* текущий указатель буфера*/ int_cnt; /* текущий счетчик байтов*/ char*_base; /* базовый адрес буфера ввода-вывода*/ char_flag; /* управляющий признак*/ char_file; /* номер файла*/ } #define FILE struct_iobuf /* краткая запись*/

Здесь мы не собираемся разбираться детально в этом определении. Главное состоит в том, что файл является структурой, и что краткое наименование шаблона - FILE. Многие системы используют директиву typedef для установления этого соответствия. Таким образом, программа, имеющая дело с файлами, будет использовать тип структуры FILE, чтобы делать так.

Рассмотрим пример чтения содержимого файла, названного File, и вывода его на экран:

#include <stdio.h> main( ) { FILE *in; /* описываем указатель на файл */ int ch; if ((in = fopen("File", "r") ) != NULL) { /* открываем File для чтения, проверяя существует ли он */ /* указатель FILE ссылается теперь на File */ while ((ch = getc(in) != EOF)) /* получаем символ из in */ putc(ch, stdout); /* посылаем ch на стандартный вывод*/ fclose(in); /* закрываем фаил */ } else printf (" Файл не открывается\"File\".\n); }

Объясним работу: fopen( ), fclose и использование функций ввода-вывода файла.



Содержание раздела