您的位置:首页 > 运维架构

关于lld3例子open中filp->private_data = dev;这一句的理解

2011-03-10 09:30 375 查看
ldd3中说到open应完成以下工作:
1.检查设备特定的错误(注入设备未就绪或类似的硬件问题)。
2.如果设备是首次打开,则对其进行初始化。
3.如有必要,更新f_op指针。
4.分配并填写置于filp->private_data里的数据结构。
关于第4点,一直心存余虑,不明白是什么意思,看网上写的很多其他的例子,也没有做第4点的操作。
其实ldd3上面已经在release方法里面做了说明,“并不是每个close系统调用都会引起对release方法的调用,只有真正释放设备数据结构的close才会调用release方法的调用。内核对每个file结构维护其被使用多少次的计数器。对于dup/fork等系统调用,并不会创建新的数据结构(仅由open创建,在open函数中通过申请并初始化的cdev结构,运用container_of求出包含cdev的scull_dev结构,并赋值给filp->private_data,从而分配一个新的数据结构),他们只是增加对数据结构的计数。当file结构的计数减为零时,才会调用close,执行release.”
我觉得这样设计有两个目的,一是节省系统资源,二是可以与进程的设计理念相一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 file 工作