如果我想让新创建的文件的Linux/Unix权限为任意值xyz,我该如何计算umask的绝对值?
我知道如何确定如果我使用umask的特定绝对值,系统最终将获得哪些文件权限。例如,如果系统默认文件权限值为666,而我应用umask绝对值022,则新创建的文件的权限值为644(通过与NOT(022)和666进行AND计算)。
但是逆问题呢?
在我看来,确定必须使用什么umask绝对值来获取新创建文件的特定权限值的唯一方法是创建一个表。一列将包含所有可能的umask值(所以是一个大表!),第二列将包含它们对应的新文件权限值(对于任何给定的系统默认文件权限值)。
我说的对吗?
2条答案
按热度按时间wydwbb8l1#
required_umask = ~expected_mode & ~111
(或& 666
)应该可以做到这一点(仅对于文件,目录不以0666开头,而是以0777开头)如果构建一个表,它不会太大。对于文件,只有
4**3 = 64
个不同的umask值(000,002,004,006,020,022,024,026,040,042,.).即使你考虑每个数字的所有8个可能的值,它“只有”512个条目(对人类来说不方便,但不是真的那么大)。rjjhvcjd2#
作为一个程序员,你 * 不 * 设置umask。那是 * 用户的 * 文件权限掩码。
只需在
open()
调用中使用您认为合适的权限,然后用户就可以根据需要设置umask来屏蔽不需要的权限。