ОБЗОР
#include <sys/types.h>
#include <sys/stat.h>
mode_t umask(mode_t mask);
ОПИСАНИЕ
umask() устанавливает в вызывающем процессе значение маски (umask)
создания режима доступа к файлу равным mask & 0777 (т.е. из mask
используются только биты прав доступа к файлу) и возвращает предыдущее
значение маски.
Значение umask используется в open(2), mkdir(2) и других системных вызовах, которые создают файлы, для изменения прав, назначаемых на создаваемые файлы или каталоги. В частности, права в umask исключаются из аргумента mode у вызовов open(2) и mkdir(2).
Также, если у родительского каталога указан ACL по умолчанию (смотрите acl(5)), то umask игнорируется, выполняется наследование ACL по умолчанию, бита прав назначаются согласно унаследованному ACL, а биты прав, отсутствующие в аргументе mode, выключаются. Например, следующий ACL по умолчанию эквивалентен umask 022:
u::rwx,g::r-x,o::r-x
Объединение эффекта этого ACL по умолчанию с аргументом mode 0666 (rw-rw-rw-) приводит установке прав на файл 0644 (rw-r--r--).
Константы, которые нужно использовать для указания в mask, описаны в stat(2).
Типичным значением umask в процессе является S_IWGRP | S_IWOTH (восьмеричное 022). Обычно, когда аргумент mode у open(2) задаётся как:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH(восьмеричное 0666) при создании файла, права получившегося файла будут:
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH(так как 0666 & ~022 = 0644; т.е., rw-r--r--).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Данный системный вызов всегда выполняется успешно и возвращает предыдущее
значение маски.
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
ЗАМЕЧАНИЯ
Дочерний процесс, созданный с помощью fork(2), наследует umask
родителя. Значение umask не изменяется при вызове execve(2).
Настройка umask также влияет на права, назначаемые IPC-объектам POSIX (mq_open(3), sem_open(3), shm_open(3)), FIFO (mkfifo(3)) и доменным сокетам UNIX (unix(7)), создаваемых процессом. Значение umask не влияет на права, назначаемые IPC-объектам System V, создаваемых процессом (с помощью msgget(2), semget(2), shmget(2)).