Linux内核API current_umask

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,会出现如图所示的结果。

Linux内核API current_umask

结果分析:

结果用八进制表示,为0022,而在本系统下(Ubuntu14.04,内核为Linux-3.19.3)默认的umask是0022,在管理员模式下运行终端命令umask,得到结果0022,因此利用该函数可以获得本系统的umask值。

接下来,我们用终端命令umask 0666,将文件权限所使用的位掩码设置为0666,再重新插入模块current_umask,结果如图所示,进一步验证了上述分析结果。

Linux内核API current_umask

赞(1)
未经允许不得转载:极客笔记 » Linux内核API current_umask
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址