UMASK - Linux手册页

时间:2019-08-20 17:59:35  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2020-08-13

名称

umask-设置文件模式创建掩码

语法

#包括
#包括

mode_t umask(mode_t mask);

说明

umask()将调用过程的文件模式创建掩码(umask)设置为mask&0777(即,仅使用mask的文件许可权位),并返回mask的先前值。

打开(2),mkdir(2)和其他创建文件的系统调用使用umask来修改对新创建的文件或目录的权限。具体来说,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的效果与模式参数0666(rw-rw-rw-)结合在一起,得到的文件许可权将为0644(rw-r--r--)。

inode(7)中描述了用于指定掩码的常量。

进程umask的典型默认值为S_IWGRP S_IWOTH(八进制022)。在通常情况下,将open(2)的mode参数指定为:

S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH

(八进制0666)创建新文件时,对结果文件的权限为:

S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH

(因为0666&ti022 = 0644;即rw-r--r--)。

返回值

此系统调用总是成功,并且返回掩码的先前值。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.3BSD。

备注

通过fork(2)创建的子进程继承其父级的umask。 execve(2)使umask保持不变。

使用umask()来获取进程的umask而不更改它是不可能的。然后需要再次调用umask()来恢复umask。这两个步骤的非原子性为多线程程序中的竞争提供了可能。

从Linux 4.7开始,可以通过/ proc / [pid] / status的Umask字段查看任何进程的umask。在/ proc / self / status中检查此字段可以使进程检索其Umask,而无需同时对其进行更改。

umask设置还会影响分配给POSIX IPC对象(mq_open(3),sem_open(3),shm_open(3)),FIFO(mkfifo(3))和UNIX域套接字(unix(7))的权限。处理。 umask不会影响分配给该进程创建的System V IPC对象的权限(使用msgget(2),semget(2),shmget(2))。

另外参见

chmod(2),mkdir(2),open(2),stat(2),acl(5)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/