umask函数笔记

来源:互联网 发布:狩猎者安全防护软件 编辑:程序博客网 时间:2024/05/20 02:27

 linux下每个文件对于不同的用户都有不同的访问权限。

当我们使用creat函数时候,可以设置文件的权限。但是是不是creat想设置什么权限就设置什么权限呢?

当我们在终端输入umask -S的时候

图片


表面我们所在的用户可以设置的权限。

同样在我们使用进程创建文件的时候,并不是可以使用creat函数为文件添加任何权限。

Creat函数的权限是进程权限的子集。换句话说,当进程只能具有的是u=rwxg=rxo=rx的时候。我们使用creat函数创建文件设置,u=rwxg=rwxo=rwx。这时候所创建的文件权限只能是u=rwxg=rxo=rxCreat只能在进程权限的范围内活动。

现在引用umask函数,umask函数为进程设置文件模式创建屏蔽字。每个进程都有默认的防止权限,而umask这事更改防止权限

#include <stdio.h>

#include <fcntl.h>

#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

int main()

{

umask(0);

if(creat("foo1",RWRWRW)<0)

printf("foo\n");

umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);

if(creat("bar1",RWRWRW)<0)

printf("bar\n");

exit(0);

}

这时候foo1具有u=rw,g=rw,o=rw的权限,bar1具有u=rw权限。因为umask屏蔽掉了S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH这四个权限

图片

creat来说,当进程屏幕了某些权限时候,creat为文件添加这些权限也无效。

umaskcreat)也可以使用另外一种屏蔽(添加)权限的方法。

图片

所有上面代码也可以写成

#include <stdio.h>

#include <fcntl.h>

#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

int main()

{

umask(0);

if(creat("foo1",077)<0)

printf("foo\n");

umask(066);

if(creat("bar1",077)<0)

printf("bar\n");

exit(0);

}

Umask函数只改变进程权限,不改变用户权限。