当前位置: 技术问答>linux和unix
请教一个linux内核编程的问题
来源: 互联网 发布时间:2016-11-10
本文导语: 我刚开始学习内核编程,看的是The Linux Kernel Module Programming Guide,2.6版,我的内核是2.6.36的。 struct inode_operations里面有一个int (*permission) (struct inode *, int).我觉得permission的第二个参数像是权限,书上说 *The opera...
我刚开始学习内核编程,看的是The Linux Kernel Module Programming Guide,2.6版,我的内核是2.6.36的。
struct inode_operations里面有一个int (*permission) (struct inode *, int).我觉得permission的第二个参数像是权限,书上说
*The operation can be one of the following values:
* 0 - Execute (run the "file" - meaningless in our case)
* 2 - Write (input to the kernel module)
* 4 - Read (output from the kernel module)
我加载这个模块以后,运行了一下cat /proc/procfs3,结果输出Permission Deny.可是echo却可以执行。即使用root用户也是这样。然后我把op输出了一下,发现op = 36.
请教各位高手:op = 36是什么意思?为什么op会等于36?permission的第二个参数到底是怎么用的?谢谢!
具体的代码如下:
static int module_permission(struct inode *inode, int op)
{
/*
* We allow everybody to read from our module, but
* only root (uid 0) may write to it
*/
if (op == 4 || (op == 2 && current->euid == 0))
return 0;
/*
* If it's anything else, access is denied
*/
return -EACCES;
}
struct inode_operations里面有一个int (*permission) (struct inode *, int).我觉得permission的第二个参数像是权限,书上说
*The operation can be one of the following values:
* 0 - Execute (run the "file" - meaningless in our case)
* 2 - Write (input to the kernel module)
* 4 - Read (output from the kernel module)
我加载这个模块以后,运行了一下cat /proc/procfs3,结果输出Permission Deny.可是echo却可以执行。即使用root用户也是这样。然后我把op输出了一下,发现op = 36.
请教各位高手:op = 36是什么意思?为什么op会等于36?permission的第二个参数到底是怎么用的?谢谢!
具体的代码如下:
static int module_permission(struct inode *inode, int op)
{
/*
* We allow everybody to read from our module, but
* only root (uid 0) may write to it
*/
if (op == 4 || (op == 2 && current->euid == 0))
return 0;
/*
* If it's anything else, access is denied
*/
return -EACCES;
}
|
第二个参数是权限,不过从你的描述看很像是mask形式的,也就是说:
if (op & 4) // 这表示有读权限
你可以对比一下,root用户和普通用户时,op的值是否不一样?然后对比一下二进制
if (op & 4) // 这表示有读权限
你可以对比一下,root用户和普通用户时,op的值是否不一样?然后对比一下二进制