重读APUE(6)-umask

umask函数设置当前进程的权限为屏蔽字;系统会有一个默认的屏蔽字,为了确保创建文件具有的权限位成功被设置,需要使用umask将屏蔽字置0

系统屏蔽字用shell查看,比如得到如下结果,其为八进制表示形式,以0开头;这个屏蔽字表示屏蔽掉了组的写和其他的写权限;

1 0022

下面的例子很好的说明了umask的使用,首先使用umask(0)将屏蔽字置0,此时新建foo文件,可见其具有设置的全部读写权限;而后用umask屏蔽掉组和其他的读写位,新建bar,可见bar之具有用户读写权限;

另外需要注意的是,进程设置umask不会改变到系统的umask,只在进程内部有效

 1 #include "apue.h"
 2 #include <fcntl.h>
 3 
 4 #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
 5 
 6 int
 7 main(void)
 8 {
 9     umask(0);
10     if (creat("foo", RWRWRW) < 0)
11         err_sys("creat error for foo");
12     umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
13     if (creat("bar", RWRWRW) < 0)
14         err_sys("creat error for bar");
15     exit(0);
16 }

 

1 $ umask first print the current file mode creation mask
2 002
3 $ ./a.out
4 $ ls -l foo bar
5 -rw------- 1 sar 0 Dec 7 21:20 bar
6 -rw-rw-rw- 1 sar 0 Dec 7 21:20 foo
7 $ umask see if the file mode creation mask changed
8 002

 

posted @ 2019-10-30 08:15  AlexAlex  阅读(173)  评论(0编辑  收藏  举报