全部博文(395)
分类: LINUX
2011-07-29 15:23:42
关于umask以及umask函数,用户权限的解析
linux下默认情况下root的umask是022,其他用户的umask是002,但是,用命令和用函数来创建的时候权限是不一样的,呵呵
一。用命令来创建:
文件:
如果你用命令来创建文件的的话,由于处于安全考虑新创建的文件没有执行权力,也就是说权限为:666-022(root),666-002(普通用户)
目录:
如果你用命令来创建目录的话,由于目录的执行权力的意思是进入该目录的权限,所以说默认是有的,则权限为:777-022(root),777-002(普通用户)
[root@localhost p4.8]# touch zhang.txt
[root@localhost p4.8]# ll
-rw-r--r-- 1 root root 0 8月 10 08:15 zhang.txt
[root@localhost p4.8]# mkdir fei
[root@localhost p4.8]# ll
总用量 16
drwxr-xr-x 2 root root 4096 8月 10 08:27 fei
-rw-r--r-- 1 root root 0 8月 10 08:15 zhang.txt
二。用函数来创建文件:用函数来创建文件的话,是有执行权限的,如下分析和测试
#include
#include
#include
#include
int main(void){
int fd1,fd2;
fd1=open("test",O_CREAT|O_RDWR,0777);
if(fd1<0){
perror("Cannot create the test file");
return 1;
}
close(fd1);
struct stat file_stat;
if(stat("test",&file_stat)==-1){
perror("Cannot get the informention of the file!\n");
return 1;
}
printf("Permission is: %o\n",file_stat.st_mode&0x1ff);
umask(077);
fd2=open("test1",O_CREAT|O_RDWR,0777);
if(fd2<0){
perror("Cannot create the test file");
return 1;
}
close(fd2);
if(stat("test1",&file_stat)==-1){
perror("Cannot get the informention of the file!\n");
return 1;
}
printf("After MOdify umask value,Permission is: %o\n",file_stat.st_mode&0x1ff);
}
注:程序有开始的777-022到修改后的777-077
[root@localhost p4.8]# ls
p4.8.c
[root@localhost p4.8]# gcc -o p4.8 p4.8.c
[root@localhost p4.8]# ls
p4.8 p4.8.c
[root@localhost p4.8]# ./p4.8
Permission is: 755
After MOdify umask value,Permission is: 700
[root@localhost p4.8]# ll
总用量 12
-rwxrwxr-x 1 root root 5967 8月 10 08:05 p4.8
-rw-r--r-- 1 root root 780 8月 10 08:04 p4.8.c
-rwxr-xr-x 1 root root 0 8月 10 08:05 test
-rwx------ 1 root root 0 8月 10 08:05 test1