Системное программирование в UNIX средствами Free Pascal


              

Описание - часть 3


     d_start:0; d_length:0; d_type:0)

  );

var

  delem2:array [0..1] of dict_elem;

begin

  printf ('delem1: d_name=%s, d_start=%d, d_length=%d, d_type=%d'#$a,

         [pchar(delem1[0].d_name), delem1[0].d_start, delem1[0].d_length,

         delem1[0].d_type]);

  writedict ('dictionary', @delem1[0]);

  if readdict ('dictionary', @delem2[0], 2)<>nil then

    printf ('delem2: d_name=%s, d_start=%d, d_length=%d, d_type=%d'#$a,

         [pchar(delem2[0].d_name), delem2[0].d_start, delem2[0].d_length,

         delem2[0].d_type]);

end.

И снова обратите внимание на приведение типа и использование конструкции sizeof.

Необходимо сделать важную оговорку. Бинарные данные, записываемые в файл при помощи процедуры fwrite, отражают внутреннее представление данных в системной памяти. Так как это представление зависит от архитектуры компьютера и различается порядком байтов в слове и выравниванием слов, то данные, записанные на одном компьютере, могут не читаться на другом, если не предпринять специальные усилия для того, чтобы они были записаны в машинно-независимом формате. По тем же причинам почти всегда бессмысленно выводить значения адресов и указателей.

И последний момент: можно было бы получить практически тот же результат, напрямую используя вызовы fdread или fdwrite, например:

fdwrite(fd, ptr, sizeof(dict_elem));

Основное преимущество версии, основанной на стандартной библиотеке ввода/вывода, снова заключается в ее лучшей эффективности. Данные при этом будут читаться и записываться большими блоками, независимо от размера структуры dict_elem.

Упражнение 11.6. Представленные версии процедур writedict и readdict работают с файлами словаря, которые могут содержать только один тип записей. Измените их так, чтобы в одном файле можно было хранить информацию о нескольких типах записей. Другими словами, нужно, чтобы файл словаря мог содержать несколько независимых именованных списков структур dict_elem. (Совет: включите в начало файла «заголовок»; содержащий информацию о числе записей и типе полей.)




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