代码之家  ›  专栏  ›  技术社区  ›  Silent Control

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

  •  0
  • Silent Control  · 技术社区  · 9 年前

    首先,/proc的API(Linux3.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 dentry 其中包含 struct qstr 其中包含 const unsigned char *name . 这是应该处理这件事的方式,还是更简单、更优雅的方式(尚未测试char*名称)?

    1 回复  |  直到 9 年前
        1
  •  1
  •   talshorer    9 年前

    我建议使用 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 .