запрещает присваивание файлу прав доступа
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;