Linux设备驱动程序

问题描述:

我入门的Linux设备驱动程序的开发,我经常看到这样的代码,但无法了解它究竟:Linux设备驱动程序

#<linux/fs.h> 
loff_t (*llseek) (struct file *, loff_t,int); 

的llseek方法是用来改变的读写在文件中的位置。loff_t是一个长偏移参数。 我不明白的是上面的语法以及它是如何工作的。 有人可以摆脱一些光线吗?

loff_t (*llseek) (struct file *, loff_t,int); 

这只是说,llseek是一个指向返回loff_t和三个参数的函数。第一个参数是指向struct file的指针。第二个是loff_t。第三个是int

但是,如果仔细观察,您会看到它出现在struct file_operations的声明中。这意味着struct file_operations包含一个名为llseek的成员,该成员是指向返回loff_t并采用这三个参数的函数的指针。顺便说一句,如果你不明白如何使用像包含函数指针的结构这样的东西来做OOP编程,那么在内核设备驱动程序附近你实际上没有任何业务。 (如果你熟悉C++,那么就明白一个指向函数的结构基本上就是你用C伪造类的方式。)

+0

我唯一怀疑的地方是loff_t(* llseek)。这似乎很明显。 – user1179510 2012-07-06 10:55:29

+0

C++程序员不熟悉OOP如何在C中“伪造”是很平常的事情。如果您了解C++类,您将很快掌握C++类。这是一种多态的形式。 – 2012-07-07 02:38:47