C 如何在linux内核中以编程方式读取linux文件权限

C 如何在linux内核中以编程方式读取linux文件权限,c,linux,permissions,kernel,C,Linux,Permissions,Kernel,如果我在linux内核中将权限声明为umode_t类型的变量模式,那么如何检查它是否具有读取或写入权限 例如,我正在将权限存储到umode_t file_模式中,现在如何检查它是否在linux中以编程方式具有读写权限 我尝试使用filp->f_op->read,但它总是给我一个错误,即使文件具有读取权限 umode_t input_file_mode; filp = filp_open( args->inputfile,O_RDONLY,0 ); input_file_mode = fil

如果我在linux内核中将权限声明为umode_t类型的变量模式,那么如何检查它是否具有读取或写入权限

例如,我正在将权限存储到umode_t file_模式中,现在如何检查它是否在linux中以编程方式具有读写权限

我尝试使用filp->f_op->read,但它总是给我一个错误,即使文件具有读取权限

umode_t input_file_mode;
filp = filp_open( args->inputfile,O_RDONLY,0 );
input_file_mode = filp->f_inode->i_mode;
if (!filp->f_op->read)
{
     error = -EACCES;
     printk("reading input file failed\n");
}

要检查用户是否具有给定inode的特定权限,请使用
inode\u permissions
函数。它在
linux/fs.h
中声明,并具有以下定义(在中):

用法示例:

if(inode_permission(inode, MAY_WRITE | MAY_READ) == 0) {
    // Current user has permissions to read and write the file.
}

请包含一个或至少一些实际代码。到目前为止,您显示的内容没有用处。添加了它总是返回错误您正在测试读取函数是否为null。关于如何在内核中执行文件操作的简单答案是“不”是,如果为null,我想返回错误,但即使启用了读取操作,也会抛出错误
if(inode_permission(inode, MAY_WRITE | MAY_READ) == 0) {
    // Current user has permissions to read and write the file.
}