umask函数
函数定义: mode_t umask(mode_t mask)
umask函数将mask与0777进行按位与, 即mask&0777, 对结果中为1的位对应的权限进行屏蔽, 下面是所有的权限屏蔽字及其对应的宏
示例代码
#define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
int main(void){
umask(0); //不对文件权限设置任何屏蔽, 即创建的文件可以设置任何权限(只要你愿意)
if(creat("umask1.txt",RWRWRW) == -1){
printf("create umask1 failed.\n");
}
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if(creat("umask2.txt",RWRWRW) == -1){
printf("create umask2 failed.\n");
}
exit(0);
}
执行结果为:
所以, 文件权限位屏蔽字的工作模式显而易见, 如果屏蔽了对应的权限位, 那么创建时只能指定未屏蔽的权限位才会在文件权限中成功生效
注意: umask改变文件权限屏蔽字只能在本进程中生效, 对父进程的文件权限屏蔽字没有影响, 这里的父进程是shell进程, 可以通过shell命令umask
查看屏蔽字或者umask -S
查看符号格式的许可权限