系统相关
首页 > 系统相关> > linux-为什么使用两个参数(struct inode *,struct file *)进行打开调用?

linux-为什么使用两个参数(struct inode *,struct file *)进行打开调用?

作者:互联网

我正在实现一个字符驱动程序.所以我正在注册文件操作.当我注册读取功能时,我以此方式提取了次要号码

     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);
         .......

此规则也适用于公开通话.

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

struct文件定义具有对struct inode的引用.因此,一个参数足以进行公开通话.

我的问题是:

>为什么打开有两个参数? (或)为什么读取没有struct inode *参数?
>为了在读取呼叫中提取次要号码,我使用了上面的说明.要查找定义和头文件,我花了1小时30分钟.有什么简单的方法可以找到结构的定义?
>通过结构文件可以找到结构索引节点引用的方法有几种,什么是最佳方法?

解决方法:

您不得使用该构造搜索索引节点.打开文件后,文件甚至目录可能已被删除.

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

>在打开函数中,您从inode查找您自己的数据(或分配您自己的数据),并设置file-> private_data指针;和
>在读取功能中,然后使用file-> private_data访问您自己的内容.

标签:embedded-linux,linux-kernel,linux-device-driver,linux
来源: https://codeday.me/bug/20191030/1966615.html