File io 文件创建掩码和umask

File io 文件创建掩码和umask,file-io,umask,File Io,Umask,我在一本书中读到关于文件创建掩码的内容,并发现: 例如,如果掩码的值为04+02+01=07,则权限 通常,每当创建文件时,这些值所指示的值都会被关闭。所以,用 此值实际上是使用以下语句创建的文件: fd open (" /tmp/newfile", O_CREAT, 0644); 实际上会被赋予0640的模式。这意味着文件所有者和成员 与该文件关联的组的成员将能够使用该文件,但其他类型的 用户将被拒绝任何访问 我不明白为什么模式会从0644变为0640。正在创建的文件的权限是什么?传递给*

我在一本书中读到关于文件创建掩码的内容,并发现:

例如,如果掩码的值为04+02+01=07,则权限 通常,每当创建文件时,这些值所指示的值都会被关闭。所以,用 此值实际上是使用以下语句创建的文件:

fd open (" /tmp/newfile", O_CREAT, 0644); 
实际上会被赋予0640的模式。这意味着文件所有者和成员 与该文件关联的组的成员将能够使用该文件,但其他类型的 用户将被拒绝任何访问


我不明白为什么模式会从0644变为0640。正在创建的文件的权限是什么?

传递给
*open()
(称之为
模式
)的值按以下方式修改:

perms = mode & ~umask;
意味着
umask
中设置的每一位都会关闭结果权限中的对应位,无论其是否已设置。在您的特定示例中:

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