Информатика и технология программирования


Стандартная библиотека ввода-вывода


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

В стандартной библиотеке каждый файл представлен структурированной переменной, в которой сосредоточена вся информация об открытом файле: тип файла, идентификатор файла в операционной системе (номер, handle ), буфер на 1 блок (сектор) файла, текущее состояние и способ работы с файлом. Назовем ее описателем или ДЕСКРИПТОРОМ ФАЙЛА. Спецификатор typedef для этой структуры, а также прототипы всех функций ввода-вывода содержатся в заголовочном файле stdio.h, который необходимо включить в текст программы макрокомандой &#35include.


typedef struct {.....} FILE;

При открытии файла функция fopen создает переменную - дескриптор файла и возвращает указатель на нее. Программа должна его запомнить и в дальнейшем использовать при всех обращениях к файлу для его идентификации. Общая схема работы с файлом выглядит следующим образом:


&#35include &#60stdio.h&#62
FILE *fd; // Переменная fd - указатель на дескриптор файла


fd = fopen("aaa.txt","r");
// режим "чтение текстового файла"


// имя файла - строковая константа


// или указатель на строку


// fopen() возвращает указатель на дескриптор файла


// запомнить результат функции


if (fd == NULL)
printf("Файл не открыт\n");
else
{ // Указатель на дескриптор файла


fscanf(fd,....); // при обращении к файлу


fclose(fd); // Закрыть файл


}




Начало  Назад  Вперед



Книжный магазин