多个 /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 path
,struct path
包含 struct dentry
,struct 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
的函数中使用。
首先,/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 path
,struct path
包含 struct dentry
,struct 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
的函数中使用。