首页 > 代码库 > Linux C代码分析文件权限
Linux C代码分析文件权限
判断/home下有没有文件aaa.txt,如果存在则提示错误,如果文件不存在则创建且文件最终权限为644。
#include<stdio.h> #include<fcntl.h> int main(void){ int fd; fd = open("/home/aaa.txt",O_WRONLY | O_CREAT | O_EXCL,0666); if (fd == -1) printf ("Error: File exists.\n" ); }
例子的代码比较简单,但是有几个地方需要说明,一个文件的权限是受到open函数参数给定(代码是0666)和umask值同时影响的,0666-0022=0644(更准确的方法是使用“与运算”获得权限)
当前为root用户umask是0022,在当前shell下启的进程都是会继承当前的umask值,包括make,gcc和touch命令的进程,为了直观用stat查看,两个文件分别是之前make编译出的aaa.txt和touch创建的bbb.txt,默认权限都是644
如果需要使创建的文件权限为代码参数中指定的权限,那么只要把umask设置为0
总结:1.进程具有继承权限的特点。
2.一个文件的权限是受到open函数的参数和当前shell的umask值共同影响的。
也许会有人要问,touch命令会用到open函数了吗?那么strace下看看,很明显的结果,默认是0666减去umask的权限。
本文出自 “老徐的私房菜” 博客,转载请与作者联系!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。