【linux】open函数创建新文件及umask函数使用
来源:互联网 发布:软件测试java面试题api 编辑:程序博客网 时间:2024/06/14 05:36
首先我们来看一下open函数的原型
#include <fcntl.h>int open(const char *path, int oflag,.../*mode_t mode*/); //返回值:若成功,返回文件描述符;若失败,返回-1
由函数原型可知open函数有一个可变参数mode,当使用open函数创建新文件时,需选用常量O_CREAT为构成参数oflag的一部分,此时我们需要通过参数mode为新建的文件设置访问权限。
参数mode由下面9个文件访问权限位中的若干位相”或”构成。
另外mode参数也可以通过一个3位8进制数来表示,例如:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWOTH 可用八进制数 0642来表示
0642的二进制表示为 110 100 010 显然这个二进制数的后9位分别对应了 用户、组、其他 相应的 读、写、执行 权限
不过新建文件的访问权限并不是完全由mode参数决定的,而是要和文件模式创建屏蔽字umask经过如下计算来得到。
新的访问权限 = mode & (~umask)
文件模式创建屏蔽字umask
umask值用于控制用户所创建文件的默认权限,umask也是一个mode_t类型的值,它的每一位都代表一种要屏蔽的权限。每个进程都有自己的umask值,系统会自动为其设置一个值。通过shell的umask命令可以查看。
下面介绍umask函数,它可以为进程设置文件模式创建屏蔽字,并返回之前的值。
#include <sys/stat.h>mode_t umask(mode_t cmask); //cmask为要设置的新值
下面通过一段代码说明用open函数创建新文件的过程以及umask函数的使用
#include <sys/stat.h>#include <fcntl.h>#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)int main() { umask(0); open("file1", O_CREAT, RWRWRW); umask(0077); //屏蔽组和其它的所有权限 open("file2", O_CREAT, RWRWRW); return 0;}
shell下运行结果
$ umask0002$ ./a.out$ ls -l file1 file2-rw-rw-rw- 1 waiting waiting 0 12月 14 13:30 file1-rw------- 1 waiting waiting 0 12月 14 13:30 file2$ umask0002
由以上的结果可以看出,修改进程的umask值并不会影响其父进程的umask值。
并且如果想要新创建文件的访问权限完全由用户决定,那么只需在调用open函数前用umask函数将umask值置为0即可。
阅读全文
0 0
- 【linux】open函数创建新文件及umask函数使用
- linux下open()函数时umask的值自己创建的文件没办法写
- open|creat & umask函数
- umask()函数 -- linux函数
- linux中的 umask 函数
- umask函数linux
- linux文件函数-open
- 4.8 umask函数-文件模式创建屏蔽字修改
- UNIX - umask函数,创建文件模式屏蔽字
- Linux下的umask函数
- linux之umask函数解析
- linux的umask函数详解
- Linux下的umask函数
- linux下的umask()函数
- linux umask以及mknod函数
- (七)umask掩码、open函数和close函数的使用
- linux open函数打开文件
- umask 函数
- Python在数据科学中的应用(python 数据挖掘入门)
- RDD 中foreach与foreachPartition区别
- 类装载器(calssLoader)
- 在Tomcat中部署Web项目的操作方法(必看篇)
- 关于一些MySQL数据库的书籍
- 【linux】open函数创建新文件及umask函数使用
- 按要求编程22
- 微信小程序客服消息授权给第三方Udesk
- CADisplayLink
- Java多线程打印ABABABAB
- java中判断 101-200 之间有多少个素数,并输出所有的素数
- 资源调优
- Android.mk,安卓系统AOSP源码
- 自己编程实现strcat,strcpy,strlen ,strstr,strcmy