current_umask()函数用来返回当前文件的权限值掩码。权限其实就是一个整数,用三位八进制数表示,此外还可以使用以下宏或多个宏的组合,定义见文件linux-3.19.3/include/uapi/linux/stat.h。
S_IRWXU
文件所有者具有读写执行权限S_IRUSR
文件所有者具有读权限S_IWUSR
文件所有者具有写权限S_IXUSR
文件所有者具有执行权限S_IRWXG
用户组具有读写执行权限S_IRGRP
用户组具有读权限S_IWGRP
用户组具有写权限S_IXGRP
用户组具有执行权限S_IRWXO
其他所有用户具有读写执行权限S_IROTH
其他所有用户具有读权限S_IWOTH
其他所有用户具有写权限S_IXOTH
其他所有用户具有执行权限
current_umask文件包含
#include <linux/fs.h>
current_umask函数定义
在内核源码中的位置:linux-3.19.3/fs/fs_struct.c
函数定义格式:
int current_umask(void)
current_umask输入参数说明
current_umask()
函数没有输入参数。
current_umask返回参数说明
current_umask()
函数返回值是整型,即当前系统中umask的值。而当前系统中的umask值是用八进制表示的,所以在下面的实例中会将整型转化为八进制数。
current_umask实例解析
编写测试文件:current_umask.c
头文件声明如下:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
MODULE_LICENSE("GPL");
模块初始化函数:
static int current_umask_init (void)
{
int umask = current_umask(); //获取当前文件的umask值
printk("The current umask is 00%o\n", umask); //显示umask值
return 0;
}
模块退出函数:
static void current_umask_exit (void)
{
printk("Goodbye current_umask\n");
}
模块初始化及退出函数调用:
module_init(current_umask_init);
module_exit(current_umask_exit);
实例运行结果及分析:
首先编译模块,执行命令insmod current_umask.ko插入模块,然后执行命令dmesg -c,会出现如图所示的结果。
结果分析:
结果用八进制表示,为0022,而在本系统下(Ubuntu14.04,内核为Linux-3.19.3)默认的umask是0022,在管理员模式下运行终端命令umask,得到结果0022,因此利用该函数可以获得本系统的umask值。
接下来,我们用终端命令umask 0666,将文件权限所使用的位掩码设置为0666,再重新插入模块current_umask,结果如图所示,进一步验证了上述分析结果。