umask(2) устанавливает маску создания режима доступа к файлу

ОБЗОР

#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)).