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


         

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


в конце аргумента, передаваемого процедуре fopen. Вышеприведенные режимы можно дополнить следующим образом:

r+

Открыть файл filename для чтения и записи. Если файл не существует, то вызов снова завершится неудачей

w+

Создать файл filename и открыть его для чтения и записи. (Если файл уже существует, то он будет усечен до нулевой длины)

а+

Открыть файл filename для чтения и записи. При записи данные будут добавляться в конец файла. Если файл не существует, то он создается

В некоторых системах для доступа к двоичным, а не текстовым файлам, к строке также нужно добавлять символ b, например, rb.

Если файл создается при помощи процедуры fopen, для него обычно устанавливается код доступа octal(0666). Это позволяет всем пользователям выполнять чтение из файла и запись в него. Эти права доступа по умолчанию могут быть изменены установкой ненулевого значения атрибута процесса umask. (Системный вызов umask был изучен в главе 3.)

Следующий пример программы показывает использование процедуры fopen и ее связь с процедурой fclose. При этом, если файл indata существует, то он открывается для чтения, а файл outdata создается (или усекается до нулевой длины, если он существует). Процедура fatal предназначена для вывода сообщения об ошибке, ее описание было представлено в предыдущих главах. Она просто передает свой аргумент процедуре perror, а затем вызывает halt для завершения работы программы.

uses stdio;

const

  inname:pchar = 'indata';

  outname:pchar = 'outdata';

function fatal(s:pchar):integer;

begin

  perror (s);

  halt (1);

end;

var

  inf,outf:pfile;

begin

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

  if inf = nil then

    fatal ('Невозможно открыть входной файл');

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

  if outf = nil then

    fatal ('Невозможно открыть выходной файл');

  (* Выполняются какие-либо действия ... *)

  fclose (inf);

  fclose (outf);

  halt (0);

end.

На самом деле, в данном случае оба вызова fсlose не нужны. Дескрипторы, связанные с файлами inf и outf, будут автоматически закрыты при завершении работы процесса, и вызов halt автоматически сбросит данные из буфера указателя outf на диск, записав их в файл outdata.

С процедурой fclose тесно связана процедура fflush:




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