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


         

Наиболее простыми из процедур стандартной


uses stdio;
function getc(inf:pfile):integer;
function putc(c:integer; outf:pfile):integer;
Наиболее простыми из процедур стандартной библиотеки ввода/вывода являются процедуры getc и putc. Процедура getc возвращает очередной символ из входного потока inf. Процедура putc помещает символ, обозначенный параметром с, в выходной поток outf.
В обеих процедурах символ с имеет тип integer, а не char, что позволяет процедурам использовать наборы 16-битовых «широких» символов. Это также позволяет процедуре getc возвращать значение –1, находящееся вне диапазона возможных значений типа char. Постоянная EOF используется процедурой getc для обозначения того, что либо достигнут конец файла, либо произошла ошибка. Процедура putc также может возвращать значение EOF в случае ошибки.
Следующий пример является новой версией процедуры
copyfile, представленной в главе 2; в данном случае вместо использования вызовов
fdread и fdwrite используются процедуры getc и putc:
uses stdio;
(* Скопировать файл f1 в файл f2
 * при помощи стандартных процедур ввода/вывода
 *)
function copyfile(const f1, f2:pchar):integer;
var
  inf, outf:pfile;
  c:longint;
begin
  inf := fopen (f1, 'r');
  if inf = nil then
  begin
    copyfile:=-1;
    exit;
  end;
  outf := fopen (f2, 'w');
  if outf = nil then
  begin
    fclose (inf);
    copyfile:=-2;
    exit;
  end;
  c := getc (inf);
  while c <> EOF do
  begin
    putc (c, outf);
    c := getc (inf);
  end;
  fclose (inf);
  fclose (outf);
  copyfile:=0;
end;
Копирование выполняет внутренний цикл while. Снова обратите внимание на то, что переменная с
имеет тип longint, а не char.
Упражнение 11.1. В упражнениях 2.4 и 2.5 мы описали программу count, которая выводит число символов, слов и строк во входном файле. (Напомним, что слово определялось, как любая последовательность алфавитно-цифровых символов или одиночный пробельный символ.) Перепишите программу count, используя процедуру getc.
Упражнение 11.2. Используя процедуру getс, напишите программу, выводящую статистику распределения символов в файле, то есть число раз, которое встречается в файле каждый символ. Один из способов сделать это состоит в использовании массива целых чисел типа long, который будет содержать счетчики числа символов, а затем рассматривать значение каждого символа в качестве индекса увеличиваемого счетчика массива. Программа также должна рисовать простую гистограмму полученного распределения при помощи процедур printf и putc.

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