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

时间:2010-05-24 16:26:50

标签: linux-kernel kernel kernel-module

我正在研究内核模块,我正在尝试唯一地识别每个试图打开()模块的用户(可以是进程或线程)。

识别它们的最佳方法是什么?我可以通过系统调用得到一个ID吗?

我希望让列表中的所有用户都指定他们是否尝试打开模块进行读/写,我需要知道哪个用户尝试过操作。

3 个答案:

答案 0 :(得分:3)

我假设您正在创建一个简单的Linux 字符设备,要在 / dev / mydev 等位置创建。如果是这种情况,那么以下内容应该为您提供一个如何做的好例子。但是,如果您对打开设备有不同的含义,那么这将不适用。

您的字符设备文件操作

struct file_operations mydev_fops = {
    .open = mydev_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)。