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



Описание


uses linux;

Function Access(PathName:Pathstr; AMode:integer):Boolean;

Как мы уже видели, существует несколько режимов доступа к файлу, поэтому параметр amode содержит значение, указывающее на интересующий нас метод доступа. Параметр amode может принимать следующие значения, определенные в модуле linux:

R_OK – имеет ли вызывающий процесс доступ на чтение;

W_ОК – имеет ли вызывающий процесс доступ на запись;

Х_ОК – может ли вызывающий процесс выполнить файл.

Аргумент amode не конкретизирует, к какой категории пользователей относится вопрос, так как вызов access сообщает права доступа к файлу конкретного пользователя, имеющего ruid и rgid текущего процесса. Переменная amode также может принимать значение F_OK, в этом случае проверяется лишь существование файла. Как обычно, параметр pathname задает имя файла.

Значение, возвращаемое вызовом access, либо равно нулю (доступ разрешен) или -1 (доступ не разрешен). В последнем случае переменная linuxerror будет содержать значение кода ошибки. Значение Sys_EACCES, например, означает, что запрошенный режим доступа к файлу не разрешен, а значение Sys_ENOENT показывает, что указанного файла просто не существует.

Следующий пример программы использует вызов access для проверки, разрешено ли пользователю чтение файла при любом значении бита STAT_ISUID исполняемого файла этой программы:

(* Пример использования вызова access *)

uses linux,stdio;

const

  filename = 'afile';

 

begin

  if not access (filename, R_OK) then

  begin

    writeln(stderr, 'Пользователь не имеет доступа на чтение к файлу ', filename);

    halt(1);

  end;

  writeln(filename, ' доступен для чтения, продолжаем');

  (* Остальная программа *)

end.

Упражнение 3.6. Напишите программу whatable, которая будет сообщать, можете ли вы выполнять чтение, запись или выполнение заданного файла. Если доступ невозможен, программа whatable должна сообщать почему (используйте коды, ошибок, возвращаемых в переменной linuxerror).




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