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


         

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


Процедура writedict имеет два параметра, имя входного файла и адрес массива структур dict_elem. Предполагается, что этот список заканчивается первой структурой массива, в которой элемент d_length равен нулю.

{$i dict.inc}

function writedict (const dictname:pchar; elist:pdict_elem):integer;

var

  j:integer;

  outf:pfile;

begin

  (* Открыть входной файл *)

  outf := fopen (dictname, 'w');

  if outf = nil then

  begin

    writedict:=ERROR;

    exit;

  end;

  (* Вычислить размер массива *)

  j:=0;

  while elist[j].d_length <> 0 do

    inc(j);

  (* Записать список структур dict_elem *)

  if fwrite (elist, sizeof (dict_elem), j, outf) < j then

  begin

    fclose (outf);

    writedict:=ERROR;

    exit;

  end;

  fclose (outf);

  writedict:=SUCCESS;

end;

Обратите внимание на использование sizeof(dict_elem) для сообщения процедуре fwrite размера структуры dict_elem в байтах.

Процедура readdict использует процедуру fread для считывания списка структур из файла. Она имеет три параметра: указатель на имя файла словаря indictname, указатель inlist на массив структур dict_elem, в который будет загружен список структур из файла, и размер массива maxlength.

function readdict (const indictname:pchar;inlist:pdict_elem;

                   maxlength:integer):pdict_elem;

var

  i:integer;

  inf:pfile;               

begin

  (* Открыть входной файл *)

  inf := fopen (indictname, 'r');

  if inf = nil then

  begin

    readdict:=nil;

    exit;

  end;

  (* Считать структуры dict_elem из файла *)

  for i:=0 to maxlength - 1 do

    if fread (@inlist[i], sizeof (dict_elem), 1, inf) < 1 then

      break;

  fclose (inf);

  (* Обозначить конец списка *)

  inlist[i].d_length := 0;

  (* Вернуть начало списка *)

  readdict:=inlist;

end;

const

  delem1:array [0..1] of dict_elem=(

    (d_name:('d','n','a','m','e', #0,#0,#0,#0,#0,#0,#0,#0,#0,#0);

     d_start:2; d_length:15; d_type:3),

    (d_name:(#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0)




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