APUE学习笔记:umask


     umask的作用是为进程设置文件模式创建屏蔽字,也就是说linux中每创建一个文件,则文件权限取决于umask设置的屏蔽状态。

     1 文件权限

      理解umask之前,先看下文件权限。

      所有文件类型(目录文件、字符特别文件等)都有访问权限,很多人认为只有普通文件有访问权限,这是一种误解。每个文件的9个访问权限位,可以分成三类,见下表1,表中u表示用户,即文件的所有者,g表示组,o表示其他。可以使用chmod修改文件权限。

       进程每次打开、创建或删除一个文件时,内核就进行文件访问权限测试。

       若进程的有效ID是0,既超级用户,则允许访问,超级用户root对整个文件系统进行处理的最充分的自由。

       若有效ID为文件的所有者,那么进程根据相应的权限位访问该文件,用户对该文件对应的读为为1,则可读,写位为1,则可写,执行位为1,则可以执行。

       其他用户的访问权限被设置,则允许访问,否则拒绝。    

                            表1

                            

                                           

       2 umask的作用

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

        #include <sys/stat.h>

        mode_t umask( mode_t cmask);

       输入参数cmask就是表1的9个参数构成的或( | ),如(S_IRUSR|S_IWUSR)。

       进程创建一个文件或者目录,就一定会使用该文件模式去创建屏蔽字,在文件模式创建屏蔽字中为1的位,在文件mode中相应位则一定要关闭。就是说取反。看如下umask例子。

 

#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)
		perror("creat error for foo");
	umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
	//umask(0400);
	if (creat("bar", RWRWRW) < 0)
		perror("creat error for bar");
	//write(STDOUT_FILENO , "nimei" , sizeof("nimei"));
	exit(0);
}


 

 

 

       采用gcc编译代码,gcc umask.c apue.h -o a.out ,在shell中输入./a.out,在输入命令ls -l ,bar和foo的权限如下,umask(0)的时候,按0取反,就是666(文件)或者777(文件夹),这里的6=4(读)+2(写)就是进程创建的文件对所有用户具有可读可写,umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)里的屏蔽字可以对照表格来看,屏蔽了用户组和其他用户的读写。同时需要注意的是creat函数,如果已存在该文件,将不会重新创建。

 
            -rw------- 1 zhouzhenhe zhouzhenhe    0 Oct 21 13:12 bar
            -rw-rw-rw- 1 zhouzhenhe zhouzhenhe    0 Oct 21 13:12 foo

 

           umask的参数按位取反就是允许的创建文件权限,004表示阻止其他用户读,002表示阻止其他用户写,400表示阻止用户读。记住4读2写1执行。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值