Linux学习笔记7——umask函数
2016-12-11 21:50
190 查看
#include<sys/stat.h>
mode_t umask(mode_t cmask);umask函数为进程设置文件模式创建屏蔽字,并返回改动之前的值。
这个函数的功能比较奇葩,他实际上是规定了创建文件时哪些功能是不能用的,即便你创建时赋予了这个功能,他也将其无视。具体来说,如果umask中设置了“用户读”,则你创建的任何文件必然没有“用户读”权限,哪怕你在open或creat的时候明文表示你需要“用户读”权限。
举例如下:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
void err_sys(char *);
void err_sys(char *err_txt)
{
printf("%s\n",err_txt);
exit(1);
}
int main(int argc, char* argv[])
{
//4.9 umask 文件模式创建屏蔽字
printf("old umask = %d\n", umask(0));
if(creat("jxl.txt", S_IRUSR) < 0)
err_sys("creat error for jxl.txt");
umask(S_IRUSR);
if(creat("hy.txt", S_IRUSR) < 0)
err_sys("creat error for hy.txt");
exit (0);
}
创建jxl.txt前将umask清零,表示没有任何权限被屏蔽,然后以“用户读”的方式创建文件
创建hy.txt前将umask的“用户读”置位,实际上代表屏蔽“用户读”权限,然后再以“用户读”的方式创建文件
执行结果如下:
程序打印出了系统默认的umask值,为2,代表系统默认不开放“其他写”权限。
jxl.txt的权限没有被限制,所以最终其按照我们的设定获得了“用户读”权限
hy.txt由于屏蔽了“用户写”,但是又按照“用户写”来创建文件,最终导致其没有获得任何权限。
注意:
更改进程的文件模式创建屏蔽字,并不影响其父进程的文件模式创建屏蔽字。
mode_t umask(mode_t cmask);umask函数为进程设置文件模式创建屏蔽字,并返回改动之前的值。
这个函数的功能比较奇葩,他实际上是规定了创建文件时哪些功能是不能用的,即便你创建时赋予了这个功能,他也将其无视。具体来说,如果umask中设置了“用户读”,则你创建的任何文件必然没有“用户读”权限,哪怕你在open或creat的时候明文表示你需要“用户读”权限。
举例如下:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
void err_sys(char *);
void err_sys(char *err_txt)
{
printf("%s\n",err_txt);
exit(1);
}
int main(int argc, char* argv[])
{
//4.9 umask 文件模式创建屏蔽字
printf("old umask = %d\n", umask(0));
if(creat("jxl.txt", S_IRUSR) < 0)
err_sys("creat error for jxl.txt");
umask(S_IRUSR);
if(creat("hy.txt", S_IRUSR) < 0)
err_sys("creat error for hy.txt");
exit (0);
}
创建jxl.txt前将umask清零,表示没有任何权限被屏蔽,然后以“用户读”的方式创建文件
创建hy.txt前将umask的“用户读”置位,实际上代表屏蔽“用户读”权限,然后再以“用户读”的方式创建文件
执行结果如下:
程序打印出了系统默认的umask值,为2,代表系统默认不开放“其他写”权限。
jxl.txt的权限没有被限制,所以最终其按照我们的设定获得了“用户读”权限
hy.txt由于屏蔽了“用户写”,但是又按照“用户写”来创建文件,最终导致其没有获得任何权限。
注意:
更改进程的文件模式创建屏蔽字,并不影响其父进程的文件模式创建屏蔽字。
相关文章推荐
- 教你在 Linux 上使用 Calibre 创建电子书
- Linux CentOS 安装Java环境
- linux c之htpasswd
- Linux电源管理-Runtime PM
- CentOS6.8下Django项目运行坏境搭建-django(三)
- windows7(Linux)下配置python编程环境
- Linux学习思想及文档资料的使用
- 不可靠信号问题
- kvm中虚拟机xml文件释义
- ubuntu的简单搜索命令
- Linux下通配符总结
- kvm安装及虚拟机创建
- Mysql-linux环境下安装
- Linux正则表达式grep
- Linux命令中使用正则表达式
- linux下文件的特殊权限s和t
- linux权限补充:rwt rwT rws rwS 特殊权限
- 在Kali Linux下实战Nmap的秘诀
- linux下如何打包压缩?解包解压?.tar文件.gz文件
- Linux下的压缩zip,解压缩unzip命令详解及实例