linux---文件和目录

文件访问权限

每个文件有9个访问权限位,可将它们分为3类:

9个访问权限位
st_mode屏蔽含义

S_IRUSR

S_IWUSR

S_IXUSR

用户读

用户写

用户执行

S_IRGRP

S_IWGRP

S_IXGRP

组读

组写

组执行

S_IROTH

S_IWOTH

S_IXOTH

其他读

其他写

其他执行

函数umask

umask函数为进程设置文件模式创建屏蔽字,并返回之前的值。

#include <sys/wait.h>

mode_t umask(mode_t cmask);

返回值:之前的文件模式创建屏蔽字

其中,参数cmask是由表格中的9个常量中的若干个按位“或”构成的。

在进程创建一个新文件或者新目录时,就一定会使用文件模式创建屏蔽字。在文件模式创建屏蔽字中为1的位,在文件mode中的相应位一定被关闭。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>

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

int main(void)
{
    umask(0);

    if (creat("foo", RWRWRW) < 0)
    {
        perror("create error for foo");
        exit(1);
    }

    umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);

    if (creat("bar", RWRWRW) < 0)
    {
        perror("create error for bar");
        exit(1);
    }
    exit(0);
}
mali@mali:~/code/file_dir$ umask
0002
mali@mali:~/code/file_dir$ gcc umask.c -o umask
mali@mali:~/code/file_dir$ ./umask 
mali@mali:~/code/file_dir$ ls -l
total 16
-rw------- 1 mali mali    0 8月  13 21:48 bar
-rw-rw-rw- 1 mali mali    0 8月  13 21:48 foo
-rwxrwxr-x 1 mali mali 8760 8月  13 21:48 umask
-rw-rw-r-- 1 mali mali  466 8月  13 21:47 umask.c
mali@mali:~/code/file_dir$ umask
0002
mali@mali:~/code/file_dir$ 

在该示例中,我们用shell的umask命令在运行程序的前后打印文件模式创建屏蔽字。从中可见,更改进程的文件模式创建屏蔽字并不影响其父进程的屏蔽字。

用户可以设置umask值控制他们所创建文件的默认权限。该值表示成八进制数,一位代表一种要屏蔽的权限。设置了相应位后,它所对应的权限就会被拒绝。常用的几种umask值是002、022和027。002阻止其他用户写入你的文件,022阻止同组成员和其他用户写入你的文件,027阻止同组成员写你的文件以及其他用户读、写或执行你的文件。

umask文件访问权限位
屏蔽位含义
0400用户读
0200用户写
0100用户执行
0040组读
0020组写
0010组执行
0004其他读
0002其他写
0001其他执行
mali@mali:~/code/file_dir$ umask
0002
mali@mali:~/code/file_dir$ umask -S
u=rwx,g=rwx,o=rx
mali@mali:~/code/file_dir$ umask 027
mali@mali:~/code/file_dir$ umask -S
u=rwx,g=rx,o=
mali@mali:~/code/file_dir$ umask 022
mali@mali:~/code/file_dir$ umask -S
u=rwx,g=rx,o=rx
mali@mali:~/code/file_dir$ 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值