文件和目录之umask函数

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。(这是少数几个没有出错返回函数中的一个。)

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

返回值:以前的文件模式创建屏蔽字

其中,参数cmask是由S_IRUSR、S_IWUSR、S_IXUSR、S_IRGRP、S_IWGRP、S_IXG、S_IROTH、S_IWOTH及S_IXOTH这9个常量中的若干个按位“或”构成的。

在进程创建一个新文件或新目录时,就一定会使用文件模式创建屏蔽字。对于任何在文件模式创建屏蔽字中为1的位,在文件mode中的相应位则一定被关闭。

程序清单4-3 umash函数实例

[root@localhost apue]# cat prog4-3.c
#include "apue.h"
#include <fcntl.h>

#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

int 
main(void)
{
        umask(0);
        if(creat("foo", RWRWRW) < 0)
                err_sys("creat errro for foo");
        umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
        if(creat("bar", RWRWRW) < 0)
                err_sys("creat error for bar");
        exit(0);
}

若运行此程序可以得到如下结果,从中可见访问权限是如何设置的。

[root@localhost apue]# ./prog4-3
[root@localhost apue]# ls -l foo bar
-rw------- 1 root root 0 01-02 02:00 bar
-rw-rw-rw- 1 root root 0 01-02 02:00 foo

更改进程的文件模式创建屏蔽字并不影响其父进程(常常是shell)的屏蔽字。

所有shell都有内置umask命令,我们可以用该命令设置或打印当前文件模式创建屏蔽字。

用户可以设置umask值以控制他们所创建文件的默认权限。该值表示成八进制数,一位代表一种要屏蔽的权限(读-4、写-2、执行-1,可相加如6-读写)。设置了相应位后,它所对应的权限就会被拒绝。常用的几种umask值是002、022、和027,002阻止其他用户写你的文件,022阻止同组成员和其他用户写你的文件,027阻止同组成员写你的文件以及其他用户读、写或执行你的文件。

Single UNIX Specification要求shell支持符号形式的umask命令。与八进制格式不同,符号格式指定许可的权限(即在文件创建屏蔽字中为0的位)而非拒绝的权限(即在文件创建屏蔽字中为1的位)。下面比较了两种格式的命令:

[root@localhost apue]# umask
0022
[root@localhost apue]# umask -S
u=rwx,g=rx,o=rx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值