在我们编写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,用来记录我们驱动程序文件的读取数据的位置。通
Linux内核:seek机制
最新推荐文章于 2023-04-23 16:24:26 发布