【问题标题】:Single callback for multiple /proc entries - find the caller entry多个 /proc 条目的单个回调 - 找到调用者条目
【发布时间】:2015-08-16 20:11:25
【问题描述】:

首先,/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 *name)?

【问题讨论】:

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


    【解决方案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),它允许您将任意私有数据附加到每个条目并在您的其他函数中对其进行操作。
    然后,您可以在 proc_fops 结构中实现 .open 回调。这有签名int my_open(struct inode *inode, struct file *filp);。可以通过调用PDE_DATA(inode) 访问您的私人数据,并且可能应该将其复制到filp->private_data 以供以后在获得filp 而没有获得inode 的其他函数中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多