[置顶] unix环境高级编程-4.8-umask函数

自此我们已经说明了每个文件相关联的9个访问权限位。在此基础上,我们可以说明与每个进程相关联的文件模式创新屏蔽字。

umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。

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

查看GNU C手册。

mode_t umask (mode t mask) [Function]
The umask function sets the file creation mask of the current process to mask, and
returns the previous value of the file creation mask.
Here is an example showing how to read the mask with umask without changing it
permanently:
mode_t
read_umask (void)
{
mode_t mask = umask (0);
umask (mask);
return mask;
}
However, it is better to use getumask if you just want to read the mask value, because
it is reentrant (at least if you use the

 


其中,参数cmask是由上一章中列出的9个常量中或按位或构成的。

  在进程创建一个新文件或新目录的时候,就一定会使用文件模式创建屏蔽字节。在那里我们说明了open函数和creat函数。这两个函数都有一个mode参数。他指定了新文件的访问权限。

对于任何在文件模式创建屏蔽字中为1的位。在文件mode忠的系那个硬位则一定被关闭。

实例

#include "apue.h"
#include<fcntl.h>

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

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


}

运行结果:[置顶] unix环境高级编程-4.8-umask函数_第1张图片

UNIX系统的大多数用户从不处理他们的umask值,通常在登录的时候,由shell的启动文件设置一次,然后从不改变。尽管如此,当编写创建新文件的程序时候,如果我们系那个确保指定的访问权限已经激活。那么必须在进程运行时候修改umask值。例如我们想确保任何用户能够读文件,则应该将umask值这位0,否则当我们远程运行时候,有效地umask值可能关闭改权限位。

 

从上边结果可见,

更改进程的文件模式创建屏蔽字,并不影响其父进程的屏蔽字。所有shell都内置了umask命令,我们可以用该命令设置或打印当前文件模式创建屏蔽字。

 

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

表4-7 umask文件访问权限位

屏蔽位 意义

0400

0200

0100

0040

0020

0010

0004

0002

0001

 

用户读

用户写

用户执行

组读

组写

组执行

其他读

其他写

其他执行

 

 

简单使用umask 案例

[置顶] unix环境高级编程-4.8-umask函数_第2张图片

 

更多请关注:http://blog.csdn.net/wallwind

 

 

你可能感兴趣的:([置顶] unix环境高级编程-4.8-umask函数)