Linux下的umask函数

来源:互联网 发布:剑魔2觉数据 编辑:程序博客网 时间:2024/04/29 14:29

Linux下的umask函数

umask()函数:此函数的主要作用是在创建文件时设置或者屏蔽掉文件的一些权限。一般与open()函数配合使用。

umask函数原型为:

#include <sys/stat.h>

mode_t umask(mode_t cmask);

cmask是由下表列出的9个常量中的若干个按位“或”构成的

S_IRUSR       用户读

S_IWUSR      用户写

S_IXUSR       用户执行

S_IRGRP       组读

S_IWGRP      组写

S_IXGRP       组执行

S_IROTH       其他读

S_IWOTH      其他写

S_IXOTH       其他执行

在Linux中一个文件的权限分为3组9个权限  分别为上面列出的9个,组间的顺序为用户,组,其他。例如:

ls -l test

-rw-rw-rw- 1 shmily shmily 0  5月  6 17:16 test

表示test文件的权限为:用户可读可写,组可读可写,其他可读可写 (r代表可读 w代表可写 x代表可执行 -代表未设置)

可用三位8进制数表示 则test的权限为666


umask的主要作用是在创建文件设置或者屏蔽掉文件的一些权限,

int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
当创建一个文件并且要明确指定此文件的权限时,应该使用第二个open()函数,明确指定mode参数,所创建的文件最后的权限是:mode&(~mask)。默认的mask值是:022

在创建一个文件时要指明该文件的权限,open函数的最后一个参数mode并不是要设置的权限,它需要执行以下操作

mode & (~cmask)

例如《APUE》中的4_3的函数

[cpp] view plaincopy
  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 main(void)  
  7. {  
  8.         umask(0);  
  9.         if (creat("foo", RWRWRW) < 0)  
  10.             err_sys("create error for foo");  
  11.         umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);  
  12.         if (creat("bar", RWRWRW) < 0)  
  13.             err_sys("creat error for bar");  
  14.         return 0;  
  15. }  
  16.           

在最初cmask为0,即 000 000 000

creat函数时设置mode为666

mode & (~cmask) = 110 110 110 & 111 111 111 = 110 110 110 

所以foo文件的权限就是rw-rw-rw-

然后cmask为066,即000 110 110

crear函数的mode仍为666

mode & (~cmask) = 110 110 110 & 111 001 001 = 110 000 000 

所以bar文件的权限为rw-------

shmily@pc-Shmily:~/code/UnixCode$ ls -l foo bar
-rw------- 1 shmily shmily 0  5月  6 17:16 bar
-rw-rw-rw- 1 shmily shmily 0  5月  6 17:16 foo

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳免限行通行证忘了截图怎么办 电脑把管理员账号删除了怎么办 uc新浪加载失败怎么办红包还 微信忘记账号和密码怎么办 苹果手机忘记id密码怎么办 购买游戏账号被找回怎么办 交易猫账号忘了怎么办 爱奇艺账号怎么修改不了密码怎么办 论文目录显示错误未定义书签怎么办 银行账号被冻结了怎么办 哈罗单车账号被冻结怎么办 麻袋赚赚账号被冻结怎么办 网赌账号被冻结怎么办 梦想城镇账号被冻结怎么办 钱被银行冻结了怎么办 百度云账号密码忘了怎么办 微信钱包忘记密码了怎么办 word文档打开文件出错怎么办 有盘文件删不了怎么办 u盘文档严重损坏怎么办 wps文档打开是乱码怎么办 九游3083网资金冻结怎么办 阴阳师九游版禁止部分玩法怎么办 夜神模拟器游戏打不开怎么办 九游代金券锁定怎么办 被娱乐天地骗了怎么办 win8更新失败无法开机怎么办 安装英雄联盟文件损坏怎么办 电脑玩lol运行内存不足怎么办 守望先锋账号冻结了怎么办 守望先锋服务器发生意外错误怎么办 在先锋社保缺一年上学怎么办 lol更新后反应很慢怎么办 电脑跳舞毯不正常电脑游戏怎么办 PS中缺失的字体怎么办 黑板墙不想要了怎么办 淘宝代练打坏了怎么办 绝地求生与ipad不兼容怎么办 小米手机玩绝地求生卡怎么办 绝地求生服务器目前非常繁忙怎么办 玩绝地求生手机发烫怎么办