文件创建掩码和umask

时间:2013-10-29 17:09:23

标签: file-io umask

我正在阅读一本书中的文件创建掩码,并且发现了这个:

  

例如,如果掩码的值是04 + 02 + 01 = 07那么权限   每当创建文件时,通常由这些值指示的都将被关闭。所以,随着   该值有效,使用语句创建的文件:

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

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

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

1 个答案:

答案 0 :(得分:1)

您传递给*open()的值(称之为mode)会以这种方式修改:

perms = mode & ~umask;

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

0644       = 0b110100100
  07       = 0b000000111
 ~07       = 0b111111000
0644 & ~07 = 0b110100000 = 0640