0

我正在开始 linux 设备驱动程序开发,我经常看到这种代码并且无法理解它究竟做了什么:

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

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

4

1 回答 1

1
    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 中伪造类的方式。)

于 2012-07-06T10:39:59.887 回答