掩码
- 掩码:本质就是一串二进制数字,可以通过与目标数字的按位操作,实现屏蔽指定位。
- 示例:目标数字为10100111,需求是将该数字的第0到第2位清零(右边第一位为0)。
- 先创建一个掩码:00000111
- 将掩码取反然后与目标数字进行按位与运算。
11111000 & 10100111 ==> 10100000
- 应用:掩码应用广泛,远不止这些。以下是一些应用例子。
umask
- 解释:get or set the file mode creation mask。顾名思义,umask也是一个掩码,会对创建的文件或者目录的权限位产生影响。
- umask的查看与修改:
- 查看:使用
umask
或者umask -S
命令或者使用库函数umask
- 修改:使用
umask mode
可以临时修改,如果需要永久修改则需要更改配置文件的值;或者使用库函数umask
信号掩码
- 在进程执行期间,内核会为每个进程维护一个信号掩码。为了屏蔽某些信号,防止某些信号递送给进程,需要将需要屏蔽的信号加入到信号掩码中。
示例
- 当前系统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;
}