3

我正在实现一个字符驱动程序。所以我正在注册文件操作。当我注册read功能时,我以这种方式提取minor数字

     myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset)
     {
         int minor;

         minor = MINOR(file->f_path.dentry->d_inode->f_pos->i_rdev);
         .......

这条规则也适用于open调用。

     myopen(struct inode * inode, struct file * file)

struct file定义有参考struct inode。所以一个论点就足够了open

我的问题是:

  1. 为什么open有两个论点?(或)为什么readstruct inode *争论?
  2. 为了在read通话中提取次要号码,我使用了上面的指令。为了找到定义和头文件,我花了 1 小时 30 分钟。有什么简单的方法可以找到结构的定义吗?
  3. 有多少种方法可以找到struct inodethrough的参考,struct file 最好的方法是什么?
4

1 回答 1

4

您不得使用该结构来搜索 inode;打开文件后,文件甚至目录可能已被删除。

内核约定(参见Linux 设备驱动程序的第 3 章)是

  1. 在您的open函数中,您从 inode 中查找您自己的数据(或分配您自己的数据),并设置file->private_data指针;和

  2. 在你的read函数中,你可以file->private_data用来访问你自己的东西。

于 2013-10-26T08:39:50.340 回答