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

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.”

我觉得这样设计有两个目的,一是节省系统资源,二是可以与进程的设计理念相一致。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值