将进程的 umask 设置为 EXPR 并返回前一个值。如果省略 EXPR,则仅返回当前 umask。
Unix 权限 rwxr-x---
表示为三组三位二进制位,或三个八进制数字:0750
(前导 0 表示八进制,不是数字之一)。umask
值是一个表示已禁用权限位的数字。传递给 mkdir
或 sysopen
的权限(或“模式”)值会因你的 umask 而改变,因此,即使你告诉 sysopen
以 0777
权限创建文件,如果你的 umask 是 0022
,则该文件实际上将以 0755
权限创建。如果你的 umask
是 0027
(组不能写入;其他人不能读取、写入或执行),则传递 sysopen
0666
将创建一个模式为 0640
的文件(因为 0666 &~ 027
是 0640
)。
这里有一些建议:为常规文件(在 sysopen
中)提供 0666
的创建模式,为目录(在 mkdir
中)和可执行文件提供 0777
的创建模式。这给了用户选择自由:如果他们想要受保护的文件,他们可以选择 022
、027
甚至特别反社会的 077
进程 umask。程序很少(如果不是永远)做出最好留给用户做的策略决策。例外情况是写入应保持私密的文件:邮件文件、Web 浏览器 cookie、.rhosts 文件等。
如果你的系统上未实现 umask(2),并且你正在尝试限制对 你自己 的访问(即 (EXPR & 0700) > 0
),则引发异常。如果未实现 umask(2),并且你没有尝试限制对自己的访问,则返回 undef
。
记住,umask 是一个数字,通常以八进制形式给出;它不是八进制数字的字符串。另请参见 oct
,如果你只有字符串。
可移植性问题:perlport 中的“umask”。