2

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

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

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

4

3 回答 3

3

我假设您正在创建一个简单的 Linux字符设备,将在/dev/mydev等位置创建。如果是这种情况,那么下面应该给你一个很好的例子来说明如何做到这一点。但是,如果您对open a device有不同的含义,那么这将不适用。

你的 char 设备文件操作

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

于 2010-08-02T14:59:17.417 回答
0

您可以根据自己的要求决定唯一的含义:唯一元组可能只包含 (pid)。或者它可以是 (tid, uid) 或 (filp) 或 (inode)。

于 2010-11-22T03:34:56.307 回答
0

当您的open方法被调用时,current将指向task_struct正在调用它的任务(~= 线程)。

不过,这很少是正确的方法。

于 2010-05-25T00:45:18.650 回答