码迷,mamicode.com
首页 > 系统相关 > 详细

Linux C代码分析文件权限

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

标签:include   linux   touch   error   影响   

判断/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代码分析文件权限

标签:include   linux   touch   error   影响   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!