我正在开始 linux 设备驱动程序开发,我经常看到这种代码并且无法理解它究竟做了什么:
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
llseek 方法用于改变文件中的读写位置。loff_t 是一个长偏移参数。我不明白的是上面的语法以及它是如何工作的。有人可以阐明一下吗?
我正在开始 linux 设备驱动程序开发,我经常看到这种代码并且无法理解它究竟做了什么:
#<linux/fs.h>
loff_t (*llseek) (struct file *, loff_t,int);
llseek 方法用于改变文件中的读写位置。loff_t 是一个长偏移参数。我不明白的是上面的语法以及它是如何工作的。有人可以阐明一下吗?
loff_t (*llseek) (struct file *, loff_t,int);
这只是说它llseek
是一个指向返回 aloff_t
并接受三个参数的函数的指针。第一个参数是指向 a 的指针struct file
。第二个是一个loff_t
。第三个是一个int
。
但是,如果您仔细观察,您会发现它出现在struct file_operations
. 这意味着struct file_operations
包含一个被调用的成员llseek
,它是一个指向返回 aloff_t
并接受这三个参数的函数的指针。
顺便说一句,如果您不了解如何使用包含函数指针的结构之类的东西在 C 中进行 OOP 编程,那么您在内核设备驱动程序附近真的没有任何业务。(如果您熟悉 C++,那么只需了解带有函数指针的结构基本上就是您在 C 中伪造类的方式。)