umask Function

umask系统调用于设置文件模式创建掩码,影响进程创建新文件时的权限。在Linux中,umask参数是九个访问权限常量的组合,通过OR操作形成。示例展示了umask为0和关闭所有组及other访问权限的情况,说明了如何确保文件的特定权限。umask值的变化只影响当前进程,shell提供了查看和设置umask的命令。常用值如002、022和027分别限制了不同用户的写权限。符号形式的umask指定允许的权限,与八进制形式相反。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

umask - set file mode creation mask(文件模式创建掩码)
系统调用umask给进程设置file mode creation mask并且返回之前的值(这是少数不返回错误值的函数之一)
Linux man手册中umask原型如下:

#include <sys/types.h>
#include <sys/stat.h>

mode_t umask(mode_t mask);
//Returns: previous file mode creation mask

umask的参数mask是9个访问权限常量(S_IRUSR,S_IWUSR…)中部分常量位与(bitwise OR)形成的.只要进程创建了新文件或者新目录,file mode creation mask就会被用上。在掩码中任何被打开的bit相应地在file‘smode中就会被关闭。

Example

创建两个文件,一个umask参数为0,一个umask参数关闭了所有组(group)和other的访问权限。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

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

int main()
{
    umask(0);
    if(open("rwall", O_CREAT, RWRWRW) < 0) //enable read and write for all users
    {
        fprintf(stderr, "rwrwrw open error: %s!\n", strerror(errno));  //open error
        exit(-1);
    }
    umask(S_IRGRP|S_IWGRP); //disable group for read and write
    if(open("nogrp", O_CREAT, RWRWRW) < 0)
    {
        fprintf(stderr, "nogrp open error: %s!\n", strerror(errno));   //open error
        exit(-1);
    }

    return 0;
}

运行好后,调用ls -l查看文件权限
结果

-rw-rw-rw- 1 rwall
-rw----rw- 1 nogrp

大部分Unix系统的用户从来不处理他们umask的值。纵使在登陆的时候,通过shell的start-upfile设置一次,之后就不再改变。无论如何,在我们创建新文件需要确定特定权限位(permission bit)被使能,我们必须在进程运行时修改umask的值。例如,我们想确保任何人可以读取文件,我们需要设置umask为0.

进程中改变了mask并不会影响进程父亲(一般是shell)的mask。所有的shell都有umask command可以查看或者设置file mode creation mask

通过设置相应位来disable相应权限,如下表(8进制格式)。
figure 4.10
一些常用的umask值是002—防止other write你的文件(shell输入umask默认为该值);022—防止group成员或者other用户来write你的文件;027—防止组成员写你的文件,防止other用户write、read、execute你的文件。

shell支持umask command的符号形式。与八进制形式不同,符号形式指定了允许的权限(clear bits in the file mode creation mask)而不是拒绝的权限。

比较两者形式:

$umask
002
$umask -S
u=rwx,g=rwx,o=rx

$umask 027
$umask -S
u=rwx,g=rx,o=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值