umask 设置文件权限掩码

我们在创建文件或者目录时,看到的权限往往和我们设置的不一样,原因就在于创建文件时要受到 umask的影响。


目录

一、实际情景介绍

二、文件权限掩码

1、什么是权限掩码?

2、权限掩码的作用过程

3、设置权限掩码的两种方式

(1) umask 命令设置权限掩码

(2) umask 函数设置权限掩码


一、实际情景介绍

使用open系统函数以写的方式打开一个文件(文件不存在则直接创建),此时OS就会帮我们创建出一个文件,初始赋予的权限是 0666(创建者、组、其他都具有读写权限)

// O_WRONLY: 以只写的形式打开文件
// O_CREAT: 如果文件不存在,则直接创建
// 0666: 设置文件的初始权限,0666由八进制转二进制就是110 110 110,
//       即创建者、组、其他都具有读写权限
open("./log", O_WRONLY | O_CREAT, 0666);

但是实际创建出来的文件权限如下,实际文件的权限是 0644,这是因为受到了文件权限掩码的影响。(详见下面 “权限掩码的作用过程” )

二、文件权限掩码

1、什么是权限掩码?

文件权限掩码是 OS不希望某些成员具备的权限,即便设置了也不会生效。普通用户的权限掩码是 0002,超级用户的权限掩码是0022。

超级用户的权限掩码转化为二进制就是000 010 010(--- -w- -w-),也就是说无论你怎么设置权限,最终组或者其他成员都不会具备 “ 写权限 ”。

2、权限掩码的作用过程

假设设置的权限是 mask,权限掩码是 umask,既然umask表示要剔除的权限,那么 ~umask 就表示要保留的权限,那么最终得到的权限就是

mask & (~umask)

假设mask = 0666,当前用户的权限掩码是 0022,那么就有

mask & (~umask) = 110 110 110 & (~000 010 010)

                             = 110 110 110 & 111 101 101

                             = 110 100 100

因此,最终文件权限是 110 100 100,转换成八进制就是0644.

3、设置权限掩码的两种方式

(1) umask 命令设置权限掩码

umask命令的格式如下:

umask   [ 权限掩码 ]

直接输入 umask 指令可以查看当前用户的默认权限掩码

umask xxx 代表将默认权限掩码改为 xxx

 

(2) umask 函数设置权限掩码

umask函数的声明如下:

umask函数的参数也是权限掩码,成功返回之前的权限掩码,失败返回一个小于0的值。

比如我们将权限掩码设为0

if(umask(0) < 0)
{
    perror("umask");
    exit(-1);
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值