Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си_3.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
192 Кб
Скачать

Ввод-вывод записей

Функции Си позволяют обмен данными с файлами последовательной организации, состоящими из записей фиксированной длины. При этом за одно выполнение одной функции ввода-вывода данных записями пересылается одна и более записей. Записи представляются в виде переменной любого типа, кроме файлового. Переменная записи определяется программистом.

При вводе-выводе данных записями надо использовать бинарные режимы доступа в операторах открытия файлов: “wb”, “rb”, “ab+” …

Ввод записей производится функцией fread, вывод – функцией fwrite. Форматных преобразований при пересылке данных не производится.

Ввод записей

Прототип функции fread:

int fread(void* ptr, unsigned size, int k, FILE* stream);

где ptr – указатель переменной любого типа, в которую читается запись;

size – длина записи в байтах;

k – количество считываемых записей размером size;

stream – имя указателя, связанного с файлом для чтения.

Функция fread читает k записей размером size из входного потока stream и помещает их в область памяти, на которую указывает ptr (например, массив или структуру). После этого указатель файла, связанный с потоком stream, увеличивается на количество прочитанных байтов, равное size* k.

Возвращаемое функцией fread значение - количество прочитанных записей, которое может быть и меньше k, если при чтении произошла ошибка или встретился конец файла до того, как были прочитаны k записей.

Для анализа конца файла можно использовать результат, возвращаемый функцией fread:

если результат равен 1, запись считана (например, условие оператора while истинно, продолжается выполнение тела цикла);

если результат равен 0, запись не считана (так как обнаружен, например, конец файла, выполнение цикла завершается);

Вывод записей

Прототип функции fwrite:

int fwrite( const void* ptr, unsigned size, int k, FILE* stream);

где ptr – указатель переменной любого типа, из которой запись выводится в файл (квалификатор const указывает, что переменная не может менять своего значения);

size – длина записи в байтах;

k – количество выводимых записей размером size;

stream – имя указателя, связанного с файлом для записи.

Функция fwrite выводит k записей из переменной, на которую указывает ptr, в файл, связанный с указателем stream. Указатель файла, связанный с потоком stream, увеличивается на количество выведенных байтов, равное size* k.

Возвращаемое функцией fwrite значение - количество записей, реально помещенных в файл. Оно может быть меньше k, если имела место ошибка.

Пример Использование функции fwrite для вывода записями в файл

#include <stdio.h>

FILE*frz;

struct {

char nb;

char ts[5];

} st={'1',"asdfg"};

int main(void)

{

frz=fopen("9.dat","wb");

fwrite(&st,sizeof(st),1,frz);

fclose(frz);

return 0;

}

Пример Использование функций fwrite и fread для вывода записями в файл и чтения записями из файла

#include <stdio.h>

char arr[5];

int main()

{ FILE*frz=fopen("9.dat","wb+");

int rep, count;

for(count='a'; count!='f'; count++)

{

arr[0]=count;

printf("\n%u",arr[0]);

fwrite(arr,sizeof arr,1,frz);}

rewind(frz);

count=0;

do{

rep=fread(arr,sizeof arr,1,frz);

printf("%c",arr[0]);

if (rep<1)

break;

count++;}

while(1);

printf("count=%d",count);

fclose(frz);

return 0;}