0

我在一本书中阅读了有关文件创建掩码的内容,并遇到了这个问题:

例如,如果掩码的值为 04+02+01=07,那么每当创建文件时,通常由这些值指示的权限将被关闭。因此,在此值生效的情况下,使用以下语句创建的文件:

fd open (" /tmp/newfile", O_CREAT, 0644); 

实际上将被赋予 0640 模式。这意味着文件所有者和与文件关联的组的成员将能够使用该文件,但其他类型的用户将被拒绝任何访问。

我无法理解为什么模式会从 0644 更改为 0640。正在创建的文件的权限是什么?

4

1 回答 1

1

您传递给*open()(调用它mode)的值以这种方式修改:

perms = mode & ~umask;

这意味着设置中的每个位都会umask关闭结果权限中的相应位,无论它是否已设置。在您的特定示例中:

0644       = 0b110100100
  07       = 0b000000111
 ~07       = 0b111111000
0644 & ~07 = 0b110100000 = 0640
于 2013-10-29T17:58:26.393 回答