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



         

Описание


uses linux;

Function Umask(Mask:Integer):Integer;

Например:

var

  oldmask:integer;

.

.

.

oldmask := umask(octal(022));

Значение octal(022) запрещает присваивание файлу прав доступа на запись всем, кроме владельца файла. После вызова в переменную oldmask будет помещено предыдущее значение маски.

Поэтому, если вы хотите быть абсолютно уверены, что файлы создаются именно с кодами доступа, заданными в вызовах fdcreat или fdopen, вам следует вначале вызвать umask с нулевым аргументом. Так как все биты в маске создания файла будут равны нулю, ни один из битов в коде доступа, передаваемом вызовам fdopen или fdcreat, не будет сброшен. В следующем примере этот подход используется для создания файла с заданным кодом доступа, а затем восстанавливается старая маска создания файла. Программа возвращает дескриптор файла, полученный в результате вызова fdopen.

uses linux,stdio;

function specialcreat(pathname:string;mode:longint):integer;

var

  oldu,filedes:integer;

begin

  (* Установить маску создания файла равной нулю *)

  oldu:=umask(0);

  if oldu = -1 then

  begin

    perror('Ошибка сохранения старой маски');

    specialcreat:=-1;

    exit;

  end;

  (* Создать файл *)

  filedes:=fdopen(pathname, Open_WRONLY or Open_CREAT or Open_EXCL, mode);

  if (filedes = -1) then

    perror ('Ошибка открытия файла');

  (* Восстановить прежний режим доступа к файлу *)

  if (umask (oldu) = -1) then

    perror ('Ошибка восстановления старой маски');

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

  specialcreat:=filedes;

end;




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