Linux kernel 如何唯一标识试图打开()内核模块的用户?

Linux kernel 如何唯一标识试图打开()内核模块的用户?,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我正在处理一个内核模块,并试图唯一地标识试图打开()模块的每个用户(可以是进程或线程) 识别它们的最佳方法是什么?我可以从系统调用中获取ID吗 我希望在一个列表中获取所有用户,该列表指定他们是否试图打开模块进行读/写操作,并且我需要知道哪一个用户尝试了操作。当调用open方法时,current将指向调用它的任务(~=thread)的task结构 不过,这很少是正确的方法。我假设您正在创建一个简单的Linux字符设备,该设备将在/dev/mydev等位置创建。如果是这种情况,那么下面应该给你一个很

我正在处理一个内核模块,并试图唯一地标识试图打开()模块的每个用户(可以是进程或线程)

识别它们的最佳方法是什么?我可以从系统调用中获取ID吗


我希望在一个列表中获取所有用户,该列表指定他们是否试图打开模块进行读/写操作,并且我需要知道哪一个用户尝试了操作。

当调用
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();
}