我开始使用linux设备驱动程序开发,我经常看到这种代码并且无法理解它的确切作用:
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
llseek方法用于更改文件中的读写位置.loff_t是一个长偏移参数。 我不明白的是上面的语法及其实际工作原理。 有人可以请一些亮点吗?
答案 0 :(得分:1)
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
并获取这三个参数。
顺便说一句,如果您不了解如何使用包含指向函数的指针的结构在C中进行OOP编程,那么您真的没有任何业务可以在内核设备驱动程序附近进行。 (如果您熟悉C ++,那么只需要了解一个带有函数指针的结构基本上就是用C伪造一个类的方式。)