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

时间:2015-08-16 20:11:25

标签: c linux linux-kernel linux-device-driver

首先,/ proc(Linux 3.10+)的API似乎与旧内核书中指定的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 path,其中包含struct dentry,其中包含struct qstr,其中包含const unsigned char *name。 这是应该处理这个东西的方式还是更简单,更优雅的方式(尚未测试char *名称)?

1 个答案:

答案 0 :(得分:1)

我建议您使用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),这样您就可以将任意私人数据附加到每个条目,并在其他功能中对其进行操作。
然后,您可以在.open结构中实现proc_fops回调。这有签名int my_open(struct inode *inode, struct file *filp);。您可以通过调用PDE_DATA(inode)来访问您的私人数据,并且可能应该将其复制到filp->private_data中,以便日后用于获取filp但未获得inode的其他功能。