При выполнении операций чтения - записи в файле требуется иногда перемещать указатель текущей позиции файла, например, при переходе от чтения к записи или наоборот (когда файл открыт в комбинированных режимах). Для перемещения указателя существуют специальные функции.
Функция для установки указателя текущей позиции в заданное положение:
int fseek(FILE * stream, long offset, int fromwhere);
параметры: stream – указатель на структуру FILE, offset – смещение в байтах указателя текущей позиции от позиции, заданной следующим параметром, fromwhere – возможные значения заданы константами: SEEK_SET – начало файла, SEEK_CUR – текущее положение указателя, SEEK_END – конец файла. Возвращаемое значение: 0, если функция нормально завершает свою работу, не 0 – в случае ошибки.
Функция для установки указателя текущей позиции в начало файла:
void rewind(FILE * stream);
параметр stream – указатель на структуру FILE.
Функция для получения текущего положения указателя позиции файла (смещение в байтах от начала файла):
long ftell(FILE * stream);
параметр stream – указатель на структуру FILE, функция возвращает текущее положение указателя.
Иногда требуется явно проводить сброс буфера ввода- вывода. В частности, эта операция обязательна при переходе от операции записи к операции чтения (при открытии файла в комбинированном режиме), чтобы записанные данные гарантированно оказались записаны в файле.
Функция сброса заданного буфера ввода- вывода:
int fflush(FILE * stream);
параметр stream – указатель на структуру FILE, функция возвращает 0 – в случае нормального завершения и EOF – в случае ошибки.
Функция сброса всех буферов ввода- вывода:
int flushall();
функция возвращает количество открытых потоков (входных и выходных), в случае ошибки возвращаемое значение не определено.
Далее приведены следующие примеры: запись двухмерного массива, созданного динамически, в файл в текстовом режиме; чтение этого массива из файла; запись массива структур в файл в двоичном режиме; чтение массива структур из файла в двоичном режиме.
Пример 1.
#include <stdio.h>
#include <stdlib.h>
void main()
{
// Программа создает двухмерный массив (матрицу) и