Linux内核:seek机制

在我们编写CC1100驱动程序和倒车雷达驱动程序的时候,我们都用到了当前读取数据标志位,即我们在驱动程序中会定义一个容器用来存放数据,每一次我们读完一个数据时,我们都会将我们的读数据变量加1,这样下一次再来读取数据的时候就不会读到以前的数据了,都会是全新的数据。当然这个方法是我们自己在编写驱动程序时候自己定义的。是否在Linux内核中本来就有这样的机制呢?答案是肯定的。这个机制就是seek机制,那么seek机制又是如何实现记录读取数据位置的机智的呢?同poll机制一样,在file->fop里面也定义有seek的函数指针,那就是llseek,这个函数指针当然是指向我们自己编写的驱动程序的函数了。其实seek实现的机制比较简单,主要就是围绕当前文件指针file->f_ops这个指针来的,这个指针存放的是当前驱动程序文件的读写数据位置,我们在哪里用到了f_ops这个指针呢?首先我们来看一下我们比较熟悉的read函数和open函数,我们知道在这两个函数中我们所要用到的参数都是一样的CC1100_read(struct file *filp, char __user *buff, size_t count, loff_t *offp)和static ssize_t CC1100_write(struct file *filp, const char *buff, size_t count, loff_t *offp)其里面的参数都是一样的,第一个参数是file(该设备文件)、第二个参数是用户层传过来的buff指针,第三个是用户层传过来的写入或者读取长度大小(size_t),那么第四个参数是什么呢,好像我们之前都没有用过,这第四个参数保存的数据就是我们上面讲的file->f_ops,用来记录我们驱动程序文件的读取数据的位置。通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值