如果我想对新创建的文件使用特定的Linux/Unix权限,如何计算要使用的umask值?

voj3qocg  于 7个月前  发布在  Unix
关注(0)|答案(2)|浏览(72)

如果我想让新创建的文件的Linux/Unix权限为任意值xyz,我该如何计算umask的绝对值?
我知道如何确定如果我使用umask的特定绝对值,系统最终将获得哪些文件权限。例如,如果系统默认文件权限值为666,而我应用umask绝对值022,则新创建的文件的权限值为644(通过与NOT(022)和666进行AND计算)。
但是逆问题呢?
在我看来,确定必须使用什么umask绝对值来获取新创建文件的特定权限值的唯一方法是创建一个表。一列将包含所有可能的umask值(所以是一个大表!),第二列将包含它们对应的新文件权限值(对于任何给定的系统默认文件权限值)。
我说的对吗?

wydwbb8l

wydwbb8l1#

required_umask = ~expected_mode & ~111(或& 666)应该可以做到这一点(仅对于文件,目录不以0666开头,而是以0777开头)

~644 & ~111
=  133 &  666
=  022
~666 & ~111
=  111 &  666
=  000
~400 & ~111
=  377 &  666
=  266

如果构建一个表,它不会太大。对于文件,只有4**3 = 64个不同的umask值(000,002,004,006,020,022,024,026,040,042,.).即使你考虑每个数字的所有8个可能的值,它“只有”512个条目(对人类来说不方便,但不是真的那么大)。

rjjhvcjd

rjjhvcjd2#

作为一个程序员,你 * 不 * 设置umask。那是 * 用户的 * 文件权限掩码。
只需在open()调用中使用您认为合适的权限,然后用户就可以根据需要设置umask来屏蔽不需要的权限。

相关问题