Основы программирования на C++, PASCAL
С их помощью можно записывать в файл и читать из файла вещественные числа, массивы, строки, структуры. При этом, как и для ранее рассмотренных функций, сохраняется форма внутреннего представления данных.
Функция записи блока данных имеет прототип
int fread(void*buf, int bytes, int n, FILE*fptr);
Здесь
buf — указатель на адрес данных, записываемых в файл;
bytes — длина в байтах одной единицы записи (блока данных);
n — число блоков, передаваемых в файл;
fptr — указатель на поток.
Если запись выполнилась благополучно, то функция возвращает число записанных блоков (значение n).
Функция чтения блока данных из файла имеет прототип
int fwrite(void*buf, int bytes, int n, FILE*fptr);
По аналогии с предыдущим описанием легко понять смысл параметров.
Пример 4. Следующая программа организует запись блоком в файл строки (символьного массива), а также чтение и вывод на экран записанной информации.
В этой программе поток открывается в режиме w+ (создание для записи с последующим чтением). Поэтому закрывать файл после записи не потребовалось. Новым элементом данной программы по сравнению с предыдущими является использование функции установки указателя потока в заданную позицию. Ее формат:
int fseek(указатель на поток, смещение, начало_отсчета);
Начало отсчета задается одной из констант, определенных в файле stdio.h:
SEEK_SET (имеет значение 0) — начало файла;
SEEK_CUR (имеет значение 1) — текущая позиция;
SEEK_END (имеет значение 2) — конец файла.
Смещение определяет число байт, на которое надо сместить указатель относительно заданного начала отсчета. Смещение может быть как положительным, так и отрицательным числом. Оба параметра имеют тип long.
Форматный обмен с файлами. С помощью функции форматного вывода можно формировать на диске текстовый файл с результатами вычислений, представленными в символьном виде. В дальнейшем этот файл может быть просмотрен на экране, распечатан на принтере, отредактирован с помощью текстового редактора. Общий вид функции форматного вывода:
int fprintf(указатель_на_поток, форматная_строка, список переменных);
Использовавшаяся нами ранее функция printf() для организации вывода на экран является частным вариантом функции fprintf(). Функция printf() работает лишь со стандартным потоком stdin, который всегда связывается системой с дисплеем. Не будет ошибкой, если в программе вместо printf() написать fprintf (stdin,...).