多个 /proc 条目的单个回调 - 找到调用者条目

Single callback for multiple /proc entries - find the caller entry

首先,/proc (Linux 3.10+) 的 API 似乎与旧内核书籍中指定的非常不同。

我正在创建多个 /proc 条目,它们具有与回调关联的相同写函数。同样代表读取功能。

如果我写入或读取了上面提到的 /proc 条目之一,我想知道哪个条目被写入或读取,并且我希望能够在回调函数中获得该信息。

我正在使用 proc_create(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops)

回调函数具有以下参数列表:(struct file *filp, char *buf, size_t count, loff_t *offp).

我无法弄清楚什么可以给我任何关于从哪个文件触发调用的线索。首先,我认为 struct file* 可能会有所帮助。我发现 struct file 包含 struct pathstruct path 包含 struct dentrystruct qstr 包含 const unsigned char *name。 这是应该处理这件事的方式还是更简单、更优雅的方式(尚未测试 char *name)?

我建议在您的案例中使用 struct proc_dir_entry *proc_create_data(const char *name, umode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops, void *data),这样您就可以将任意私有数据附加到每个条目,并在您的其他函数中对其进行操作。
然后,您可以在 proc_fops 结构中实现 .open 回调。这具有签名 int my_open(struct inode *inode, struct file *filp);。您的私人数据可以通过调用 PDE_DATA(inode) 来访问,并且可能应该被复制到 filp->private_data 以供以后在其他获得 filp 而没有获得 inode 的函数中使用。