概述
umask函数用于为进程设置文件模式创建屏蔽字,并返回以前的值。函数原型如下:
#include <sys/stat.h>
mode_t umask(mode_t cmask);
每个进程都有一个文件模式创建屏蔽字,用于对新创建的文件或新目录的权限进行控制。
文件模式创建屏蔽字是进程的一个属性,其数据类型是mode_t。是S_IRUSR和S_IWUSR等常量的组合。不过意义却与这些常量相反:文件模式创建屏蔽字与S_IRUSR等对应的位为1,则关闭这些权限。
以creat函数为例,假设当前进程的文件模式创建屏蔽字(mode_mask)为0100(八进制,等于 S_IXUSR),以文件创建模式字(mode_creat)0700(八进制,等于S_IRUSR | S_IWUSR | S_IXUSR)调用creat函数:
creat(&mypath,mode_creat)
那么,创建出来的新文件mypath实际权限是0600(八进制,等于S_IRUSR | S_IWUSR)
也就是说,指定的执行权被取消了。
从位运算规则来看,新文件的实际权限是传递给创建函数的创建模式字与文件创建模式屏蔽字的反码按位与的结果:新文件权限=mode_creat & (~mode_mask)
文件模式创建屏蔽字在内核创建文件时发生作用,它是进程的一个属性数据,在后面隐性地影响所有具有创建新文件性质的函数。umask函数可以改变进程的文件模式创建屏蔽字的值,并返回原来的值。一经改变,新屏蔽字将在进程的整个生命期发生作用,或遇到再次用umask函数改变它。
文件模式创建屏蔽字的意义:我们可以允许用户传递任意权限的创建模式字,但又必须控制一些权限,例如用户可以用带有执行权的参数创建新文件,而一般用户又不能创建可执行文件,这种情况下,文件创建可以成功执行,但执行权被自动屏蔽掉了。
此函数比较少用,因为进程自动有一个恰当的默认屏蔽字,但了解屏蔽字在文件创建过程中的作用是有必要的。shell程序一般都有一个内置的umask命令,在shell启动时,根据用户类型不同,先执行一些不同的脚本,通过脚本将屏蔽字设置到恰当值,从而达到控制不同用户创建文件的能力。
最后
以上就是热情口红为你收集整理的4.8 umask函数-文件模式创建屏蔽字修改的全部内容,希望文章能够帮你解决4.8 umask函数-文件模式创建屏蔽字修改所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复