为什么打开调用两个参数(struct inode *,struct file *)?

我正在实施一个字符驱动程序。 所以我正在注册文件操作。 当我正在注册readfunction,我提取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有两个论点? (或)为什么read没有struct inode *参数?
  2. 为了在read电话中提取次要号码,我使用了上述说明。 为了find定义和头文件,我花了1小时30分钟。 有没有简单的方法来find结构的定义?
  3. 有多less种方法可以通过struct filefindstruct inode的引用,最好的办法是什么?

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

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

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

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