Стандартная библиотека ввода-вывода
Стандартная библиотека ввода-вывода (stdio) имеет функции, работающие как с символами, так и со строками. Если функция имеет в качестве параметра символ , то это функция посимвольного ввода, если массив символов, то строчного. Заметим, что символ конца строки в построчном вводе ( \0) формируется функцией ввода, обычно в последовательности символьном потоке для ограничения строки используется символ \n " перевод строки" . Кроме того, построчный ввод иногда бывает форматным, то есть вводит символы строки до первого ограничителя (пробела, запятой, точки и т.п..).
# include <stdio.h>
void my_gets(char s[]) // Собственная функция gets(char s[])
{
int i;
char c;
for (i=0; i < 79 && (c=getchar()) !=EOF && c !='\n'; i++)
s[i] = c;
s[i]='\0';
}
#include <iostream.h>
char c,s[80];
void main() // Пример использования объектов потокового ввода
{
cin >> c; // Посимвольный ввод
cin >> s; // Построчный форматированный ввод
cin.getline(s,80); // Построчный неформатируемый ввод
}
Стандартная библиотека ввода-вывода является стандартной чисто исторически (поскольку все библиотечные функции в Си являются внешними и не "встроены" в транслятор). Стандартная библиотека создает некоторую общую "точку зрения" на файл со стороны программы, которая, в принципе, не должна зависеть от каких бы там ни было особенностей операционной системы по работе с файлами, ни от особенностей устройств ввода-вывода. Стандартная библиотека делит файлы на текстовые и двоичные. При вводе-выводе текстовых файлов производятся некоторые действия с учетом различий представления строк текста в памяти, в файле, вводе с клавиатуры и выводе на экран. Двоичный файл представляется как упорядоченный неограниченный массив байтов с возможностью чтения и записи любой части этого массива в память по заданному адресу (указателю).
В стандартной библиотеке каждый файл представлен структурированной переменной, в которой сосредоточена вся информация об открытом файле: тип файла, идентификатор файла в операционной системе (номер, handle ), буфер на 1 блок (сектор) файла, текущее состояние и способ работы с файлом. Назовем ее описателем или ДЕСКРИПТОРОМ ФАЙЛА. Спецификатор typedef для этой структуры, а также прототипы всех функций ввода-вывода содержатся в заголовочном файле stdio.h, который необходимо включить в текст программы макрокомандой #include.
typedef struct {.....} FILE;
При открытии файла функция fopen создает переменную - дескриптор файла и возвращает указатель на нее. Программа должна его запомнить и в дальнейшем использовать при всех обращениях к файлу для его идентификации. Общая схема работы с файлом выглядит следующим образом:
#include <stdio.h>
FILE *fd; // Переменная fd - указатель на дескриптор файла
fd = fopen("aaa.txt","r");
// режим "чтение текстового файла"
// имя файла - строковая константа
// или указатель на строку
// fopen() возвращает указатель на дескриптор файла
// запомнить результат функции
if (fd == NULL)
printf("Файл не открыт\n");
else
{ // Указатель на дескриптор файла
fscanf(fd,....); // при обращении к файлу
fclose(fd); // Закрыть файл
}