我正在研究内核模块,我正在尝试唯一地识别每个试图打开()模块的用户(可以是进程或线程)。
识别它们的最佳方法是什么?我可以通过系统调用得到一个ID吗?
我希望让列表中的所有用户都指定他们是否尝试打开模块进行读/写,我需要知道哪个用户尝试过操作。
答案 0 :(得分:3)
我假设您正在创建一个简单的Linux 字符设备,要在 / dev / mydev 等位置创建。如果是这种情况,那么以下内容应该为您提供一个如何做的好例子。但是,如果您对打开设备有不同的含义,那么这将不适用。
struct file_operations mydev_fops = {
.open = mydev_open,
};
static int mydev_open(struct inode *inode, struct file *filp)
{
pid_t pid;
int user_id;
/* This is the thread-ID, traditional PID is found in current->pgid */
pid = current->pid;
/* The current user-id (as of 2.6.29) */
user_id = current_uid();
}
有关当前流程的详细信息,请查看头文件 include / linux / cred.h 。
答案 1 :(得分:0)
调用open
方法后,current
将指向正在调用它的任务(〜=线程)的task_struct
。
但这很少是正确的方法。
答案 2 :(得分:0)
根据您的要求,您决定了什么独特的方法:独特的元组可能只包含(pid)。或者它可以是(tid,uid),或(filp),或(inode)。