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


         

И снова обратите внимание на


     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. (Совет: включите в начало файла «заголовок»; содержащий информацию о числе записей и типе полей.)

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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий