首先,/ 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 *名称)?
答案 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
的其他功能。