首页 > 系统服务 > 详细

Linux C代码分析文件权限

时间:2014-07-29 16:01:59      阅读:529      评论:0      收藏:0      [点我收藏+]

判断/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" );
}

bubuko.com,布布扣

例子的代码比较简单,但是有几个地方需要说明,一个文件的权限是受到open函数参数给定(代码是0666)和umask值同时影响的,0666-0022=0644(更准确的方法是使用“与运算”获得权限)

bubuko.com,布布扣

当前为root用户umask是0022,在当前shell下启的进程都是会继承当前的umask值,包括make,gcc和touch命令的进程,为了直观用stat查看,两个文件分别是之前make编译出的aaa.txt和touch创建的bbb.txt,默认权限都是644

bubuko.com,布布扣

如果需要使创建的文件权限为代码参数中指定的权限,那么只要把umask设置为0

bubuko.com,布布扣

总结:1.进程具有继承权限的特点。

            2.一个文件的权限是受到open函数的参数和当前shell的umask值共同影响的。

也许会有人要问,touch命令会用到open函数了吗?那么strace下看看,很明显的结果,默认是0666减去umask的权限。

bubuko.com,布布扣 

本文出自 “老徐的私房菜” 博客,转载请与作者联系!

Linux C代码分析文件权限,布布扣,bubuko.com

Linux C代码分析文件权限

原文:http://laoxu.blog.51cto.com/4120547/1531482

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!