我正在实施一个角色驱动程序。所以我正在注册文件操作。当我注册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
调用就足够了一个参数。
我的问题是:
open
有两个参数? (或)为什么read
没有struct inode *
参数?read
电话中提取次要号码,我使用了上述说明。为了找到定义和头文件,花了1小时30分钟给我。有没有简单的方法来找到结构的定义?struct inode
到struct file
的参考资料以及最佳方式?答案 0 :(得分:4)
您不得使用该结构来搜索inode;打开文件后,文件甚至目录可能已被删除。
内核约定(参见Linux Device Drivers的第3章)是
在open
函数中,您从inode中查找自己的数据(或分配自己的数据),并设置file->private_data
指针;以及
在您的read
功能中,您可以使用file->private_data
访问自己的内容。