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


           

типа данных, основанный на использовании




Из того, что функции fread,fwrite копируют данные из памяти в файл без преобразования, "байт в байт", следует естественный способ сохранения в файле переменной любого
типа данных, основанный на использовании операции sizeof для определения ее размерности:

long a; // Записать в файл переменную типа long,

fseek (fd, 20L, SEEK_SET); // начиная с позиции 20

fwrite (&#38a, sizeof(long),1,fd);
struct man b; // Добавить в файл переменную типа man

fseek (fd,0L,SEEK_END);
fwrite (&#38b, sizeof b,1,fd);
double *pd; // Прочитать с начала файла динамический

pd = new double[n]; // массив в n переменных типа double

fseek(fd,0L,SEEK_SET); //

fread((void*)pd, sizeof(double),n,fd);



Номер байта (позицию) в файле, начиная с которого размещается переменная в дальнейшем будем называть также СМЕЩЕНИЕМ или АДРЕСОМ этой переменной в файле.

fseek(fd,20L,SEEK_SET);
fwrite((void*)&#38a, sizeof(long),1,fd);

Нетрудно заметить, что в
управлении внутренней памятью (переменные, память программы) и внешней памятью (файлы) много общего. Используя возможности адресной арифметики и преобразования типов указателей, можно произвольным образом планировать память программы, размещая в ней различные переменные (см. 4.5). Аналогичная "свобода выбора" имеет место и при работе с файлами: программист имеет право произвольным образом строить в файле любые структуры данных подобно тому, как он это делает в памяти. Но с небольшой разницей: если в памяти программы структуры данных можно организовать используя обычные переменные языка, динамические переменные, указатели и стандартные операции над ними, то при работе с файлом программист всего этого лишен. Он не может присвоить имя переменной в файле и пользоваться им, он не может выполнить над ней никаких операций, кроме как прочитав ее в память программы в переменную такого же типа. Короче говоря, программа вынуждена работать со структурами данных в файле на уровне физических адресов, не имея соответствующей поддержки транслятора.


Содержание  Назад  Вперед