4.8 umask函数-文件模式创建屏蔽字修改

umask函数用于为进程设置文件模式创建屏蔽字,并返回以前的值。函数原型如下:

#include <sys/stat.h>
mode_t umask(mode_t cmask);

每个进程都有一个文件模式创建屏蔽字,用于对新创建的文件或新目录的权限进行控制。

文件模式创建屏蔽字是进程的一个属性,其数据类型是mode_t。是S_IRUSR和S_IWUSR等常量的组合。不过意义却与这些常量相反:文件模式创建屏蔽字与S_IRUSR等对应的位为1,则关闭这些权限。

以creat函数为例,假设当前进程的文件模式创建屏蔽字(mode_mask)为0100(八进制,等于 S_IXUSR),以文件创建模式字(mode_creat)0700(八进制,等于S_IRUSR | S_IWUSR | S_IXUSR)调用creat函数:

    creat(&mypath,mode_creat)

那么,创建出来的新文件mypath实际权限是0600(八进制,等于S_IRUSR | S_IWUSR)

也就是说,指定的执行权被取消了。

从位运算规则来看,新文件的实际权限是传递给创建函数的创建模式字与文件创建模式屏蔽字的反码按位与的结果:新文件权限=mode_creat &  (~mode_mask)

文件模式创建屏蔽字在内核创建文件时发生作用,它是进程的一个属性数据,在后面隐性地影响所有具有创建新文件性质的函数。umask函数可以改变进程的文件模式创建屏蔽字的值,并返回原来的值。一经改变,新屏蔽字将在进程的整个生命期发生作用,或遇到再次用umask函数改变它。

文件模式创建屏蔽字的意义:我们可以允许用户传递任意权限的创建模式字,但又必须控制一些权限,例如用户可以用带有执行权的参数创建新文件,而一般用户又不能创建可执行文件,这种情况下,文件创建可以成功执行,但执行权被自动屏蔽掉了。


此函数比较少用,因为进程自动有一个恰当的默认屏蔽字,但了解屏蔽字在文件创建过程中的作用是有必要的。shell程序一般都有一个内置的umask命令,在shell启动时,根据用户类型不同,先执行一些不同的脚本,通过脚本将屏蔽字设置到恰当值,从而达到控制不同用户创建文件的能力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值