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

       

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


Стандартная библиотека ввода-вывода (stdio) имеет функции, работающие как с символами, так и со строками. Если функция имеет в качестве параметра символ , то это функция посимвольного ввода, если массив символов, то строчного. Заметим, что символ конца строки в построчном вводе ( \0) формируется функцией ввода, обычно в последовательности символьном потоке для ограничения строки используется символ \n " перевод строки" . Кроме того, построчный ввод иногда бывает форматным, то есть вводит символы строки до первого ограничителя (пробела, запятой, точки и т.п..).


&#35 include &#60stdio.h&#62
void my_gets(char s[]) // Собственная функция gets(char s[])


{
int i;
char c;
for (i=0; i &#60 79 &#38&#38 (c=getchar()) !=EOF &#38&#38 c !='\n'; i++)
s[i] = c;
s[i]='\0';
}
&#35include &#60iostream.h&#62
char c,s[80];
void main() // Пример использования объектов потокового ввода


{
cin &#62&#62 c; // Посимвольный ввод


cin &#62&#62 s; // Построчный форматированный ввод


cin.getline(s,80); // Построчный неформатируемый ввод


}


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



В стандартной библиотеке каждый файл представлен структурированной переменной, в которой сосредоточена вся информация об открытом файле: тип файла, идентификатор файла в операционной системе (номер, 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); // Закрыть файл


}



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