掩码

  1. 掩码:本质就是一串二进制数字,可以通过与目标数字的按位操作,实现屏蔽指定位。
  2. 示例:目标数字为10100111,需求是将该数字的第0到第2位清零(右边第一位为0)。
    1. 先创建一个掩码:00000111
    2. 将掩码取反然后与目标数字进行按位与运算。
    11111000 & 10100111 ==> 10100000
    
  3. 应用:掩码应用广泛,远不止这些。以下是一些应用例子。

umask

  1. 解释:get or set the file mode creation mask。顾名思义,umask也是一个掩码,会对创建的文件或者目录的权限位产生影响。
  2. umask的查看与修改:
    1. 查看:使用umask或者umask -S命令或者使用库函数umask
    2. 修改:使用umask mode可以临时修改,如果需要永久修改则需要更改配置文件的值;或者使用库函数umask

信号掩码

  1. 在进程执行期间,内核会为每个进程维护一个信号掩码。为了屏蔽某些信号,防止某些信号递送给进程,需要将需要屏蔽的信号加入到信号掩码中。

示例

  1. 当前系统umask值为0022。用户欲创建一个test.txt文件,文件的权限位指定为666,最终test.txt文件的权限位为644。即666 & ~022
#include <unistd.h>
#include <fcntl.h>

int main() {
    int fd = open("test.txt", O_CREAT, 0666, "test");
    close(fd);
    return 0;
}