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

时间:2013-10-26 05:14:30

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

我正在实施一个角色驱动程序。所以我正在注册文件操作。当我注册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有两个参数? (或)为什么read没有struct inode *参数?
  2. 要在read电话中提取次要号码,我使用了上述说明。为了找到定义和头文件,花了1小时30分钟给我。有没有简单的方法来找到结构的定义?
  3. 我们有多少种方式可以找到struct inodestruct file的参考资料以及最佳方式?

1 个答案:

答案 0 :(得分:4)

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

内核约定(参见Linux Device Drivers的第3章)是

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

  2. 在您的read功能中,您可以使用file->private_data访问自己的内容。