Системное программирование в 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;

Содержание раздела