Linux kernel 如何唯一标识试图打开()内核模块的用户?
我正在处理一个内核模块,并试图唯一地标识试图打开()模块的每个用户(可以是进程或线程) 识别它们的最佳方法是什么?我可以从系统调用中获取ID吗Linux kernel 如何唯一标识试图打开()内核模块的用户?,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我正在处理一个内核模块,并试图唯一地标识试图打开()模块的每个用户(可以是进程或线程) 识别它们的最佳方法是什么?我可以从系统调用中获取ID吗 我希望在一个列表中获取所有用户,该列表指定他们是否试图打开模块进行读/写操作,并且我需要知道哪一个用户尝试了操作。当调用open方法时,current将指向调用它的任务(~=thread)的task结构 不过,这很少是正确的方法。我假设您正在创建一个简单的Linux字符设备,该设备将在/dev/mydev等位置创建。如果是这种情况,那么下面应该给你一个很
我希望在一个列表中获取所有用户,该列表指定他们是否试图打开模块进行读/写操作,并且我需要知道哪一个用户尝试了操作。当调用
open
方法时,current
将指向调用它的任务(~=thread)的task结构
不过,这很少是正确的方法。我假设您正在创建一个简单的Linux字符设备,该设备将在/dev/mydev等位置创建。如果是这种情况,那么下面应该给你一个很好的例子来说明如何做到这一点。但是,如果您对打开设备有不同的含义,那么这将不适用
您的char设备文件操作
你的mydev_open()
要了解有关当前进程的更多信息,请查看头文件include/linux/cred.h.您可以根据自己的要求决定unique的含义:unique元组可以由(pid)组成。或者它可以是(tid,uid),或者(filp),或者(inode)
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();
}