1:open方法原型:int (*open)( struct inode *inode, struct file *filp)
参数解释:
第一个参数是一个指向inode 结构体类型的指针,主要是为了使用inode结构体中的inode->i_rdev这一项,这一项包含了被打开的设备的真正的设备号cdev(什么叫真正的设备号?莫非还有假的?还不清楚),而这个cdev又是属于scull_dev这个结构体的一项,我们通常需要的不是cdev这一项,二是包含这一项的那个scull_dev结构体
第二个参数是一个file类型的指针,这里面用到它主要是为了用到这个结构体里面的关于文件的一些属性(具体用哪些信息?我也不清楚!)
2:这里面有一个container_of( )这个函数,他的原型是:container_of (pointer,container_type,container_field)
参数解释:
第一个参数,可能是一个指针,用来存放最后结果的(至于什么事最后结果,待会讨论,记住他是一个指针)
第二个残烛,他是一种数据类型,比如书上的struct scull_dev 他是一种结构体类型
第三个参数,他就是第二个参数中所包含的元素,例如struct_scull->cdev
使用:container_of(inode->i_rdev,struct scull_dev,cdev)
这个函数是不是可以这样理解?根据cdev的地址,我们利用这个函数可以找到包含cdev这一项的scull_dev结构体的地址,然后就把得到的这个结构体的地址保存到inode->i_rdev中,以便使用。
这个函数的返回值又是什么呢?是不是就是保存到inode->i_rdev里面的这个地址能?


txgc_wm 于 2011-05-12 01:29:27发表:
朋友,有机会可以一起探讨一下。
QQ:496223538